java下载文件到本地 ajax返回文件流
- 数据库
- 2023-09-02
- 74
很多朋友对于java下载文件到本地和ajax返回文件流不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!java读取本地文件一直失败Filefil...
很多朋友对于java下载文件到本地和ajax返回文件流不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
java读取本地文件一直失败
Filefile=newFile("F://ass.gif");file.exist的返回值是布尔类型
如何将java程序转换成windows服务
使用JNI调用操作系统的函数,加载注册成为系统服务。先你必须用C或C++定义本地方法,再编译成DLL组件,放到System32目录中。再将你的Java程序装载DLL库,再调用C/C++中定义的方法,完成注册服务功能。
java无法直接操作底层OS的函数。只有JNI可以实现。总之,注册系统服务的功能,必须依赖C/C++实现。如果java可以做的到,那么就不能跨平台了。
java怎样通过视频播放地址获取到视频的下载地址
在上传时手动输入视频时长,但是之前库中有上万条数据没这个信息,如果这样一条一条手动输入,人都得疯掉。所以谁也不提不管这破事,在这之前的视频时长信息就让它空在那。最近领导让我做个按类目分类统计视频时长信息,和领导反映了这个问题,最终解决方案就把没有的做0处理。在完成了这个功能后,我就在想能用什么方式把之前的视频时长全部给更新上去。手动输入这个肯定时不行的,必须得java后台来获取录入。但上网搜索了无数的帖子,最终通过java实现的只有一种方法能用,那就是先要下载到本地,然后再一个一个的遍历查询。看着服务器上的上万个视频,想想这方法就让人头皮发麻。
虽然没找到可行方法,但基本上都是用jave获取视频信息的。于是就去查看jave的官方API,了解到是通过FFmpeg处理多媒体文件,接着又查看FFmpeg的API,发现ffmpeg在命令行中使用时可以通过url获取视频。但使用jave工具包时获取MultimediaInfo就必须得传入File,可是又不能通过url创建File。于是就就反编译jave的jar从源码上动手。
//源码
publicMultimediaInfogetInfo(Filesource)
throwsInputFormatException,EncoderException
{
FFMPEGExecutorffmpeg;
ffmpeg=locator.createExecutor();
ffmpeg.addArgument("-i");
ffmpeg.addArgument(source.getAbsolutePath());
try
{
ffmpeg.execute();
}
catch(IOExceptione)
{
thrownewEncoderException(e);
}
MultimediaInfomultimediainfo;
RBufferedReaderreader=null;
reader=newRBufferedReader(newInputStreamReader(ffmpeg.getErrorStream()));
multimediainfo=parseMultimediaInfo(source,reader);
ffmpeg.destroy();
returnmultimediainfo;
Exceptionexception;
exception;
ffmpeg.destroy();
throwexception;
}
ffmpeg传入参数时使用的是
source.getAbsolutePath()获取文件的绝对路径,所以通过url创建File在这是获取的就是项目路径+url了。
然后就把传入path修改成了url,但是运行还是出现InputFormatException异常。好吧,那就继续找问题吧
然后debug发现虽然修改了path,但是这路径细看还是不对
http://v1.v.123.com\11\919\2019\zb\0181.mp4
正确的url应该是这样的:http://v1.v.123.com/11/919/2019/zb/0181.mp4
接着更正问题。
if(path.indexOf("http")!=-1){
path=source.getPath();
path=path.split(":")[0]+"://"+path.split(":")[1].substring(1);
path=path.replace("\\","/");
}
这次终于没问题了,可以正常使用了。然后还有下面这个方法的调用,源码中有个获取异常信息的也得修改path值
multimediainfo=parseMultimediaInfo(source,reader);
这个也和只需重复上面的操作就OK了。这样就完全搞定了。
importlx.jave.AudioAttributes;
importlx.jave.AudioInfo;
importlx.jave.Encoder;
importlx.jave.EncoderException;
importlx.jave.EncodingAttributes;
importlx.jave.InputFormatException;
importlx.jave.MultimediaInfo;
importlx.jave.VideoInfo;
importlx.jave.VideoSize;
/**
*jave多媒体工具类(需导出javejar包)
*@authorlongxiong
*
*/
publicclassJaveToolsTest{
publicstaticvoidmain(String[]args)throwsInputFormatException,EncoderException,Exception{
/**
*获取本地多媒体文件信息
*/
//编码器
Encoderencoder=newEncoder();
Filefile=newFile("http://*****018.mp4");
//多媒体信息
MultimediaInfoinfo=encoder.getInfo(file);
//时长信息
longduration=info.getDuration();
System.out.println("视频时长为:"+duration/1000+"秒");
//音频信息
AudioInfoaudio=info.getAudio();
intbitRate=audio.getBitRate();//比特率
intchannels=audio.getChannels();//声道
Stringdecoder=audio.getDecoder();//解码器
intsRate=audio.getSamplingRate();//采样率
System.out.println("解码器:"+decoder+",声道:"+channels+",比特率:"+bitRate+",采样率:"+sRate);
//视频信息
VideoInfovideo=info.getVideo();
intbitRate2=video.getBitRate();
FloatfRate=video.getFrameRate();//帧率
VideoSizevideoSize=video.getSize();
intheight=videoSize.getHeight();//视频高度
intwidth=videoSize.getWidth();//视频宽度
System.out.println("视频帧率:"+fRate+",比特率:"+bitRate2+",视频高度:"+height+",视频宽度:"+width);
}
}
如何利用java将本地文件上传到服务器
1.首先在本地存放一个文件;
2.接着打开IDEA开始网络编程,分别创建两个类,客户端类和服务器类;
3.接着在客户端类中创建一个本地文件输入流,读取本地文件;同时创建Socket对象,并使用网络字节输出流向服务器发起传输文件的请求;
4.然后在服务器类中创建ServerSocket对象,并使用对象的getInputStream()方法读取从客户端传来的文件;同时创建本地文件输出流,用于写出并将文件存放到服务器的指定位置;
5.服务器端接收并存储文件成功后,服务器类需要向客户端反馈相关信息,因此继续使用Socket类的getOutputStream()方法反馈文件“上传成功”的信息;客户端类使用getInputStream()方法读取服务器反馈的信息,完成一次通信;
6.最后,先启动服务器类,在启动客户端类,查看文件是否上传成功。
url下载文件原理
URL下载其实就是网页直接下载,要实现URL下载,下载的文件必须有具体的链接地址或者这个链接地址能够被Folx“翻译”指向真正的文件链接地址,所以特别要注意,如果网页提供的链接地址不是指向文件真正存放的地址,该文件是无法被下载的。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!
本文链接:http://xinin56.com/su/14226.html