我需要为我的网站创建私有文件系统。每个用户都应该能够看到自己的文件。为此,我创建了一个如下的类GetFile
<?php
namespace App\Http\Tasks;
class GetFile
{
private static $localFilePath = "attached_files";
public static function getFile($filename)
{
return response()->download(storage_path(self::$localFilePath ."/".$filename, null, [], null));
}
}
然后我按照以下步骤创建了一个GetFileController
控制器
namespace App\Http\Controllers;
use App\Http\Tasks\GetFile;
class GetFileController extends Controller
{
public function get_file($file_name)
{
return GetFile::getFile($file_name);
}
}
然后是一条路线
Route::group(['middleware' => ['web','auth'], 'namespace' => 'App\Http\Controllers'], function () {
Route::get('get_file/{file_name}', 'GetFileController@get_file')->name('file.get_file');
});
现在
route('file.get_file', $filename)
是指向$filename
的链接。当有人尝试查看文件时,我可以使用控制器的get_file
函数中的某些逻辑来控制访问。
问题是当我通过这种方法下载文件(图像)时,Windows操作系统显示文件已损坏或太长,无法打开文件。我真的很困惑,我已经以这种方式创建了私有文件系统,并且一切都正确,但是这次有些事情变得很棘手。我检查了服务器上的文件,它们没有问题,所以我认为下载功能中应该有问题。
谢谢
答案 0 :(得分:2)
答案 1 :(得分:1)
可能是空格破坏了header()函数。
尝试一下:
public static function getFile($filename)
{
ob_end_clean();
$headers = array(
'Content-Type: image/png',
);
return response()->download(storage_path(self::$localFilePath ."/".$filename, $headers));
}