Do not speak Portuguese? Translate this site with Google or Bing Translator
Download S3 file links in Laravel

Posted on: September 21, 2021 05:53 PM

Posted by: Renato

Categories: Laravel s3 aws

Views: 963

Download S3 file links in Laravel

Estou criando API em ReactJs como frontend e Laravel como backend, onde estou enviando arquivos na minha seção de administração para meu aws-s3 enquanto envio os arquivos que estou armazenando o link desse arquivo no banco de dados. Cada ação é mantida por chamadas api, agora eu quero dar a opção desses downloads para meus usuários finais.

Estou querendo que retorne downlod_url.

Então por causa desta duvida achei umas dicas que vou compartilhar com vocês devs.

Este código abaixo funcionou perfeitamente para baixar do S3 no Laravel 8:

// $filePath should look like this: some-directory/filename.zip
return redirect(Storage::disk('s3')->temporaryUrl(
                    $filePath,
                    now()->addHour(),
                    ['ResponseContentDisposition' => 'attachment']
                ));

Credits to: https://sutherlandboswell.com/force-file-download-from-aws-s3-in-laravel/

Outro exemplo:

se Illuminate\Support\Facades\Response as Download;

public function download_config(Config $config)
    {
        $headers = [
            'Content-Type'        => 'Content-Type: application/zip',
            'Content-Disposition' => 'attachment; filename="'. $config->name .'"',
        ];

        return Download::make(Storage::disk('s3')->get($config->path), Response::HTTP_OK, $headers);
    }

Forçar download de arquivo do AWS S3 no Laravel

O S3 da Amazon é uma ótima solução para armazenar arquivos, e o Laravel torna-o fácil de usar. Ocasionalmente, você precisará forçar o download dos arquivos em vez de apenas mostrá-los no navegador, mas felizmente isso também é fácil! Em vez de desperdiçar os recursos do servidor para transmitir o arquivo do S3 para o usuário, usaremos URLs assinados .

Os URLs assinados podem dar a um usuário acesso temporário a um arquivo específico em seu depósito privado, portanto, só precisamos redirecionar para lá e dizer ao S3 para definir um cabeçalho extra. Em seu controlador responsável pelo download de arquivos, você só precisará retornar uma resposta como abaixo:

return redirect(Storage::disk('s3')->temporaryUrl(  
    $file->path,
    now()->hour(),
    ['ResponseContentDisposition' => 'attachment']
));

Neste exemplo $file->pathestá o caminho do meu arquivo no meu intervalo S3 e now()->addHour()está criando um carimbo de data / hora Carbon uma hora no futuro, quando nosso URL assinado irá expirar. A parte importante é a ['ResponseContentDisposition' => 'attachment']opção que informa ao S3 que nosso usuário deseja baixar o arquivo em vez de exibi-lo no navegador.

 

https://stackoverflow.com/questions/52955643/download-s3-file-links-in-laravel

https://laravel.com/docs/8.x/filesystem#temporary-urls

Credits to: https://sutherlandboswell.com/force-file-download-from-aws-s3-in-laravel/ (Sutherland Boswell)


3

Share
About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (12) Variados (109) PHP (108) Laravel (116) Black Hat (3) front-end (25) linux (86) postgresql (35) Docker (14) rest (4) soap (1) webservice (6) October (1) CMS (2) node (7) backend (10) ubuntu (41) devops (22) nodejs (5) npm (2) nvm (1) git (4) firefox (1) react (6) reactnative (5) collections (1) javascript (5) reactjs (7) yarn (0) adb (1) solid (0) blade (2) models (1) controllers (0) log (0) html (2) hardware (2) aws (14) Transcribe (2) transcription (1) google (3) ibm (1) nuance (1) PHP Swoole (4) mysql (22) macox (2) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (2) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (13) faceapp (1) eloquent (11) query (2) sql (35) ddd (3) nginx (6) apache (4) certbot (1) lets-encrypt (2) debian (9) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (1) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (2) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (1) binaural (1) mysqli (3) database (33) windows (2) vala (1) json (2) oracle (1) mariadb (2) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (1) piada (1) cron (2) dba (13) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (3) bash (2) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (0) biologia (1) programming (20) performance (2) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (1) microg (1) iode (1) ssh (1) zsh (1) terminal (1) dracula (1) spaceship (1) mac (1) idiomas (1) laptop (1) developer (27) api (1) data (1) matematica (1) seguranca (2) 100DaysOfCode (6) hotfix (1) documentation (1) laravel (2) RabbitMQ (1) Elasticsearch (1) redis (1) Raspberry (3) Padrao de design (4) JQuery (1) angularjs (2) Dicas (12) kubenetes (1) vscode (1) backup (1) angular (1) servers (2) pipelines (1) AppSec (1) DevSecOps (2) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (1) security (1) translate (1) kube (1) iot (1) politica (1) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (2) traefik (1) networking (1) host (1) POO (1) microservices (1) bug (1) cqrs (1) arquitetura (1) Architecture (1)

New Articles



Get Latest Updates by Email