如何使用laravel为所有类型的文件构建相同的浏览器响应



目标:当客户端请求从服务器查看文件时,我希望客户端的浏览器询问该怎么做(打开或下载文件)。我该如何构建它?

到目前为止,我有这样的方法:

public static function getFileContent($fullpath){
   //yes, i can get both file and its extension
   $file = File::get($fullpath);
   $mimeType = File::extension($fullpath);
   $response = Response::make($file, 200, array('content-type'=>$mimeType));
   return $response;
}

另一种方法调用上述

$path = $instance->the_file_path_on_the_database;
return MyClass::getFileContent($path);

这种情况下,如果上传的文件是PDF、png、jpeg等,浏览器会自动打开该文件,这是可以的。

但当涉及到*.xlsx或*.docx时,浏览器会问我该怎么办,但文件名与我存储在数据库中的文件名不同,而且没有扩展名。此外,文件会自动重命名为管线的名称。

提前谢谢。

根据文档

下载方法可用于生成响应,该响应强制用户的浏览器在给定路径下载文件。下载方法接受文件名作为该方法的第二个参数将确定下载文件最后,您可以传递一个HTTP头数组作为第三个方法的自变量:

return response()->download($pathToFile);

return response()->download($pathToFile, $name, $headers);

最新更新