我正在将文件上传到s3
我想让它在我的控制器中使用以下代码安全下载,但它无法正常工作。
我使用的是Laravel 5.5,s3
上的文件可见性不公开。
if( Storage::disk('s3')->exists($file_path) ) {
$file = Storage::disk('s3')->get($file_path);
return response()->download($file);
}
abort(404, 'File not found.');
它给了我这个错误
is_file() expects parameter 1 to be a valid path, string given
...
/home/vagrant/spark-etr/vendor/symfony/http-foundation/File/File.php:36
#1 /home/vagrant/spark-etr/vendor/symfony/http-foundation/File/File.php(36): is_file('\\xFF\\xD8\\xFF\\xE0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00...')
#2 /home/vagrant/spark-etr/vendor/symfony/http-foundation/BinaryFileResponse.php(94): Symfony\\Component\\HttpFoundation\\File\\File->__construct('\\xFF\\xD8\\xFF\\xE0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00...')
#3 /home/vagrant/spark-etr/vendor/symfony/http-foundation/BinaryFileResponse.php(53): Symfony\\Component\\HttpFoundation\\BinaryFileResponse->setFile('\\xFF\\xD8\\xFF\\xE0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00...', 'attachment', false, true)
#4 /home/vagrant/spark-etr/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php(125): Symfony\\Component\\HttpFoundation\\BinaryFileResponse->__construct('\\xFF\\xD8\\xFF\\xE0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00...', 200, Array, true, 'attachment')
该文件位于s3
,因为我在下载前检查是否存在。
转储$file
var给我这样的二进制文件
请帮忙
答案 0 :(得分:2)
尝试
if( Storage::disk('s3')->exists($file_path) ) {
$file = Storage::disk('s3')->get($file_path);
$headers = [
'Content-Type' => 'your_content_type',
'Content-Description' => 'File Transfer',
'Content-Disposition' => "attachment; filename={$yourFileName}",
'filename'=> $yourFileName
];
return response($file, 200, $headers);
}
<强>更新强>
您可以阅读有关下载large
文件的更多信息
Why don't large files download easily in Laravel?
答案 1 :(得分:1)
自己构建回复:
$file = ''; // what you got from S3
$mimeType = 'text/plain'; // or whatever the mime type is
$fileName = 'example.txt';
$headers = [
'Content-type' => $mimeType,
'Content-Disposition' => 'attachment; filename="' . $fileName . '"',
'Content-Length' => sizeof($file),
];
return response($file, 200, $headers);
...或研究如何下载流。