要設置了enctype屬性才能上傳,需要使用上傳的jar包,這里使用的是cos-26Dec2008.jar,
關於跨域上傳文件:
跨域上傳文件總會報錯,即使服務器端設置了header('Access-Control-Allow-Origin: *'),仍會報錯說缺少multipart屬性,發現用form提交就沒問題。原因是,
HTML5上傳的時候就是用的CORS規范,即:在發送真正的上傳請求之前會先發送一條OPTIONS請求給服務器,這時候需要服務器響應允許跨域上傳的HTTP頭,然后中斷輸出。瀏覽器接到允許跨域上傳的HTTP頭后會再次發起真正的上傳文件請求(POST)。詳細分析參考http://www.cnblogs.com/woshimrf/p/js-cors.html
因此,上傳文件需要應答的,第一次options請求需要返回允許跨域的信息,而我通常第一次就當做文件接收了,所以接收不到。
做法:對請求進行攔截,如果是options請求直接返回
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, OPTIONS");
如果是別的請求則通過。
1 String method = request.getMethod(); 2 if ("OPTIONS".equals(method)) { 3 return; 4 } 5 nextHandler.handle(target, request, response, isHandled);
關於跨域的知識,參考http://www.cnblogs.com/woshimrf/p/js-cors.html
對於form提交跨域,而服務器不設置允許跨域的時候,看到有人用iframe模擬,全文:http://blog.csdn.net/lrz1011/article/details/7913992