Laravel Download from S3 To Local

15,863

Late answer but important for others,

 $s3_file = Storage::disk('s3')->get(request()->file);
 $s3 = Storage::disk('public');
 $s3->put("./file_name.tif", $s3_file);

The response of $s3_file will be a stream, you can save that stream data to file using Laravel put file method, you will find this stream file in storage/public directory.

Share:
15,863
ackerchez
Author by

ackerchez

Updated on June 17, 2022

Comments

  • ackerchez
    ackerchez about 2 years

    I am trying to download a file that I stored on S3 to my local Laravel installation to manipulate it. Would appreciate some help.

    I have the config data set up correctly because I am able to upload it without any trouble. I am saving it in S3 with following pattern "user->id / media->id.mp3" --> note the fact that I am not just dumping files on S3, I am saving them in directories.

    After successfully uploading the file to S3 I update the save path in my DB to show "user->id / media->id.mp3", not some long public url (is that wrong)?

    When I later go back to try and download the file I am getting a FileNotFoundException at S3. I'm doing this.

    $audio = Storage::disk('s3')->get($media->location);
    

    The weird thing is that in the exception it shows the resource that it cannot fetch but when I place that same url in a browser it displays the file without any trouble at all. Why can't the file system get the file?

    I have tried to do a "has" check before the "get" and the has check comes up false.

    Do I need to save the full public URL in the database for this to work? I tried that and it didn't help. I feel like I am missing something very simple and it is making me crazy!!

  • Yevgeniy Afanasyev
    Yevgeniy Afanasyev about 2 years
    Good point that gives a solid advise to developers. Thank you
  • Shahrukh Anwar
    Shahrukh Anwar about 2 years
    @Yevgeniy, Thanks for the appreciation