首页 \ 问答 \ Laravel 5.5 - 上传到公用文件夹(Laravel 5.5 - Upload to public folder)

Laravel 5.5 - 上传到公用文件夹(Laravel 5.5 - Upload to public folder)

我正在尝试将文件storage/app/public/在公共文件夹storage/app/public/但出于某种原因,Laravel似乎只是把它放在私有storage/app/文件夹中。

如果我理解正确,我应该将可见性设置为“公共”,但这似乎没有改变任何内容:

Storage::put($fileName, file_get_contents($file), 'public');

当我调用getVisibility时,我会公开,所以似乎工作正常:

Storage::getVisibility($fileName); // public

这些是我的filesystems.php中的设置:

'disks' => [

    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],

    'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

    's3' => [
        'driver' => 's3',
        'key' => env('AWS_KEY'),
        'secret' => env('AWS_SECRET'),
        'region' => env('AWS_REGION'),
        'bucket' => env('AWS_BUCKET'),
    ],

],

I'm trying to store a file in the public folder storage/app/public/ but for some reason Laravel just seems to put it in the private storage/app/ folder.

If I understand correctly I'm supposed to just set the visibility to 'public' but that doesn't seem to change anything:

Storage::put($fileName, file_get_contents($file), 'public');

When I call getVisibility I get public so that seems to work fine:

Storage::getVisibility($fileName); // public

These are the settings in my filesystems.php:

'disks' => [

    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],

    'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

    's3' => [
        'driver' => 's3',
        'key' => env('AWS_KEY'),
        'secret' => env('AWS_SECRET'),
        'region' => env('AWS_REGION'),
        'bucket' => env('AWS_BUCKET'),
    ],

],

原文:https://stackoverflow.com/questions/47392720
更新时间:2021-07-17 14:07

最满意答案

当你调用Storage::put ,Laravel将使用默认的'local'磁盘。

本地磁盘以其根目录存储文件: storage_path('app') 。 可见性与文件的存储位置无关。

您需要选择将以其根目录存储文件的public磁盘: storage_path('app/public'),

要做到这一点,您需要告诉Laravel上传文件时使用哪个磁盘。 基本上改变你的代码:

Storage::disk('public')->put($fileName, file_get_contents($file), 'public');


When you call Storage::put, Laravel will use the default disk which is 'local'.

The local disk stores files at its root: storage_path('app'). The visibility has nothing with where the file should be stored.

You need to choose the public disk which will store the files at its root: storage_path('app/public'),

To do that, you need to tell Laravel which disk to use when uploading the file. Basically change your code to this:

Storage::disk('public')->put($fileName, file_get_contents($file), 'public');

相关问答

更多

Laravel 5.5 MassAssignmentException(Laravel 5.5 MassAssignmentException)

解释此错误 这是Laravel的安全功能。 它旨在保护您在使用批量分配时不受形式操纵。 例如,在注册表单中:当您在数据库中有一个is_admin列时,用户只需操作您的表单即可在服务器上将is_admin设置为true ,从而在数据库中设置为true 。 此安全功能通过使用白名单来定义安全字段来防止这种情况。 如何解决这个问题 您需要在模型上设置$fillable属性。 它的值必须是一个数组,其中包含所有可以批量分配的字段(如用户名,电子邮件地址等)。 <?php namespace App; ...

如何将Laravel中的文件直接上传到公用文件夹?(How to upload files in Laravel directly into public folder?)

您可以在config/filesystems.php创建新的存储光盘: 'public_uploads' => [ 'driver' => 'local', 'root' => public_path() . '/uploads', ], 并存储这样的文件: if(!Storage::disk('public_uploads')->put($path, $file_content)) { return false; } You can create a new st ...

在Laravel 5.5中,formatErrors不再工作吗?(Does formatErrors not working anymore in Laravel 5.5?)

