2017-01-05 77 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

相关问题