2017-01-05 4 views
0

私は時にはAmazon S3の2番目のバケットに転送する必要があるオブジェクトを1つのバケットに持っています。私はこれらのバケツを管理するためにFlysystemでLaravel 5.3を使用しています。flysystemを使用して、あるバケットから別のバケットにファイルを転送するにはどうすればよいですか?

解決方法1つの解決策は、サーバーにイメージをダウンロードしてから別のバケットにアップロードすることですが、S3にファイルが存在し、S3内で移動しているため時間/帯域幅が浪費されるようです。 Flysystemでこれを行うことはできますか、またはAmazonのAPIを直接使用する必要がありますか?

+0

を '$内容を使用=ストレージは::(取得します'file.jpg'); 'ファイルを取得し、新しいサーバへの接続を持つ別々の新しいFlysystemインスタンスを作成し、読み込まれた内容を書き込みます。 –

+0

@CerlinBossは私がその時点でダウンロードしてアップロードすることはできませんか?それは私が避けようとしていることです。私の目標はファイルをbucket - > bucket - > my server - > bucketから転送することです。 – Citizen

+0

あなたはあなたのlaravelサーバーから何かできることはありません。 Uは、Amazon 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ライブラリを使用しています。 move関数は、コピーと削除の2つの関数を呼び出します(最初にオブジェクトをコピーしてから古いものを削除します)。コピーは、AWSが作成したPHP S3ClientによってcopyObjectを使用します。私は彼らが内部的に何をしているのかわからないが、私はそのAPIを呼び出すと思います.S3は、ファイルをダウンロードせずにアップロードし直します。 –

+0

これはバケット内のファイルのみを移動することができますが、バケット内では移動できません – Poma

関連する問題