php - 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 中。
我如何制作这个并且只有上传它的人才能访问它?
解决方案
您可以为可以查看此资源的用户创建特定链接。
例如在你的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');
推荐阅读
- javascript - 为什么递归不起作用?我正在尝试显示 n 到 1 系列
- vue.js - Vue路由页面动画和转换不起作用
- json - 如何在 MariaDB 中将值转换为 JSON?
- r - 我们必须在聚合之前排序吗?
- c# - 对 DataGridView 进行排序时的静态列
- c++ - 如何将字符串分配给 const char*?
- javascript - 用户提交表单时如何在表格单元格中呈现任务
- firebase - 如何在 Flutter 中对多个子集合进行 Firestore 集合组查询?
- python - tf.GradientTape() 为我的神经网络函数返回 None 值
- javascript - 为同一表单提交多个 addEventListener