【问题标题】:Laravel upload file outside root pathLaravel 在根路径外上传文件
【发布时间】:2023-04-09 05:07:01
【问题描述】:

我尝试了所有方法,但无法上传文件。

我希望它上传到:

/var/www/mysite.com/uploads

Laravel 位于:

/var/www/mysite.com/admin/public/

我尝试的最新方法是制作这样的文件系统:

'uploads' => [
    'driver' => 'local',
    'root' => '/var/www/mysite.com/uploads'
]

我也试过了

'uploads' => [
    'driver' => 'local',
    'root' => '../../uploads'
]

它们都没有起作用。

谁能告诉我如何将 Laravel 目录之外的文件上传到我上面指定的目录?

编辑:我收到的错误:

联赛\飞行系统\例外 无法创建根目录“/var/www/mysite.com/uploads/image.jpg”。

也试过这个:

'uploads' => [
    'driver' => 'local',
    'root' => dirname(dirname(dirname(__FILE__))).'/uploads'
]

带有控制器代码:

$path = $request->file('image')->store(
    'image.jpg', 'uploads'
);

【问题讨论】:

    标签: laravel file upload


    【解决方案1】:

    这个怎么样?它甚至应该与操作系统无关:

    'uploads' => [
        'driver' => 'local',
        'root' => __DIR__ . '/../../uploads/'
    ]
    

    【讨论】:

    • 认为 base_path() 返回 Laravel 所在的基本路径: www.mysite.com/admin/ { laraven is here } 我需要将其上传到 www.mysite.com/uploads / 所以基本上是 Laravel 根目录前面的 1 个文件夹 :)
    • 没关系,我看错了你的问题,我会更新我的答案
    • 今晚我会试一试,让你知道结果:) 我相信我已经尝试过了,但没有任何运气,但我会让你知道!感谢您的回答!
    • 告诉我!如您所知,PHP 可能不会为您创建上传文件夹,因此您可能必须手动执行此操作。 (现在我想到了,可能首先是问题,给出错误消息“无法创建根目录”)
    • 该文件夹存在 ;) 今晚我也会发布我的目录结构等,以便您直观地了解我的意思:)
    【解决方案2】:

    对我来说,问题就是这样解决的, 我创建了一个名为 uploads 的目录,比 laravel 根目录高一级。 之后在config/filesystem.php 中添加了这段代码:

    'links' => [
            public_path('storage') => storage_path('app/public'),
            public_path('storage2') =>  __DIR__ . '/../../uploads',
        ],
    

    还有,

        'disks' => [
    
            'local' => [
                'driver' => 'local',
                'root' => storage_path('app'),
            ],
    
            'public' => [
                'driver' => 'local',
                'root' => storage_path('app/public'),
                'url' => env('APP_URL').'/storage',
                'visibility' => 'public',
            ],
    
            'public2' => [
                'driver' => 'local',
                'root' => __DIR__ . '/../../uploads',
                'visibility' => 'public',
            ],
    
            's3' => [
                'driver' => 's3',
                'key' => env('AWS_ACCESS_KEY_ID'),
                'secret' => env('AWS_SECRET_ACCESS_KEY'),
                'region' => env('AWS_DEFAULT_REGION'),
                'bucket' => env('AWS_BUCKET'),
                'url' => env('AWS_URL'),
                'endpoint' => env('AWS_ENDPOINT'),
                'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
            ],
    
        ],
    

    最后在终端输入php artisan storage:link


    其实它的作用是在public目录下创建了一个名为storage2的目录,这个目录会指向在laravel根目录之外创建的uploads文件夹。

    请注意,这行代码创建了uploads 目录,之后所有图像都将存储在该位置。

    'public2' => [
                'driver' => 'local',
                'root' => __DIR__ . '/../../uploads',
                'visibility' => 'public',
            ],
    

    为了将上传的图片存储在创建的uploads 目录中,我使用了以下代码:

            if ($request->hasFile('cover')) {
    
                $filenameWithExt = $request->file('cover')->getClientOriginalName ();
                $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
                $extension = $request->file('cover')->getClientOriginalExtension();
                $fileNameToStore = $filename . '_' . uniqid() . '.' . $extension;       
    
                $path = $request->file('cover')->storeAs('/image/blog', $fileNameToStore, 'public2');
            }
    

    并用于显示此图像(在刀片文件中):

    <td><img src="{{asset('/storage2/image/blog/' . $post->cover)}}" width="50" height="50"></td>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 2013-06-05
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多