我正在尝试使用 S3 的直接上传支持 ( http://aws.amazon.com/articles/1434 ) 将相机媒体从 Trigger 的文件和相机模块上传到 S3。我已经在 native 网络上正常工作了,但是当我在触发器中复制相同的请求时,我收到了 S3 的“MaxPostPreDataLengthExceeded”异常。
我查看了原始请求,看起来一个细微的差异导致了触发器失败。
这是来自 Webkit 的原始 POST 数据:
------WebKitFormBoundaryCl5fCuacIKQjcEfA
Content-Disposition: form-data; name="key"
uploads/2013-08-29/upload.jpeg
------WebKitFormBoundaryCl5fCuacIKQjcEfA
Content-Disposition: form-data; name="AWSAccessKeyId"
...
------WebKitFormBoundaryCl5fCuacIKQjcEfA
Content-Disposition: form-data; name="success_action_status"
201
------WebKitFormBoundaryCl5fCuacIKQjcEfA
Content-Disposition: form-data; name="file"; filename="file.jpg"
Content-Type: image/jpeg
????JFIF??XExifMM?i&??...
这是来自 forge.request.ajax({data: ..., files: [(file object)]})
:
--2268A38A1BB344B5BBEE83586818388A
Content-Disposition: form-data; name="key"
uploads/2013-08-30/upload.jpeg
--2268A38A1BB344B5BBEE83586818388A
Content-Disposition: form-data; name="AWSAccessKeyId"
...
--2268A38A1BB344B5BBEE83586818388A
Content-Disposition: form-data; name="success_action_status"
201
--2268A38A1BB344B5BBEE83586818388A
Content-Disposition: file; name="file"; filename="file.jpg"
Content-Type: image/jpg
????JFIF??XExifMM?i&??...
(唯一的)区别是,在使用 FormData 字段的 webkit 中,文件具有 form-data
内容配置。在触发器中,文件具有 file
内容配置。这导致 S3 将文件二进制内容注册为表单的一部分;因此会出现 MaxPostPreDataLengthExceeded
异常和 400 Bad Request 响应。
造成这种差异有原因吗?我在文档中没有看到任何自定义这些文件的内容处置的方法。有这样的办法吗?我需要自己构建这个功能吗?我没有看到 S3 发生变化,那么是否有任何选项可以让它在触发器的功能中工作?
最佳答案
看来这只是触发器上传代码中的一个错误,我刚刚发布了请求模块的更新版本(版本 2.2)来修复此问题。
感谢您对您的问题进行如此详细的描述。
关于amazon-s3 - 通过 forge.request.ajax 直接上传 Amazon S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18541652/