2013-10-12 70 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