Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.5:文件下载FileNotFoundException?_Php_Laravel_Laravel 5_Download - Fatal编程技术网

Php Laravel 5.5:文件下载FileNotFoundException?

Php Laravel 5.5:文件下载FileNotFoundException?,php,laravel,laravel-5,download,Php,Laravel,Laravel 5,Download,我正在构建一个项目管理系统,用户可以将文件附件上传到任务中。这些附件存储在目录“storage/app/public/projects/”中。在正确的ID下的正确目录中,上传工作正常 然而,当我想下载所说的附件时,不知怎的,文件找不到了。我已经提供了我的up和download方法的代码,以及我的“本地”驱动程序配置 驱动程序配置: 'local' => [ 'driver' => 'local', 'root' => storage_path('app/pu

我正在构建一个项目管理系统,用户可以将文件附件上传到任务中。这些附件存储在目录“storage/app/public/projects/”中。在正确的ID下的正确目录中,上传工作正常

然而,当我想下载所说的附件时,不知怎的,文件找不到了。我已经提供了我的up和download方法的代码,以及我的“本地”驱动程序配置

驱动程序配置:

'local' => [
    'driver' => 'local',
    'root'   => storage_path('app/public'),
    'url'    => env('APP_URL').'storage'
],
上传方式:

$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()
]);
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
        );
    }
}
当前下载方式:

$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()
]);
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
        );
    }
}

这是我在发布此问题之前的最后一次尝试。我还尝试了
Storage::url('/projects/')
和其他一些方法,但都没有成功。我已经根据Laravel文档链接了一个公共存储目录(使用
php artisan storage:link
)。我可能在这里遗漏了一些逻辑内容,但我完全迷失了方向。

公共路径函数指的是
/public/
,而不是可以在
/storage/app/public/
中找到的存储磁盘“public”

解决此问题的一种方法是将
公共路径('/projects/'
替换为
存储路径('app/public/projects/'