2011-07-01 67 views
1

有一些類似的問題,但是如何使用PHP和進度條直接將文件上傳到S3,沒有一個很好的答案。是否可以在不使用Flash的情況下添加進度條?如何使用PHP和進度條將文件直接上傳到S3

注:我指的是從客戶端瀏覽器直接上傳到S3。

+0

願意使用jQuery和ajax? http://stackoverflow.com/questions/2714507/jquery-ajax-upload-with-progress-bar-no-flash – tradyblix

+0

是的,我可以使用jQuery和Ajax – Amy

+1

糾正我,如果我錯了,但爲了上傳文件直接來自客戶端,您需要給客戶端上傳訪問權限,即使只是暫時的。這對你來說是一個可接受的安全權衡? –

回答

0

從技術上講,使用PHP,你不能從客戶端 - > S3。您的解決方案,如果你想使用PHP要麼必須設計如下:

  • 客戶端 - > Web服務器(PHP) - >亞馬遜S3
  • 客戶端與PHP服務器的嵌入式 - >亞馬遜S3

的AWS PHP SDK:http://aws.amazon.com/sdkforphp/寫的很好,幷包含有關如何從客戶端發送一個文件,一個具體的例子 - >服務器 - > S3

用方面的進度條,有很多可用選項。快速搜索stackoverflow.com的顯示相同的回答這一個問題:

+4

要直接發佈到s3,您需要簽署表單。簽署表單應該在服務器端完成,所以你不會泄露你的憑證。所以這個答案的開頭是不正確的。你可以,並且應該使用PHP從客戶端發佈到S3。 – trex005

+1

你誤解了答案。 – sdolgy

2

我在我們的項目中做到了這一點。由於標準的cross domain安全策略,您無法使用AJAX直接上傳到S3;相反,您需要使用常規表單POST或Flash。您需要在相對複雜的過程中發送安全策略和簽名,如S3 docs中所述。

-1

它可以直接上傳,但進度條是不可能的: http://undesigned.org.za/2007/10/22/amazon-s3-php-class/

看到example_form在下載, 從瀏覽器直接上傳到S3

+4

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+3

我應該投票,你只是說不可能的。 –

+0

實際上,您可以使用HTML 5上傳進度欄部分,以便...不應該永遠不要使用(儘管是在2012年你寫的時候):-) –

0

YES,就可以做到這一點在PHP SDK v3中。

$client = new S3Client(/* config */); 

$result = $client->putObject([ 
    'Bucket'  => 'bucket-name', 
    'Key'  => 'bucket-name/file.ext', 
    'SourceFile' => 'local-file.ext', 
    'ContentType' => 'application/pdf', 
    '@http' => [ 
     'progress' => function ($downloadTotalSize, $downloadSizeSoFar, $uploadTotalSize, $uploadSizeSoFar) { 
      // handle your progress bar percentage 
      printf(
       "%s of %s downloaded, %s of %s uploaded.\n", 
       $downloadSizeSoFar, 
       $downloadTotalSize, 
       $uploadSizeSoFar, 
       $uploadTotalSize 
      ); 
     } 
    ] 
]); 

這在AWS文檔 - S3 Config section中有解釋。它通過暴露GuzzleHttp的progress屬性可調用來工作,如this SO answer中所解釋的。