我很难理解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>
正在下载文件,但出现错误“服务器故障”。我不想使用相同的链接,因为这些文件是机密文件,因此不能在应用程序外部下载。
答案 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进行构建。