【问题标题】:Can not delete a file stored in storage无法删除存储在存储中的文件
【发布时间】:2020-11-26 19:17:24
【问题描述】:

卡在删除我保存到存储目录中的文件。我的 confs 如下图所示。

配置/文件系统

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

这就是我保存图像的方式。

if ($request->hasFile('image'))
    {
        $image = $request->file('image');
        Storage::disk('public')->put("/uploads/".$image->hashName(),  File::get($image));
        $input['image'] = 'uploads/' . $image->hashName();
    }

我正在使用 Laravel 7,并且图像已成功上传,谁能建议我删除存储在其中的文件的最佳方法。

【问题讨论】:

标签: laravel file-upload laravel-7


【解决方案1】:

如果您希望 Laravel 自动管理将给定文件流式传输到您的存储位置,您可以使用 putFileputFileAs 方法。此方法接受 Illuminate\Http\FileIlluminate\Http\UploadedFile 实例,并将自动将文件流式传输到您想要的位置:

use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage;

// Automatically generate a unique ID for file name...
Storage::putFile('photos', new File('/path/to/photo'));

// Manually specify a file name...
Storage::putFileAs('photos', new File('/path/to/photo'), 'photo.jpg');

关于putFile 方法有一些重要的事情需要注意。请注意,我们只指定了目录名,而不是文件名。默认情况下,putFile 方法会生成一个唯一的 ID 作为文件名。所以在你的情况下,你不需要使用$image->hasName()

putFile() 还返回保存文件的路径。所以...

$path = Storage::putFile('photos', new File('/path/to/photo'));
//To delete it
Storage::delete($path);

【讨论】:

    【解决方案2】:

    您可以使用以下方式存储图像:

    if(request('image'))
    {
         $table_column_name = request('image')->hashName();
         request('image')->store('public/uploads/');
    }
    

    您可以使用以下命令删除图像:

    $data = MODAL_NAME::findOrFail($id);
    Storage::delete('public/uploads/'.$data->image);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-24
      • 2023-01-18
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      相关资源
      最近更新 更多