如何读取一个远程图片,并保存到本地。 我有一个需求是在远程绝对路径读取一张图片,怎么读入会速度快并且能传输,还能保存到本地。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 构造一个URL对象,然后再根据URL构造好IO对象,就可以操作了 要用Socket通信还是URL用URL简单直接建一个URL对象,然后取得他的数据流读到本地就可以了注意下载图片要用字节流,想传的快一点就用带缓冲的字节流注意写java网络 一定要关流 包括文件流 I/O流等Good Luck :-) java技术交流,讨论java的技术细节和最新技术。欢迎中高级程序员加入讨论。QQ群:3001581 SOCKET通信速度比较快. HTTP使用相对方便,开发比较容易. SOCKETudp最快了!呵呵可是不保证质量 <%@page contentType="text/html;charset=gb2312"%><%@page import="java.io.*"%><jsp:useBean id="str" scope="page" class="getStr.getStr"/><%String Filename = request.getParameter("FileName");//接收传过来的文件名if(Filename==null){Filename = "";}else{Filename=str.getStr(Filename);}String Path = request.getParameter("Path");//接收传过来的文件对应的文件夹File file = new File(request.getRealPath("/")+"MsgPerson/"+Path+"/"+Filename);out.print(file); if(!file.exists()) out.println("文件不存在,请联系系统管理员!"); else{ //得到文件名字和路径 String filename = ""; String S_FilePath=request.getRealPath("/")+"MsgPerson\\"+Path+"\\"+Filename; int pos = 0; pos = S_FilePath.lastIndexOf("\\");//找到最后一个"\\"记录其后的字符数 if(pos != -1) filename = S_FilePath.substring(pos+1, S_FilePath.length()); //取出附件名 String strChina = new String(filename.getBytes("gb2312"),"iso8859-1"); // 设置响应头和下载保存的文件名 response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition", "attachment; filename=\"" + strChina+ "\""); // 打开指定文件的流信息 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 < fileLen) { readBytes = fileInputStream.read(b); totalRead += readBytes; response.getOutputStream().write(b, 0, readBytes); } fileInputStream.close(); }%> SOCKET+线程,分割文件块,通过配置线程数来控制下载速度,网速快线程数可以相应增加.类似网际快车的东东 一个图片,一般来说不会太大可以用URL加接就可以了用javax.imageio.ImageIO.read(URL input)就可以了它返回一个BufferedImage对象然后你可以调用ImageIO.write()方法把它保存在本地磁盘上就可以了 Socket二进制流传给他,他以二进制流获得。他可以将二进制流生成图片格式的文件保存到磁盘,也可以在内存上构造一个图片对象,以供使用。 URL就好了!一个图片也大不到哪去!不用那么复杂 是的通过URL就可以取出来了 简单 恩,用URL,有人能给我个参考的代码吗? 到底用哪个包装流最好用。如果传输过去了,怎么解析。 请教一个问题 在同一个java文件下,可以有几个public类 做个 登陆后记录用户使用的时间 不知道怎么实现 请回答是或否:能否通过反射分析源代码,获得Map的key? List元素的类别问题 JAVA学习站点 请问应该如何更新 JTextField里的内容 关于文本框输入的问题 rollback执行了,但数据库数据却不对,WHY? jdk1.3中Enumeration是接口,但是为什么能直接用? wait()h和notify()用法的线程同步问题? 下载J2EE视频教程朋友的快来啊
用URL简单
直接建一个URL对象,然后取得他的数据流
读到本地就可以了
注意下载图片要用字节流,想传的快一点就用带缓冲的字节流
注意写java网络 一定要关流 包括文件流 I/O流等Good Luck :-)
udp最快了!呵呵
可是不保证质量
<%@page import="java.io.*"%>
<jsp:useBean id="str" scope="page" class="getStr.getStr"/>
<%
String Filename = request.getParameter("FileName");//接收传过来的文件名
if(Filename==null){Filename = "";}
else{Filename=str.getStr(Filename);}
String Path = request.getParameter("Path");//接收传过来的文件对应的文件夹File file = new File(request.getRealPath("/")+"MsgPerson/"+Path+"/"+Filename);
out.print(file);
if(!file.exists())
out.println("文件不存在,请联系系统管理员!");
else{
//得到文件名字和路径
String filename = "";
String S_FilePath=request.getRealPath("/")+"MsgPerson\\"+Path+"\\"+Filename; int pos = 0;
pos = S_FilePath.lastIndexOf("\\");//找到最后一个"\\"记录其后的字符数 if(pos != -1)
filename = S_FilePath.substring(pos+1, S_FilePath.length()); //取出附件名
String strChina = new String(filename.getBytes("gb2312"),"iso8859-1");
// 设置响应头和下载保存的文件名
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment; filename=\"" + strChina+ "\"");
// 打开指定文件的流信息
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 < fileLen)
{
readBytes = fileInputStream.read(b);
totalRead += readBytes;
response.getOutputStream().write(b, 0, readBytes);
}
fileInputStream.close();
}
%>
网速快线程数可以相应增加.类似网际快车的东东
可以用URL加接就可以了
用javax.imageio.ImageIO.read(URL input)就可以了
它返回一个BufferedImage对象
然后你可以调用ImageIO.write()方法把它保存在本地磁盘上就可以了
他可以将二进制流生成图片格式的文件保存到磁盘,
也可以在内存上构造一个图片对象,以供使用。