站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题如何读取一个远程图片,并保存到本地。

如何读取一个远程图片,并保存到本地。

摘要: 如何读取一个远程图片,并保存到本地。


我有一个需求是在远程绝对路径读取一张图片,怎么读入会速度快并且能传输,还能保存到本地。


构造一个URL对象,然后再根据URL构造好IO对象,就可以操作了


要用Socket通信还是URL
用URL简单
直接建一个URL对象,然后取得他的数据流
读到本地就可以了
注意下载图片要用字节流,想传的快一点就用带缓冲的字节流
注意写java网络 一定要关流 包括文件流 I/O流等

Good Luck :-)


java技术交流,讨论java的技术细节和最新技术。欢迎中高级程序员加入讨论。QQ群:3001581


SOCKET通信速度比较快. HTTP使用相对方便,开发比较容易.


SOCKET
udp最快了!呵呵
可是不保证质量


-#60;%@page contentType=-#34;text/html;charset=gb2312-#34;%-#62;
-#60;%@page import=-#34;java.io.*-#34;%-#62;
-#60;jsp:useBean id=-#34;str-#34; scope=-#34;page-#34; class=-#34;getStr.getStr-#34;/-#62;
-#60;%
String Filename = request.getParameter(-#34;FileName-#34;);//接收传过来的文件名
if(Filename==null){Filename = -#34;-#34;;}
else{Filename=str.getStr(Filename);}
String Path = request.getParameter(-#34;Path-#34;);//接收传过来的文件对应的文件夹

File file = new File(request.getRealPath(-#34;/-#34;)+-#34;MsgPerson/-#34;+Path+-#34;/-#34;+Filename);
out.print(file);
if(!file.exists())
out.println(-#34;文件不存在,请联系系统管理员!-#34;);
else{
//得到文件名字和路径
String filename = -#34;-#34;;
String S_FilePath=request.getRealPath(-#34;/-#34;)+-#34;MsgPerson//-#34;+Path+-#34;//-#34;+Filename;

int pos = 0;
pos = S_FilePath.lastIndexOf(-#34;//-#34;);//找到最后一个-#34;//-#34;记录其后的字符数

if(pos != -1)
filename = S_FilePath.substring(pos+1, S_FilePath.length()); //取出附件名
String strChina = new String(filename.getBytes(-#34;gb2312-#34;),-#34;iso8859-1-#34;);

// 设置响应头和下载保存的文件名
response.setContentType(-#34;APPLICATION/OCTET-STREAM-#34;);
response.setHeader(-#34;Content-Disposition-#34;, -#34;attachment; filename=/-#34;-#34; + strChina+ -#34;/-#34;-#34;);

// 打开指定文件的流信息
java.io.FileInputStream fileInputStream = new java.io.FileInputStream(file);

// 写出流信息
int totalRead = 0;
int readBytes = 0;
long fileLen = file.length();
byte b[] = new byte[65000];//设置缓存大小
response.resetBuffer();
while((long)totalRead -#60; fileLen)
{
readBytes = fileInputStream.read(b);
totalRead += readBytes;
response.getOutputStream().write(b, 0, readBytes);
}
fileInputStream.close();
}
%-#62;


SOCKET+线程,分割文件块,通过配置线程数来控制下载速度,
网速快线程数可以相应增加.类似网际快车的东东


SOCKET应该是最方便快捷得了


一个图片,一般来说不会太大
可以用URL加接就可以了
用javax.imageio.ImageIO.read(URL input)就可以了
它返回一个BufferedImage对象
然后你可以调用ImageIO.write()方法把它保存在本地磁盘上就可以了



我想要把图片读出来,再传输给调用我的终端,用什么传输好呢? 传一个2进制的字符数组?还是要传个什么对象,还有那边的终端要怎么解析并显示出来啊。


Socket二进制流传给他,他以二进制流获得。
他可以将二进制流生成图片格式的文件保存到磁盘,
也可以在内存上构造一个图片对象,以供使用。


URL就好了!一个图片也大不到哪去!不用那么复杂


是的通过URL就可以取出来了 简单


恩,用URL,有人能给我个参考的代码吗? 到底用哪个包装流最好用。如果传输过去了,怎么解析。


↑返回目录
前一篇: 新手上路
后一篇: 在下拉框中选择所有分类时,应该传递什么参数?在线等