我正在尝试使用 S3 的直接上传支持(http://aws.amazon.com/articles/1434)将相机媒体从触发器的文件和相机模块上传到 S3。我已经很好地使用了本机 Web,但是当我在 Trigger 中复制相同的请求时,我得到了 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 响应。
这种差异有原因吗?我在文档中没有看到为这些文件自定义 Content-Disposition 的任何方式。有没有这样的方法?我需要自己构建这个功能吗?我没有看到 S3 发生变化,那么是否有任何选项可以让它在 Trigger 的功能中工作?