在升级指南中,您可以阅读: 在Laravel 5.5中,异常处理程序将所有异常(包括验证异常)转换为HTTP响应。 另外,JSON验证错误的默认格式已更改。 新格式符合以下惯例:... 所以你应该做的是添加到app\Exceptions\Handler.php文件中的以下方法: protected function invalidJson($request, ValidationException $exception) { return response()->json([ ...

没有找到Laravel 5.5 Trait(Laravel 5.5 Trait not found)

不要用<? ,总是使用<?php 。 需要在php.ini中启用短开放标记,因为它们与其他语言冲突,所以不受广泛支持。 Don't use <?, always use <?php. Short open tags need to be enabled in php.ini and are not widely supported because they conflict with other languages.

laravel 5.5 - 通配符子域不起作用(laravel 5.5 - wildcard subdomain not working)

我认为它应该是 Route::domain('{subdomain}.example.com')->group(function () { Route::get('/', 'ProfilesController@subDomain'); }); 并在ProfilesController : public function subdomain($subdomain) { //do something } 正如所讨论的那样,路由顺序很重要,所以如果你在这个逻辑之前有一个为'/'声明的路 ...

将图片从laravel api上传到核心php项目文件夹(Upload image from laravel api to core php project folder)

更改 'http://corephp/webProject/upload/' . $year . "/" . $month 至 base_path("../../corephp/webProject/upload/$year/$month") Change 'http://corephp/webProject/upload/' . $year . "/" . $month To base_path("../../corephp/webProject/upload/$year/$month")

Laravel 5.5 - whereIn数组(Laravel 5.5 - whereIn array)

你忘了执行查询。 添加->get() : $fruits = Fruit::whereIn('fruit_id',[6,23,5,73])->get(); You forgot to execute the query. Add ->get(): $fruits = Fruit::whereIn('fruit_id',[6,23,5,73])->get();

Laravel 5.5 request() - > all()没有获得所有输入(Laravel 5.5 request()->all() doesn't get all the inputs)

Laravel 5.5更改了validate()方法以返回经过验证的字段,以便您可以轻松地将有效数据传递给模型创建,而无需使用request->only() 。 它可能无意中修改了$request->all() ,因此您无法获得预期的结果。 如果您想获得所有内容,请尝试将字段添加到验证器,即使您不想验证它们,即没有实际规则。 例如 $validData = $this->validate(request(),[ 'title'=>'required', 'body' => '' ] ...

在Cpanel虚拟主机中Laravel 5.5错误500(Laravel 5.5 Error 500 in Cpanel Shared Hosting)

第一次,你可以检查你的PHP信息 <?php phpinfo(); ?> 你可以在那里搜索“mbstring”... 如果仍未安装mbstring,您可以要求提供程序安装它。 如果已经安装并且仍然有错误500,那么你最好在phpinfo()中检查你的php版本。 并用php artisan命令清除缓存。 当你有shell的权限时,你可以尝试使用命令“php -v”检查你的php版本,并查看php的默认php。 First time, you can check your php info <?p ...

Laravel 5.5 - 上传到公用文件夹(Laravel 5.5 - Upload to public folder)

当你调用Storage::put ,Laravel将使用默认的'local'磁盘。 本地磁盘以其根目录存储文件: storage_path('app') 。 可见性与文件的存储位置无关。 您需要选择将以其根目录存储文件的public磁盘: storage_path('app/public'), 要做到这一点,您需要告诉Laravel上传文件时使用哪个磁盘。 基本上改变你的代码: Storage::disk('public')->put($fileName, file_get_contents($f ...

相关文章

更多

最新问答

更多
  • 未捕获的不变违规:addComponentAsRefTo(...):只有ReactOwner可以有refs(Uncaught Invariant Violation: addComponentAsRefTo(…): Only a ReactOwner can have refs)
  • 通过嵌入式YouTube / Flash视频避免滚轮劫持(Avoid scroll-wheel hijack by embedded youtube / flash video)
  • 如何在多用户环境中处理表单编辑?(how to handle form editing in a Multi-user environment?)
  • PHP关闭MySQL连接(PHP close MySQL connection)
  • 我要微信下载
  • Solr dataimport处理程序查询(Solr dataimport handler query)
  • GIT是什么车.
  • Powershell错误处理和空结果(Powershell Error Handling and Null results)
  • Laravel按第二级值排序第一级集合(Laravel sorting 1st level collection by 2nd level value)
  • logback.xml到logback属性文件(logback.xml to logback property file)
  • 使用fgets和strcat时出现问题(Problems when using fgets and strcat)
  • 绘制熊猫数据框两栏(plot pandas dataframe two columns from)
  • 超全球$ _GET中是否保证键值对的顺序?(Is the order of key-value pairs guaranteed in the superglobal $_GET?)
  • C# - 检查两组索引值(C# - Checking Index values of two sets)
  • 模板中的URL输出为空(URL output in template is empty)
  • 关于redhat linux 9.0的三个镜像文件
  • 为什么要在go中分配对struct的引用?(Why assign a reference to a struct in go?)
  • Datagrid点击事件(Datagrid click event)
  • window.location.href在输入press时返回undefined(window.location.href on enter press returns undefined)
  • Javascript Array.remove()作者:John Resig - 为什么要在for-in语句中枚举?(Javascript Array.remove() by John Resig - why does it enumerate in for-in statement?)
  • sudo gem安装cocoapods --pre错误(sudo gem install cocoapods --pre error)
  • 加载完成后,在所有已加载的HTML文件中执行某些操作(After Load Complete, Do Something in All Loaded HTML Files)
  • 如何为wpf datagrid行应用样式(How to have style applied for wpf datagrid row)
  • 在debian上升级内核[关闭](Upgrade kernel on debian [closed])
  • 无法使用JavaScript FileReader API上传二进制文件(Trouble uploading binary files using JavaScript FileReader API)
  • 工作简历怎样写啊?电脑方面的
  • 查找通过gmail API检索的环聊和聊天消息的时间戳(Find timestamp for hangout and chat messages retrieved with gmail api)
  • 如果在汇编程序中没有退出系统调用,会发生什么情况?(What happens if there is no exit system call in an assembly program?)
  • 无法从Intranet访问Wordpress门户(Wordpress portal not accessible from intranet)
  • PDFBox:禁用字体缓存或更改其位置(PDFBox: Disable Font Cache or change its location)