我托管我网站的服务器不支持links
,因此我无法运行php artisan storage:link
将我的存储目录链接到公共目录。我试图在 filesystems.php 中重新制作磁盘配置以直接引用public
文件夹,但它似乎也没有用。有没有办法将Laravel库直接上传到公共文件夹中,或者我必须使用php方法?提前谢谢。
答案 0 :(得分:25)
您可以在config/filesystems.php
中创建新的存储光盘:
'public_uploads' => [
'driver' => 'local',
'root' => public_path() . '/uploads',
],
并存储这样的文件:
if(!Storage::disk('public_uploads')->put($path, $file_content)) {
return false;
}
答案 1 :(得分:2)
我想出了解决此问题的方法,请在config/filesystem.php
中添加'default' => 'public',
这行,以解决此问题。
答案 2 :(得分:1)
您可以将磁盘传递给\Illuminate\Http\UploadedFile
类的方法:
$file = request()->file('uploadFile');
$file->store('toPath', ['disk' => 'public']);
或者您可以创建新的Filesystem磁盘并将其保存到该磁盘。
您可以在config/filesystems.php
中创建一个新的存储磁盘:
'my_files' => [
'driver' => 'local',
'root' => public_path() . '/myfiles',
],
在控制器中:
$file = request()->file('uploadFile');
$file->store('toPath', ['disk' => 'my_files']);
答案 3 :(得分:1)
最灵活的方法是编辑 .env 文件:
FILESYSTEM_DRIVER=public
答案 4 :(得分:0)
你应该尝试这种跳跃你添加了方法=" post" ENCTYPE ="多部分/格式数据"到你的形式。请注意,公共路径(.uploadedimages)将被移动到项目目录中的公用文件夹以及上载图像所在的位置。
public function store (Request $request) {
imageName = time().'.'.$request->image->getClientOriginalExtension();
$request->image->move(public_path('/uploadedimages'), $imageName);
// then you can save $imageName to the database
}
答案 5 :(得分:0)
除了那里的每个答案,我建议添加另一个保护层,因为它是一个公共文件夹。
对于您的公用文件夹中需要保护的每个文件,请执行一条路径以验证对它们的访问权限,例如
/files/images/cat.jpg
和类似/files/images/{image_name}
的路由,以便您可以针对给定文件验证用户。
正确验证后,您就可以了
return response($full_server_filepath, 200)->header('Content-Type', 'image/jpeg');
它使工作变得更难,但更安全
答案 6 :(得分:0)
在config / filesystem.php文件中,添加以下内容:
'public_uploads' => [
'driver' => 'local',
'root' => public_path(),
],
并在控制器中
$file = $request->file("contract");
$ext = $file->extension();
$filename = $file->storeAs('/contracts/', $contract->title.'.' . $ext,['disk' => 'public_uploads']);
答案 7 :(得分:0)
推荐的方法是从公共目录对存储进行符号链接。
<块引用>要使这些文件可从网络访问,您应该创建一个 从 public/storage 到 storage/app/public 的符号链接。利用 此文件夹约定将使您的可公开访问的文件合二为一 使用零时可以在部署之间轻松共享的目录 像 Envoyer 这样的停机部署系统。
要创建符号链接,您可以使用 storage:link Artisan 命令: