首页 > 解决方案 > Laravel 在本地磁盘中查看图片

问题描述

我正在为学校项目制作一个 Dropbox 克隆,我制作了一个上传功能,可以上传到本地磁盘,因此每个人都无法访问它。

上传功能

public function updatedUpload($upload){
$object = $this->currentTeam->objects()->make(['parent_id' => $this->object->id]);
$object->objectable()->associate(
    $this->currentTeam->files()->create([
        'name' => $upload->getClientOriginalName(),
        'size' => $upload->getSize(),
        'path' => $upload->storePublicly('files', ['disk' => 'local'])
    ])
);

$object->save();
$this->object = $this->object->fresh();

}

但我想把它放在 home.blade 中。

我如何制作这个并且只有上传它的人才能访问它?

标签: phplaravel

解决方案


您可以为可以查看此资源的用户创建特定链接。

例如在你的routes/web.php

Route::get('/private_resource',[\App\Http\Controllers\PrivateResource::class, 'getLocalResource'])
->name('get_private_resource')->middleware('auth');

定义PrivateResource控制器

class PrivateResource
{
    public function getLocalResource($filename){
        // Get your resource, for example
        $file = File::where('name', $filename)->first();

        // Check whether user can access this resource
        // For example
        if(\Auth::id() != $file->user_id) abort(403);

        return \Storage::disk('local')->download($filename);
    }
}

额外:如果您想要额外的隐私,您可以使用以下功能使用签名路由。

\URL::signedRoute('get_private_resource');

并将signed中间件添加到您的路线

Route::get('/private_resource',[\App\Http\Controllers\PrivateResource::class, 'getLocalResource'])
->name('get_private_resource')->middleware('auth','signed');

推荐阅读