form上傳文件以及跨域異步上傳


要設置了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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM