Laravel 5.5:文​​件下载FileNotFoundException?

Jer*_*oen 2 php download laravel laravel-5

我正在构建一个项目管理系统,用户可以将文件附件上传到任务中.这些附件存储在"storage/app/public/projects //"目录中.在正确的目录下的正确目录中,上传工作就像它应该的那样.

但是,当我想下载所述附件时,无论如何都找不到该文件.我提供了我的上传和下载方法的代码,以及我的"本地"驱动程序配置.

驱动配置:

'local' => [
    'driver' => 'local',
    'root'   => storage_path('app/public'),
    'url'    => env('APP_URL').'storage'
],
Run Code Online (Sandbox Code Playgroud)

上传方式:

$sExt = $request->file('attachment')->getClientOriginalExtension();

$sHashedName = substr(
    sha1(str_replace(' ', '', pathinfo($request->file('attachment')->getClientOriginalName(), PATHINFO_FILENAME))
), 0, 14);

if ( ! Storage::disk('local')->exists($sHashedName . '.' . $sExt)) {
    $request->file('attachment')->storeAs(
        '/projects/'.$oTask->project->id, $sHashedName . '.' . $sExt, 'local'
    );
}

$oTask->attachments()->create([
    'name'      => $request->name,
    'location'  => $sHashedName . '.' . $sExt,
    'user_id'   => Auth::id()
]);
Run Code Online (Sandbox Code Playgroud)

目前的下载方式:

public function downloadAttachment(Project $project, Task $task, Attachment $attachment)
{
    var_dump(rtrim(env('APP_URL'), '/') . public_path('/projects/' . $project->id . '/' . $attachment->location));

    if (rtrim(env('APP_URL'), '/') . public_path('/projects/' . $project->id . '/' . $attachment->location)) {
        return response()->download(rtrim(env('APP_URL'), '/') . public_path('/projects/' . $project->id . '/' . $attachment->location));
    } else {
        return $this->redirectWithAlert(
            'error',
            'download',
            'attachment',
            $attachment->name,
            '/projects/'.$project->id.'/tasks/'.$task->id
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在发布此问题之前的最后一次尝试.我也试过Storage::url('/projects/<project_id>/<filename>')了很多其他的东西,但都没有用.我根据Laravel文档(带php artisan storage:link)链接了一个公共存储目录.我可能在这里错过了一些合乎逻辑的东西,但我完全迷失了.

Que*_*ler 6

public_path函数是指./public/,而不是可以在其中找到的存储磁盘"public"./storage/app/public/

解决的方法之一是,以取代public_path('/projects/'storage_path('app/public/projects/'