0
如何指定FineUploader在上传到Amazon S3时创建的服务器名称的格式或模式?我需要更好地控制S3上如何创建文件名和路径。谢谢。带S3的FineUploader如何在S3上指定对象名称
如何指定FineUploader在上传到Amazon S3时创建的服务器名称的格式或模式?我需要更好地控制S3上如何创建文件名和路径。谢谢。带S3的FineUploader如何在S3上指定对象名称
使用objectProperties.key
选项。
您可以提供一个String
值或一个函数,该函数将预期密钥返回为String
。
以下示例演示如何设置密钥并执行阻止操作($.post
)。它使用jQuery插件,
// <snip>
objectProperties: {
key: function(fileId) {
var keyRetrieval = new qq.Promise(),
filename = $("#fineUploader").fineUploader("getName", fileId);
$.post("createKey.html", {name: filename})
.done(function(data) { keyRetrieval.success(data.key); })
.fail(function() { keyRetrieval.failure(); });
return keyRetrieval;
}
},
// </snip>
一个简单的例子,
objectProperties: {
key: function(fileId) {
var filename = $("#fineUploader").fineUploader("getName", fileId);
return fileId + "/" + filename;
}
},
记住,如果你想防止用户覆盖对方的文件,你应该让这些键独特!使用随机密钥将每个上传文件放在一个文件夹中将会阻止这一点。
上面的例子会改变客户端脚本中的密钥是否正确?我会担心有人能够破解并发送他们想要的任何密钥给签名代码。有没有办法让服务器上的PHP指定密钥,并让操作的其余部分使用服务器指定的密钥? – sthede
不,没有办法做到这一点。如果您担心这种情况,您可以轻松检查策略文档中的密钥名称或签名服务器上的请求标头,并在出现腥意时拒绝它们。 –
那么我可以在上面显示的代码中至少执行一个AJAX请求到服务器?返回服务器指定的密钥,然后当它提交回来时,检查确认它是服务器指定的密钥。至少在这种情况下,客户端机器没有选择对象名称的机制,缺少包含文件名的后缀。会有那样的工作,还是有一个问题,我没有看到? – sthede