今天花了一整天時間解決tomcat跨服務器上傳文件失敗的問題,經過各種搜索終於解決了,下面是解決具體方法:
一、首先修改Tomcat的只讀屬性為false。
在tomcat的conf目錄下的web.xml文件中找到<servlet>標簽,添加初始化參數readonly,代碼如下:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
二、將文件名進行URL編碼:
這個能夠解決狀態碼為400的錯誤。注意:
URLEncoder的導包語句為 import java.net.URLEncoder;不要導錯了另一個包,我就不寫錯誤包出來了以免誤導。
@Controller @RequestMapping("springmvc/user") public class UserController { /** * 跨服務器文件上傳 * @param upload * @return 跳轉到success.jsp的頁面 * @throws Exception */ @RequestMapping("/fileUpload3") public String fileUpload3(MultipartFile upload) throws Exception{ System.out.println("跨服務器文件上傳。。。。"); //定義上傳文件服務器的路徑
String path = "http://localhost:9090/uploads/"; //說明文件上傳項 //獲取上傳文件的名稱
String filename = upload.getOriginalFilename(); //URLEncoder的導包語句為 import java.net.URLEncoder;
String encodeFileName = URLEncoder.encode(filename,"UTF-8"); //這個輸出語句為調試用 // System.out.println(encodeFileName); //防止文件重復
String uuid = UUID.randomUUID().toString().replace("-",""); filename = uuid + "-" + encodeFileName; //這個輸出語句為調試用 // System.out.println(filename); //創建客戶端對象
Client client = Client.create(); //和圖片服務器進行連接
WebResource webResource = client.resource(path+filename); //上傳文件
webResource.put(upload.getBytes()); return "success"; } }
三、最后一步(如果有這個問題就解決,沒有可忽略)
如果還是報409的錯誤,你最好在tomcat的webapps目錄下建立一個uploads目錄,這個目錄在你要上傳文件的那個tomcat服務器的對應虛擬目錄下建立,和你上面寫的path那個對應。
我的虛擬目錄是 “/” ,所以就直接建立了一個uploads的目錄就好了。如圖

這下子我的問題就都解決了,能夠成功上傳文件到另一個服務器了。
