0

我有一個離子/角度js web應用程序,它通過base64編碼將文件上傳到django rest框架。然後,該文件將通過django-storage(1.5.1)庫的幫助保存到AWS S3存儲桶中。AWS S3 Base64文件上傳不能在iPad或Android上運行,但在筆記本電腦上運行Safari或Chrome

在Chrome(Windows)或Safari(Macbook)上訪問webapp並上傳圖片和文件效果很好。

訪問在Chrome(Android手機)或Safari(新iPad)的Web應用程序,失敗,一個錯誤信息:

XMLHttpRequest cannot load [api url]. Origin [webapp url] is not allowed by Access-Control-Allow-Orign. 

顯然,這是一個問題CORS,對不對?但是我可以上傳表單輸入數據......這是文件上傳(JSON Restful PUT中的base64內容),這似乎是拋出錯誤的區別。

爲了完整起見,我的AWS S3 CORS配置爲:

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
<CORSRule> 
    <AllowedOrigin>*</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <AllowedMethod>PUT</AllowedMethod> 
    <AllowedMethod>POST</AllowedMethod> 
    <MaxAgeSeconds>3000</MaxAgeSeconds> 
    <AllowedHeader>Authorization</AllowedHeader> 
</CORSRule> 

任何想法或可能是問題的一個方向輕推?

回答

0

已解決!

問題在於文件上傳大小--Nginx限制了以1MB進入的HTTP請求的大小。

正在使用Base64編碼上傳文件 HTTP PUT請求中,HTTP調用變得太大。

從計算機/筆記本電腦上傳測試文件時,它們很小。

當用手機或平板電腦拍照以測試上傳時,很容易出現大文件,因此出現問題。

登錄到服務器並用增加的「client_max_body_size」更新nginx.config解決了我的問題。這裏

完整說明:https://www.cyberciti.biz/faq/linux-unix-bsd-nginx-413-request-entity-too-large/

+0

多了一個理由,以避免base64編碼圖像 – e4c5

+0

@ e4c5感謝您的評論。我對你的觀點感興趣。爲什麼不推薦base64編碼? – aero

+0

額外的計算來編碼解碼。無法緩存。文件大小增加30% – e4c5

相關問題