1. 程式人生 > >ftp圖片伺服器搭建!ftp上傳到圖片伺服器,通過http協議讀取圖片

ftp圖片伺服器搭建!ftp上傳到圖片伺服器,通過http協議讀取圖片

現在在搞圖片伺服器,需求是

1.使用者上傳的圖片不能直接上傳到應用伺服器,而且要上傳到另外一太專門的伺服器上去,目的是為了實現負載和共享,

2.從圖片伺服器上讀取圖片

解決思路:

思路一,用ftp上傳,用ftp下載

思路二,用ftp上傳,用http下載[圖片伺服器裝一個web容器。如tomcat]

考慮到下載時如果用ftp,因為存在鑑權操作,而且每次都要建立新連結並斷開諒解,這樣效率很低,所以決定用思路二:

開始動手

遠端操作資料,網上好多人說有兩種方式:1,用sun提供的ftpClient   2.用apache提供的開源元件

我這裡選擇了sun的jdk自帶的ftpClient.

遇到的問題:1,剛開始我用的jdk7,結果發現sun的類識別呼叫報錯,經查是因為jdk7對net包下的ftpClient做個修改,所以有的api不能用,

解決辦法:果斷換回jdk6編譯。問題解決

2.上傳完成後發現中文的檔名都變成了亂碼。經查是因為sun預設進行了編碼is08859-1; 

解決辦法:自己寫個類 MyFtpClient  繼承FtpClient即可,只有個方法用來設定轉碼,一般設定為GBk即可。程式碼下面附

3.中文總算順利傳上去,本地用servlet呼叫http://來訪問傳上去的圖片,結果發現只要檔名有中文的檔案,無論是用瀏覽器位址列訪問還是在servlete後臺

String urlString = "http://10.10.110.112:8080/fdc-report-MySQL"+"/"+path+"/"+temp2;
   URL url = new URL(urlString); 
   URLConnection conn = url.openConnection();  

InputStream bis = conn.getInputStream();

都訪問不了:

解決辦法“:tomcat預設不知道中文訪問,所以對tomcat進行設定,讓中文路徑也可以訪問:

 在Tomcat安裝目錄下找到server.xml檔案,找到 

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
       在裡面加入URIEncoding="utf-8" 這個屬性,儲存,然後重啟tomcat即可。 

4.上傳的檔名字中有空格,tomcat也訪問不了:原因是:路徑中空格要進行轉換。空格被轉碼成'+'了,而在tomcat伺服器中,空格是'%20',所以會導致無法訪問到該路徑

解決辦法: 

String temp1=URLEncoder.encode(filename, "UTF-8");
   String temp2=temp1.replaceAll("\\+", "%20");   
   String urlString = "http://10.10.110.112:8080/fdc-report-mysql"+"/"+path+"/"+temp2;
   URL url = new URL(urlString); 

到此問題基本解決  .

遇到問題就要內心解決,一定可以搞定。加油!!!

下面給大家附上程式碼: