form上傳檔案以及跨域非同步上傳

2021-09-08 11:07:57 字數 920 閱讀 8219

要設定了enctype屬性才能上傳,需要使用上傳的jar包,這裡使用的是cos-26dec2008.jar,

跨域上傳檔案總會報錯,即使伺服器端設定了header(

'access-control-allow-origin: *'),仍會報錯說缺少multipart屬性,發現用form提交就沒問題。原因是,

html5上傳的時候就是用的cors規範,即:在傳送真正的上傳請求之前會先傳送一條options請求給伺服器,這時候需要伺服器響應允許跨域上傳的http頭,然後中斷輸出。瀏覽器接到允許跨域上傳的http頭後會再次發起真正的上傳檔案請求(post)。詳細分析參考

因此,上傳檔案需要應答的,第一次options請求需要返回允許跨域的資訊,而我通常第一次就當做檔案接收了,所以接收不到。

做法:對請求進行攔截,如果是options請求直接返回

response.setheader("access-control-allow-origin", "*");

response.setheader("access-control-allow-methods", "post, put, options");

如果是別的請求則通過。

1 string method =request.getmethod();

2if ("options".equals(method))

5 nexthandler.handle(target, request, response, ishandled);

關於跨域的知識,參考

對於form提交跨域,而伺服器不設定允許跨域的時候,看到有人用iframe模擬,全文:

form上傳檔案以及跨域非同步上傳

要設定了enctype屬性才能上傳,需要使用上傳的jar包,這裡使用的是cos 26dec2008.jar,而且後台獲取值的時候,getfile要放在第一位 一次設定好上傳格式後沒有上傳檔案,也就沒有getfile,結果總是取不到值,刪掉enctype multipart form data 屬性就...

非同步跨域提交form表單

為題描述 產品需求是分兩步上傳檔案和提交頁面使用者輸入的資料 第一步,利用form上傳檔案和一部分資料,第二步,上傳檔案成功得到後端伺服器返回的檔案id,再一次連同檔案id和頁面其他資訊一同提交後台 也就是先上傳乙個檔案,然後再利用檔案id繫結到具體的 使用者 上 首先form應該這樣寫 再建立乙個...

ajax非同步跨域上傳檔案,並顯示上傳進度

一般ajax跨域請求 解決方法1 getresponse setheader access control allow origin 允許跨域訪問 解決方法2 ajax response.getwriter write callback callback為ajax自動傳來的 如 jquery1800...