2017-01-05 78 views
0

我有一個存儲桶中的對象,我偶爾需要將其轉移到Amazon S3中的第二個存儲桶。我使用帶Flysystem的Laravel 5.3來管理這些桶。如何使用flysystem將文件從一個存儲桶傳輸到另一個存儲桶?

一個解決方案是將圖像下載到我的服務器,然後將其上傳到另一個存儲桶,但這似乎是浪費時間/帶寬,因爲該文件存在於S3中,並且正在S3中移動。這可以在Flysystem中完成,還是需要直接使用Amazon的API?

+0

你可以寫上已被轉移,並在工作中的文件工作,使用'$內容=庫存::得到( 'file.jpg');'獲取文件並創建單獨的新Flysystem實例,並連接到新服務器並寫入所讀取的內容。 –

+0

@CerlinBoss不會在那個時候下載和上傳嗎?這就是我想要避免的。我的目標是將文件從存儲桶 - >存儲桶,而不是存儲桶 - >我的服務器 - 存儲桶。 – Citizen

+0

我不認爲這是你可以從你的laravel服務器做的事情。 U可能需要利用亞馬遜的API(如果他們提供的話)。 –

回答

-1

可以使用FilesystemAdapter移動功能來移動文件:

$disk = Storage::disk('s3'); 
if (!$disk->move('bucketOne/testFile.jpg', 'bucketTwo/testFile.jpg')) { 
    throw new \Exception('File could not be moved.'); 
} 
+0

謝謝。我試圖找到說明它不會傳遞我的服務器的文檔,並且會直接從桶到桶,但我在Flysystem API文檔中沒有看到該方法。我不確定我會如何去測試,以確保這是事實。 – Citizen

+1

FilesystemAdapter正在使用flysystem-aws-s3-v3庫。移動函數調用兩個函數:複製和刪除(首先複製對象,然後刪除舊的)。 Copy使用由AWS編寫的php S3Client的copyObject。我不知道他們在做什麼,但我認爲它是一個API調用S3,它不會下載文件並再次上傳。 –

+0

這隻允許在一個桶中移動文件,但不能在它們之間移動 – Poma

相關問題