【发布时间】:2016-03-26 16:27:57
【问题描述】:
我使用带有 jQuery-file-upload 的签名 POST url 将图像直接上传到 AWS S3。
它在我的 PC 上运行良好,但是当我使用 iPhone 进行测试时,我发现 iOS 会上传任何具有相同名称的图片,例如 image.png 或 image.jpeg。
使最后一次上传完成的图片替换之前上传成功的任何图片。
我在 Python3 中使用 boto3 生成预签名帖子,如下所示:
post = s3.generate_presigned_post(
Bucket='?????????',
Key=get_random_string(8,'simple') + '/${filename}',
Fields={
'success_action_status': '201',
'acl': 'public-read'
},
Conditions=[{
'success_action_status': '201'
},
{
'acl': 'public-read'
},
["starts-with", "$Content-Type", ""]
]
)
post['fields'] = json.dumps(post['fields'])
这是我的 javascript 代码:
$(function () {
'use strict';
var form = $('#fileupload');
// Initialize the jQuery File Upload widget:
$('#fileupload').fileupload({
dropZone: $('#dropzone'),
previewMaxHeight: 300,
previewMaxWidth: 300,
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
dataType: 'XML',
getFilesFromResponse: function (data) {
var key = $(data.jqXHR.responseXML).find("Key").text();
var url = $(data.jqXHR.responseXML).find("Location").text();
return [{
url: url,
name: key,
thumbnailUrl: url,
}];
},
}).on('fileuploadsubmit', function (e, data) {
data.formData = (function (form) {
var r = form.serializeArray();
$.each(form.data('theform-data'), function(k, v) {
r.push({name: k , value: v})
});
return r;
})(data.form);
data.formData.push({name: "Content-Type" , value: data.files[0].type});
});
});
Python 中的get_random_string(8,'simple') 只是可以防止不同上传时文件名相同,但不能防止用户同时上传多个文件时文件名相同(因为他们使用相同的预签名 POST url 上传)。
所以我想知道在使用预签名的 POST url 将文件上传到 AWS S3 时,是否有任何方法可以设置随机文件名?
【问题讨论】:
标签: javascript python file amazon-s3 jquery-file-upload