簡體   English   中英

強制從 s3 url 下載文件

[英]force download file from s3 url

我在 URL 中有一個沒有文件擴展名的 s3 URL。 有什么辦法可以直接從 URL 強制下載文件

https://s3-external-1.amazonaws.com/media.twiliocdn.com/AC451bab3cca7e01e20ee6bf1e746bed1f/10b62b6d5fe2f69be39840ce1201a2e7

在數據庫中,我存儲此 URL 以顯示圖像或任何文件,但現在我需要單擊下載按鈕在用戶系統中下載此圖像

僅供參考:這不是我們的 s3 存儲桶,但這是存儲我們的媒體的 Twilio 服務存儲桶。

從 controller 中,您可以返回下載響應,讓您指定具有自定義名稱的文件。 像這樣...

    return response()
        ->download(
            $file,
            'download.jpeg',
        );

您可以將圖像臨時存儲在文件系統中,然后將其作為下載響應發送。

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::get(
    'https://s3-external-1.amazonaws.com/media.twiliocdn.com/AC451bab3cca7e01e20ee6bf1e746bed1f/10b62b6d5fe2f69be39840ce1201a2e7'
);

file_put_contents($file = '/tmp/' . Str::uuid(), $response->body());

preg_match('/filename=\"(.+)\"/', $response->header('content-disposition'), $matches);

return response()->download($file, $matches[1], [
    'Content-Type' => $response->header('content-type'),
])->deleteFileAfterSend();

最后,在投入了這么多小時后,我找到了解決方案。

public function download($media){

$name = now()->format('m-d-Y-h:i:s') . '.' . Illuminate\Http\Testing\MimeType::search($media->content_type);

return response()->streamDownload(function () use ($media){
    echo file_get_contents($media->url);
}, $name);

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM