我有下面的路由,将从给定的URL加载文件,我需要这个实际下载文件(mp4, jpg, pdf),而不是在浏览器中打开内置查看器。
// Download from CDN Route
Route::get('cdn/{url}', function($url)
{
return Redirect::away($url);
})->where('url', '(.*)');
所有文件都存储在外部,所以显然Resource::download()
实际上不会工作。
我所有可用的是亚马逊网址:https://mybucket.s3.amazonaws.com/folder/filename.pdf
关于如何强制浏览器从S3下载文件有什么建议吗?
pari answer download empty file.
$s3Client = AWS::createClient('s3');
$stream = $s3Client->getObject(
[
'Bucket' => 'bucket name',
'Key' => 'filename',
'SaveAs' => '/tmp'.filename
]);
return response($stream['Body'], 200)->withHeaders([
'Content-Type' => $stream['ContentType'],
'Content-Length' => $stream['ContentLength'],
'Content-Disposition' => 'attachment; filename="' .{filename with extention} . '"'
]);
试试这段代码。
使用flysystem
更新作曲器 $path = 'https://mybucket.s3.amazonaws.com/folder/filename.pdf';
if(Storage::disk('s3')->has($path)){
$data = Storage::disk('s3')->get($path);
$getMimeType = Storage::disk('s3')->getMimetype($path);
$newFileName = 'filename.pdf';
$headers = [
'Content-type' => $getMimeType,
'Content-Disposition'=>sprintf('attachment; filename="%s"', $newFileName)
];
return Response::make($data, 200, $headers);
}
如何从其他服务器下载带有外部链接的视频?它不是s3。这是一个普通的服务器,文件在那里,但它不能工作。我写了这段代码
$filename = $video->video_id;
$tempFile = tempnam(sys_get_temp_dir(), $filename);
// dd($tempFile);
copy($video->path, $tempFile);
header("Content-Disposition: attachment; filename = ".$filename);
header("X-Accel-Redirect: ".$filename);
return response()->download($tempFile, $filename);
在我的例子中,简单的锚链接是下载文件…
<a href="https://mybucket.s3.amazonaws.com/folder/filename.pdf"> file name </a>