【发布时间】:2018-02-04 10:45:38
【问题描述】:
这是我的问题: 我有一个系统,用户可以在其中查看有关特定帖子的信息;例如,在“销售”部分,用户可以看到有关一种产品的所有信息;并且在每个产品中,用户都可以下载文件,例如下载 PDF;或 mp3,在这种情况下,是一个 mp3 文件: 好了,系统保存了用户下载文件的所有记录,保存记录后,下载文件: 我的确切问题是,下载的文件记录保存在数据库中,但是,从不开始下载;我有 2 个关系,有声读物可以有多个下载,但是,下载,只有 1 个有声读物:
public function downloads() //One download for one audiobook
{
return $this->hasMany('\bdc\AudiobookDownload');
}
public function audiobooks() //Multiples download for one audiobook
{
return $this->belongsTo('\bdc\AudioBook');
}
这是我的代码,下载开始的地方:
public function downloadAudiobook($id)
{
if (Auth::user())
{
$userCheck = Auth::user()->$id;
$download = AudiobookDownload::where(['user_id' => $userCheck, 'audiobooks_id' => $id])->first();
if (empty($download->user_id))
{
$user_id = Auth::user()->id;
$audiobooks_id = $id;
$download = new AudiobookDownload;
$download->user_id = $user_id;
$download->audiobooks_id = $audiobooks_id;
$download->save();
}
$download = public_path().'/uploads/audiobooks/audiobook_location/' . $download->audiobooks_id .'.mp3';
return response()->download($download);
}
else
{
return redirect()->route('login')->with('validate', 'Por favor inicia sesión para descargar este audiolibro');
}
}
所有文件都在一个文件夹里面,在项目的public文件夹里面,文件夹的路径在DB里面:
$table->string('audiobook_location')->nullable();
我得到了这个错误:
(1/1) FileNotFoundException 文件 “/home/vagrant/Code/BDC/public/uploads/audiobooks/audiobook_location/1.mp3” 不存在
1.mp3 在哪里,必须是用户尝试下载的文件的名称
我只需要下载一篇文章的一个文件;如果有人可以帮助我,我将非常感激!
【问题讨论】:
-
all the files that are saved in Database- 它们保存在哪里,在什么模型中?你的模型之间有什么关系?你有一个audiobooks_id,记录中的文件名不是那个ID吗? -
有 2 个不同的变量
$download和$downloads,也将public_path().'/uploads/audiobooks/audiobook_location/test.mp3'更改为public_path().'/uploads/audiobooks/audiobook_location/'. $download->audiobooks_id .'.mp3'并将$audiobook而非$downloads传递给download方法 -
嗯,保存在公共路径中的文件,公共路径的路径在数据库中,当管理员上传新帖子时,将上传这些文件:关系是为了显示所有记录在用户的个人资料中,没关系,现在,我将变量更改并尝试,让我看看
-
@Don'tPanic audiobooks_id 引用了有声读物表上的Id,在这种情况下,关系是Model Audiobook.php中的hasMany downloads和AudiobookDonwload.php中的BelongsTo有声读物: public function downloads() { return $this->hasMany('\bdc\AudiobookDownload'); } 公共函数有声读物() { 返回 $this->belongsTo('\bdc\AudioBook');我有这个,原因,下载后我需要显示每个用户的下载,而且,这一切都是正确的而且,这些文件都在公共文件夹中,在哪里划分的项目的所有文件
-
但是,我得到了下一个错误,我将代码更改为下载,现在,我有了这个: $download = public_path().'/uploads/audiobooks/audiobook_location/' 。 $download->audiobooks_id .'.mp3';返回响应()->下载($下载);以及点击按钮后的结果;假设开始下载的结果是:文件“/home/vagrant/Code/BDC/public/uploads/audiobooks/audiobook_location/1.mp3”不存在我需要更改1.mp3,用于Moby_dick.mp3或文件夹内的任何其他文件