AWS S3 Base64 文件上传在 iPad 或 Android 中不工作,但在笔记本电脑 Safari 或 Chrome 中工作

AWS S3 Base64 File Upload Not Working From iPad or Android, but Is Working From a Laptop Safari or Chrome

我有一个 ionic/angular js 网络应用程序,它通过 base64 编码将文件上传到 django rest 框架。然后在 django-storages(1.5.1) 库的帮助下将文件保存到 AWS S3 存储桶中。

在 Chrome (Windows) 或 Safari (Macbook) 上访问网络应用程序并上传图像和文件效果很好。

在 Chrome (Android Phone) 或 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>

在可能是问题的方向上有任何想法或建议吗?

已解决!

问题出在文件上传大小上 - Nginx 将传入的 HTTP 请求的大小限制为 1 MB。

由于文件是使用 Base64 编码上传的 HTTP PUT 请求中,HTTP 调用变得太大。

从 computer/laptop 上传测试文件时,它们很容易变小。

用 phone 或平板电脑拍照测试上传时,很容易成为一个大文件,因此出现问题。

登录到服务器并使用增加的 "client_max_body_size" 更新 nginx.config 解决了我的问题。

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