2013-10-12 43 views

回答

2

使用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; 
     } 
    }, 

记住,如果你想防止用户覆盖对方的文件,你应该让这些键独特!使用随机密钥将每个上传文件放在一个文件夹中将会阻止这一点。

+0

上面的例子会改变客户端脚本中的密钥是否正确?我会担心有人能够破解并发送他们想要的任何密钥给签名代码。有没有办法让服务器上的PHP指定密钥,并让操作的其余部分使用服务器指定的密钥? – sthede

+0

不,没有办法做到这一点。如果您担心这种情况,您可以轻松检查策略文档中的密钥名称或签名服务器上的请求标头,并在出现腥意时拒绝它们。 –

+0

那么我可以在上面显示的代码中至少执行一个AJAX请求到服务器?返回服务器指定的密钥,然后当它提交回来时,检查确认它是服务器指定的密钥。至少在这种情况下,客户端机器没有选择对象名称的机制,缺少包含文件名的后缀。会有那样的工作,还是有一个问题,我没有看到? – sthede