2012-05-08 150 views
14

是否可以從遠程服務器上傳文件到S3?如何將文件從遠程服務器直接上傳到Amazon S3?

遠程服務器基本上是一個基於URL的文件服務器。例如,使用http://example.com/1.jpg,它提供圖像。它不會執行任何其他操作,並且無法在此服務器上運行代碼。

有可能在另一臺服務器,告訴S3上傳文件從http://example.com/1.jpg

  upload from http://example.com/1.jpg 
server -------------------------------------------> S3 <-----> example.com 

回答

19

如果你不能在服務器上運行代碼或執行請求的話,不,你不能做到這一點。您必須將文件下載到您擁有的服務器或計算機上,並從那裏上傳。

您可以在http://docs.amazonwebservices.com/AmazonS3/latest/API/APIRest.html

看到你可以在Amazon S3上執行的操作檢查操作兩者的REST和SOAP API,您會看到有沒有辦法讓Amazon S3的遠程URL,並把它搶對象爲你。所有的PUT請求都要求提供對象的數據作爲請求的一部分。這意味着啓動Web請求的服務器或計算機需要有數據。

我在過去曾經有過類似的問題,我想下載我的用戶的Facebook縮略圖並上傳到S3以便在我的網站上使用。我這樣做的方式是從Facebook下載圖像到我的服務器上的內存中,然後上傳到Amazon S3 - 完整的東西花了2秒鐘。上傳到S3完成後,將存儲區/密鑰寫入數據庫。

不幸的是,沒有其他辦法可以做到。

-1

您可以使用終端的scp命令。使用終端

1),去的地方那裏是要傳送到服務器

2那個文件)輸入:

scp -i yourAmazonKeypairPath.pem fileNameThatYouWantToTransfer.php [email protected]: 

注:在您從ec2網站獲得ec2blablbla材料之前添加「ec2-user @」!這是一個挑剔的錯誤!

3)您的文件將被上傳,並顯示進度。當它是100%時,你就完成了!

+0

爲什麼有人會爲此投票?你可以解釋嗎?這適用於我! – coolcool1994

+4

因爲這篇文章專門詢問S3和S3並不是正常的ec2實例,所以它沒有運行SSH服務器。您需要使用HTTP協議來與之通話。 – mianos

+0

我想你可以啓動一個EC2實例,用它來做遠程複製(服務器 - > EC2 - > S3),然後再次銷燬EC2實例。 – Malvineous

1

我認爲提供的建議是相當不錯的,你可以將SCP文件傳給S3 Bucket。給Pem文件將是一個無密碼認證,通過PHP文件,你可以驗證擴展。 PHP文件可以傳遞文件,作爲SCP命令的參數。

該解決方案的唯一問題是,您必須在AWS中擁有您的實例。如果您的網站託管在其他託管服務提供商處,並且您嘗試將文件直接上傳到S3 Bucket,則無法使用此解決方案。

1

從技術上講這是可能的,using AWS Signature Version 4,假設你的remote server低於圖像中的客戶,你可以在主服務器準備一個表格,併發送表單字段到遠程服務器,爲它curl它。詳細示例here

Amazon S3 upload using a POST request

相關問題