【问题标题】:Upload photo in Laravel在 Laravel 中上传照片
【发布时间】:2019-02-17 17:27:07
【问题描述】:

Laravel 文件上传在尝试上传图片时提示用户错误

Get error: local.ERROR: Driver [] is not supported.

如何解决它的问题?

public function channelAvatar(Request $request, Channel $channel)
{
    // validate
    $this->validate($request, [
        'photo' => ['required', 'image', Rule::dimensions()->minWidth(250)->minHeight(250)->ratio(1 / 1)],
    ]);

    // fill variables
    $filename = time() . str_random(16) . '.png';
    $image = Image::make($request->file('photo')->getRealPath());
    $folder = 'channels/avatars';

    // crop it
    $image = $image->resize(250, 250);

    // optimize it
    $image->encode('png', 60);

    // upload it
    Storage::put($folder.'/'.$filename, $image->__toString());
    $imageAddress = $this->webAddress() . $folder . '/' . $filename;

    // delete the old avatar
    Storage::delete('channels/avatars/' . str_after($channel->avatar, 'channels/avatars/'));

    // update channel's avatar
    $channel->update([
        'avatar' => $imageAddress,
    ]);
    $this->putChannelInTheCache($channel);

    return $imageAddress;
}

在本地上传或上传到FTP 仍然会出现同样的错误。

【问题讨论】:

  • 这段代码中的哪一行会产生这个错误?
  • config/filesystem.php 包含什么?
  • filesystem.php 'ftp' => [ 'driver' => 'ftp', 'host' => env('FTP_HOST', 'uashared14.twinservers.net '), 'username' => env('FTP_USERNAME', 'aintoday'), 'password' => env('FTP_PASSWORD', '*******'), ],我认为这里有问题:存储: :put($folder.'/'.$filename, $image->__toString()); $imageAddress = $this->webAddress() 。 $文件夹。 '/' 。 $文件名;
  • .env 中的 FILESYSTEM_DRIVER 中有什么内容?
  • .env FTP_HOST=uashared14.twinservers.net FTP_PORT=21 FTP_USERNAME=aintoday FTP_PASSWORD=****** FTP_ROOT=/public_ftp

标签: laravel


【解决方案1】:

每当你使用没有特定磁盘的存储选项时,Laravel 都会使用默认驱动程序。您似乎已将 local 指定为默认驱动程序,但您没有配置它。

根据您的config/filesystem.php,您有:

'ftp' => [ 
    'driver' => 'ftp', 
    'host' => env('FTP_HOST', 'test.something.net'), 
    'username' => env('FTP_USERNAME', 'someusername'), 
    'password' => env('FTP_PASSWORD', '*******'), 
],

因此您需要将其指定为默认驱动程序。你可以通过添加来做到这一点:

FILESYSTEM_DRIVER=ftp.env 文件中。

然后在 'config/filesystem.php` 中添加以下内容:

'default' => env('FILESYSTEM_DRIVER', 'local'),

现在,无论您何时执行Storage::something(),它都会使用默认驱动程序。 (您将有 local 作为默认值`

如果您愿意,也可以指定它:

Storage::disk('ftp')->something() 但是如果你所有的存储操作都使用一个磁盘那么最好指定为默认值。

【讨论】:

  • 提前做php artisan config:clear 让环境更改生效
猜你喜欢
  • 2014-09-18
  • 2012-12-15
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2019-12-14
  • 2018-04-15
相关资源
最近更新 更多