平常做的工作中,有一部分是同步數據的。但是同步的過程中碰到個問題,是這樣子的:我們的數據是從公司另一個部門的服務器上同步過來的,里面有圖片,但是只有圖片的路徑。這樣我們每次讀取圖片的時候,讀取的是他們的服務器的圖片,一旦他們的服務器出現問題,我們這邊就會讀取不到。同事提出了這個問題,並讓我根據他們的圖片地址在同步數據的時候,把圖片也下載到我們的服務器上,這樣讀取的時候讀取成我們自己的服務器上,於是上網先搜了下怎么根據圖片路徑保存到本地:參考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的共享目錄了。最后再一想,既然這樣,還不如讓運營人員手工上傳或者在另外一個項目里面給添加一個 功能,這樣也不用我再同步的項目里面來寫了。注意這樣定了,明天去公司實現吧。