簡體   English   中英

AWS php putObject從$ _FILE []分段上傳到S3

[英]AWS php putObject to S3 from form $_FILE[] multipart upload

我正在從多部分表單中將多達4張圖片上傳到apache服務器。 我目前正在遷移到Amazon S3進行存儲,我想知道最好的選擇。

1)我的php腳本當前首先將圖像作為臨時文件上傳到Ec2服務器,例如,名為phpwG3oTb。 然后,我通常將move_uploaded_file重命名並將其移動到正確的目錄。 通過使用適用於S3的AWS PHP SDK,我可以避免這種情況的發生,而直接使用putObject將其上傳為:

$result = $this -> s3Client -> putObject(array('Bucket' => $this -> bucket, 'Key' => 'file_1', 'SourceFile' => 'phpwG3oTb', 'ACL' => 'public-read);

但是,S3存儲桶上的文件現在稱為phpwG3oTb,其密鑰為file_1。 為此文件提供的網址是https://url.amazonaws.com/site-dev/folder_1/phpwG3oTb

當我單擊此圖像時,該圖像已下載且未顯示在瀏覽器中,因為我猜它沒有mime_type。 如果我上傳與image.jpg相同的圖像,則效果很好。

為了避免這種情況,我需要將本地上傳的文件重命名為image.jpg,然后使用putObject。 我想避免這一步。

2)接下來的一個也許不是獲取文件$ _FILE []並將其上傳到Ec2服務器,然后調用putObject。 也許我可以直接從數組內存中獲取文件,然后以某種方式將其寫入putObject。 我不知道怎么可能。 我在想類似的偽代碼:

$result = $this -> s3Client -> putObject(array('Bucket' => $this -> bucket, 'Key' => 'file_1', 'SourceFile' => $_FILE["<ref_file>"], 'ACL' => 'public-read);

您可以執行您在第一個步驟中所做的事情。 沒有擴展名,它將無法正確檢測內容類型。

如果知道文件的內容類型是什么樣,則可以使用'ContentType' => 'image/jpeg'作為putObject參數的一部分手動進行設置。

暫無
暫無

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

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