http://www.cnblogs.com/thinkingandworkinghard/articles/5589484.html
平常做的工作中,有一部分是同步数据的。但是同步的过程中碰到个问题,是这样子的:我们的数据是从公司另一个部门的服务器上同步过来的,里面有图片,但是只有图片的路径。这样我们每次读取图片的时候,读取的是他们的服务器的图片,一旦他们的服务器出现问题,我们这边就会读取不到。同事提出了这个问题,并让我根据他们的图片地址在同步数据的时候,把图片也下载到我们的服务器上,这样读取的时候读取成我们自己的服务器上,于是上网先搜了下怎么根据图片路径保存到本地:参考http://takeme.iteye.com/blog/1683380
import java.io.File; 2.import java.io.FileOutputStream; 3.import java.io.InputStream; 4.import java.io.OutputStream; 5.import java.net.URL; 6.import java.net.URLConnection; 7. 8. 9.public class DownloadImage { 10. 11. /** 12. * @param args 13. * @throws Exception 14. */ 15. public static void main(String[] args) throws Exception { 16. // TODO Auto-generated method stub 17. download("http://ui.51bi.com/opt/siteimg/images/fanbei0923/Mid_07.jpg", "51bi.gif","c:\\image\\"); 18. } 19. 20. public static void download(String urlString, String filename,String savePath) throws Exception { 21. // 构造URL 22. URL url = new URL(urlString); 23. // 打开连接 24. URLConnection con = url.openConnection(); 25. //设置请求超时为5s 26. con.setConnectTimeout(5*1000); 27. // 输入流 28. InputStream is = con.getInputStream(); 29. 30. // 1K的数据缓冲 31. byte[] bs = new byte[1024]; 32. // 读取到的数据长度 33. int len; 34. // 输出的文件流 35. File sf=new File(savePath); 36. if(!sf.exists()){ 37. sf.mkdirs(); 38. } 39. OutputStream os = new FileOutputStream(sf.getPath()+"\\"+filename); 40. // 开始读取 41. while ((len = is.read(bs)) != -1) { 42. os.write(bs, 0, len); 43. } 44. // 完毕,关闭所有链接 45. os.close(); 46. is.close(); 47. } 48. 49.}
这样子确实可以下载到本地,为了防止跨平台,需要把里面的"\\"或者"/"换成 File.separtor,原来我是想把同步工程的图片路径放在tomcat的跟目录下System.getProperty("user.dir"),但是同事提醒了下,说同步的项目不再tomcat里面,这样图片上传的路径没办法放到tomcat的共享目录了。最后再一想,既然这样,还不如让运营人员手工上传或者在另外一个项目里面给添加一个 功能,这样也不用我再同步的项目里面来写了。注意这样定了,明天去公司实现吧。