簡體   English   中英

如何使用 PHP 和進度條將文件直接上傳到 S3

[英]How to upload files directly to S3 using PHP and with progress bar

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

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

我已經在我們的項目中做到了這一點。 由於標准的跨域安全策略,您不能使用 AJAX 直接上傳到 S3; 相反,您需要使用常規形式的 POST 或 Flash。 您需要在一個相對復雜的過程中發送安全策略和簽名,如S3 文檔中所述。

的,可以在 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 docs- S3 配置部分進行了解釋。 它通過公開 GuzzleHttp 的progress屬性可調用來工作,如this SO answer中所述。

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

  • 客戶端 -> Web 服務器 (PHP) -> Amazon S3
  • 嵌入了 PHP 服務器的客戶端 -> Amazon S3

AWS PHP SDK: http://aws.amazon.com/sdkforphp/寫得很好,包含一個來自客戶端文件的具體示例 --> S3 服務器

關於進度條,有很多選項可用。 快速搜索 stackoverflow.com 顯示了一個與此問題相同的問題:

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

參見下載中的 example_form,直接從瀏覽器上傳到 S3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM