Laravel 下载文件
Posted
技术标签:
【中文标题】Laravel 下载文件【英文标题】:Laravel download files 【发布时间】:2018-02-02 22:44:40 【问题描述】:我希望用户能够在我的 Laravel 应用程序中下载文件。我在公共文件夹中有很多文件,每个文件都属于一个帖子。例如,当管理员创建新帖子并上传文件(例如帖子中的图片)时,用户可以下载该图片/或 pdf。
我制作了一个按钮,以便用户可以下载文件,但出现错误:
The file "/home/vagrant/Code/BDC/public/uploads/audiobooks/audiobook_location/1" does not exist
这是我的代码,带有一个下载按钮来做“魔术”:
public function downloadAudiobook($id)
try
if (Auth::user())
$audiobook = public_path('uploads/audiobooks/audiobook_location/' . $id);
return response()->download($audiobook);
else
return redirect()->route('login')->with('validate', 'Por favor inicia sesión para descargar este audiolibro');
catch(ModelNotFoundException $e)
Session::flash('flash_message', "Ha ocurrido un error procesando su solicitud, intente mas tarde.");
return redirect()->back();
我知道,我在文件所在的路径中传递了 ID,因为,我不知道该怎么做。
这是我的路线:
Route::get('audiobooks/download/id',['as' => 'audiobooks.download','uses' => 'AudiobookController@downloadAudiobook']);
【问题讨论】:
也许你忘了附加文件扩展名?我想你的路径应该类似于public_path('uploads/audiobooks/audiobook_location/' . $id. '.pdf')
我同意@AndriyLozynskiy,尝试附加文件扩展名。
是的,我愿意,但是,真正的问题是 Laravel 给了我一个“文件”,它是文件的路径:“public/uploads/audiobooks/audiobook_location/1”直到 /audiobook_location/很好,但是,“/1”在哪里需要有文件名才能下载,所以,路径必须是:“public/uploads/audiobooks/audiobook_location/*文件名.mp3”你呢?懂我吗?
你在哪个表存储你的文件名如“test.mp3”?
表格为“有声读物”,该表格中保存了所有以有声读物为主题的帖子的信息文件
【参考方案1】:
你应该试试这个可能是你理解我的回答及其对你的帮助:
public function downloadAudiobook($id)
try
if (Auth::user())
//Your table where you store your filename and get your file like
$resltFile = DB::table('yourTableName')->where('id',$id)->first();
$audiobook = public_path().'/uploads/audiobooks/audiobook_location/' . $resltFile->fileName;
return response()->download($audiobook);
else
return redirect()->route('login')->with('validate', 'Por favor inicia sesión para descargar este audiolibro');
catch(ModelNotFoundException $e)
Session::flash('flash_message', "Ha ocurrido un error procesando su solicitud, intente mas tarde.");
return redirect()->back();
【讨论】:
好吧,我改变了Somethings,我得到了下一个,首先,改变路线,所以,这是下载按钮: route('audiobooks.download', $audiobooks->audiobook_location ) 其中,audiobook_location 是保存路径的数据库字段: /uploads/audiobooks/audiobook_location/ 并且,为此更改控制器: $audiobook = public_path('public/uploads/audiobooks/audiobook_location/' . $ id.'.mp3');但是,我收到了这个错误:(1/1) NotFoundHttpException;并且,当我单击按钮下载时,重定向到带有路径和文件名的路由,但不下载 @CONFABDC 请将您的 mp3 文件名的静态文件名放在我的回答中,而不是$resltFile->fileName
并检查工作与否
我把下一个 -> $audiobook = public_path().'/uploads/audiobooks/audiobook_location/' 。 $resltFile->La noche boca arriba Cortazar Julio.mp3;其中 La noche boca arriba.mp3 是保存在公共路径中的文件的名称,我得到了这个: (1/1) FatalThrowableError Parse error: syntax error, unexpected 'noche' (T_STRING);我认为这是因为文件名称之间有空格;我改为 $audiobook = public_path().'/uploads/audiobooks/audiobook_location/' 。 $audiobook -> La noche boca arriba Cortazar Julio.mp3;和是一样的;我真的不知道该怎么办
@CONFABDC 请将La noche boca arriba Cortazar Julio.mp3
重命名为La_noche_boca_arriba_Cortazar_Julio.mp3
并检查
我做了,得到了这个:(1/1) ErrorException Undefined variable: resltFile 明明这个变量不存在,怎么改?以上是关于Laravel 下载文件的主要内容,如果未能解决你的问题,请参考以下文章