这是我的问题: 我有一个系统,用户可以看到有关特定帖子的信息;例如,在“销售”部分中,用户可以看到有关一种产品的所有信息;在每个产品中,用户都可以下载文件,例如下载PDF;或mp3,在这种情况下,一个mp3文件: 好吧,系统保存有关用户下载文件的所有记录,保存记录后,下载文件: 我确切的问题是,文件的记录已保存在数据库中,但是,从不开始下载;我有2个关系,并且,有声读物可以有多个下载,但是,一个下载,只有一个有声读物:
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');
}
}
所有文件都在文件夹内,在proyect的公共文件夹中,文件夹的路径在DB中:
$table->string('audiobook_location')->nullable();
我收到了这个错误:
(1/1)FileNotFoundException该文件 “/home/vagrant/Code/BDC/public/uploads/audiobooks/audiobook_location/1.m P3” 不存在
1.mp3在哪里,必须是用户尝试下载的文件的名称
我只需要下载一个文件,一个帖子;如果有人可以帮助我,我将非常感激!
答案 0 :(得分:1)
你没有显示你的路线,但我猜你有一个像:
Route::get('/some/path/download/{id}', 'someController@downloadAudiobook');
我认为传递给$id
方法的downloadAudiobook
必须是有声读物的ID?
首先,这一行没有意义,因为这里的$id
与登录用户无关:
$userCheck = Auth::user()->$id;
我认为您需要登录用户的用户ID:
$userCheck = Auth::user()->id;
接下来 - 您还没有向我们展示您的有声读物模型,但我假设您必须有filename
列 - 或者您提到的audiobook_location
?因此,您可以检索audibook记录并在下载响应中使用文件名:
$audiobook = AudioBook::find($id);
$download = public_path().'/uploads/audiobooks/audiobook_location/' . $audiobook->audiobook_location;
完整代码:
public function downloadAudiobook($id)
{
if (Auth::user())
{
$userID = Auth::user()->id;
$download = AudiobookDownload::where(['user_id' => $userID, 'audiobooks_id' => $id])->first();
if (empty($download->user_id))
{
$download = new AudiobookDownload;
$download->user_id = $user_id;
$download->audiobooks_id = $id;
$download->save();
}
$audiobook = AudioBook::find($id);
$download = public_path().'/uploads/audiobooks/audiobook_location/' . $audiobook->audiobook_location;
return response()->download($download);
}
else
{
return redirect()->route('login')->with('validate', 'Por favor inicia sesión para descargar este audiolibro');
}
}