在Laravel中保存和检索文件

时间:2018-11-21 06:40:19

标签: php laravel-5 laravel-filesystem

我很难理解Laravel中的文件保存和检索。我设法将文件保存到正确的路径

$fileNameWithExt = $request->file('Agreement_file')->getClientOriginalName();
$fileName = pathinfo($fileNameWithExt, PATHINFO_FILENAME);
$extention  =$request->file('Agreement_file')->getClientOriginalExtension();
$filenameToStore = $fileName . '_' . $lab_id. '.'.$extention;
$request->Agreement_file->storeAs('agreements', $filenameToStore );

但是,我不想创建一个a-tag来下载文件,但无法设法下载文件。

<a href="/storage/app/public/agreements/'. {{$filenameToStore}}" download="{{$filenameToStore}}">{{$filenameToStore}}</a>

正在下载文件,但出现错误“服务器故障”。我不想使用相同的链接,因为这些文件是机密文件,因此不能在应用程序外部下载。

1 个答案:

答案 0 :(得分:1)

类似的东西吗?

第1步:

创建表文件id | filename | user_id

第2步:

创建模型文件

第3步:

在表中添加文件行。

$fileNameWithExt = $request->file('Agreement_file')->getClientOriginalName();
$fileName = pathinfo($fileNameWithExt, PATHINFO_FILENAME);
$extention  =$request->file('Agreement_file')->getClientOriginalExtension();
$filenameToStore = $fileName . '_' . $lab_id. '.'.$extention;
$request->Agreement_file->storeAs('agreements', $filenameToStore );

File::create([
   'filename' => $filenameToStore,
   'user_id' => Auth::id()
]);

第4步:

创建控制器方法下载。

public function download(){
    $filename = $request->input('filename');

    $file = File::where('user_id', Auth::id())
        ->where('filename', $filename)
        ->firstOrFail();

    $path = Storage::path('agreements/' . $filename);

    if(Storage::exists($path)){
        return Response::download($path, $filename);
    }
}

第5步:

替换您的链接:

<a href="/path/download?filename='. {{$filenameToStore}}" download="{{$filenameToStore}}">{{$filenameToStore}}</a>

或者您可以根据文件ID进行构建。