有一些類似的問題,但是如何使用PHP和進度條直接將文件上傳到S3,沒有一個很好的答案。是否可以在不使用Flash的情況下添加進度條?如何使用PHP和進度條將文件直接上傳到S3
注:我指的是從客戶端瀏覽器直接上傳到S3。
有一些類似的問題,但是如何使用PHP和進度條直接將文件上傳到S3,沒有一個很好的答案。是否可以在不使用Flash的情況下添加進度條?如何使用PHP和進度條將文件直接上傳到S3
注:我指的是從客戶端瀏覽器直接上傳到S3。
從技術上講,使用PHP,你不能從客戶端 - > S3。您的解決方案,如果你想使用PHP要麼必須設計如下:
的AWS PHP SDK:http://aws.amazon.com/sdkforphp/寫的很好,幷包含有關如何從客戶端發送一個文件,一個具體的例子 - >服務器 - > S3
用方面的進度條,有很多可用選項。快速搜索stackoverflow.com的顯示相同的回答這一個問題:
我在我們的項目中做到了這一點。由於標準的cross domain安全策略,您無法使用AJAX直接上傳到S3;相反,您需要使用常規表單POST或Flash。您需要在相對複雜的過程中發送安全策略和簽名,如S3 docs中所述。
它可以直接上傳,但進度條是不可能的: http://undesigned.org.za/2007/10/22/amazon-s3-php-class/
看到example_form在下載, 從瀏覽器直接上傳到S3
儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –
我應該投票,你只是說不可能的。 –
實際上,您可以使用HTML 5上傳進度欄部分,以便...不應該永遠不要使用(儘管是在2012年你寫的時候):-) –
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中所解釋的。
願意使用jQuery和ajax? http://stackoverflow.com/questions/2714507/jquery-ajax-upload-with-progress-bar-no-flash – tradyblix
是的,我可以使用jQuery和Ajax – Amy
糾正我,如果我錯了,但爲了上傳文件直接來自客戶端,您需要給客戶端上傳訪問權限,即使只是暫時的。這對你來說是一個可接受的安全權衡? –