3

我正在尝试使用 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 的功能中工作?

4

1 回答 1

3

看起来这只是触发器上传代码中的一个错误,我刚刚发布了请求模块的更新版本(版本 2.2),它修复了这个问题。

感谢您如此详细地描述您的问题。

于 2013-09-04T14:45:03.397 回答