Laravel从数据库

时间:2017-08-26 16:16:42

标签: php laravel file

这是我的问题: 我有一个系统,用户可以看到有关特定帖子的信息;例如,在“销售”部分中,用户可以看到有关一种产品的所有信息;在每个产品中,用户都可以下载文件,例如下载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 .'.m‌​p3';
            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在哪里,必须是用户尝试下载的文件的名称

我只需要下载一个文件,一个帖子;如果有人可以帮助我,我将非常感激!

1 个答案:

答案 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');
        }
}