0

我所有的多个数据都已成功插入数据库。但是,如果我想插入与之前插入的图像相同的图像,就会出现这些错误League\Flysystem\FileExistsException File already exists at path: public/complaint/walls defect 1.jpg。假设我希望可以多次插入同一个图像文件。我可以知道我该如何解决这个问题吗?

投诉表

id
defect_id
image
description
report_by

投诉控制器.php

<?php

namespace App\Http\Controllers;

use Auth;
use Validator;
use Response;
use Carbon\Carbon;
use App\Complaint;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;
use Intervention\Image\ImageManagerStatic as Image;

class ComplaintController extends Controller
{
    public function index()
    {
        return view('buyers.complaint');
    }

    public function create(Request $request)
    {
        if (count($request->defect_id) > 0) {
            foreach($request->defect_id as $item=>$v) {
                if (isset($request->image[$item])) {
                    $images = $request->file('image');
                    $image_resize = Image::make($images[$item]->getRealPath());
                    $image_resize->resize(900, 630);
                    $filename = $images[$item]->getClientOriginalName();

                    Storage::put($filename, $image_resize);
                    Storage::move($filename, 'public/complaint/' . $filename);                  
                }
                $data = array(
                    'defect_id' => $request->defect_id[$item],
                    'image' => $filename,
                    'description' => $request->description[$item],
                    'report_by' => auth()->user()->typable->buyer_id,
                    'created_at' => Carbon::now()->toDateTimeString(),
                    'updated_at' => Carbon::now()->toDateTimeString()
                );

                Complaint::insert($data);
            }
        }
        return redirect('/report-form')->with('success','Your report is submitted!');
    }

4

2 回答 2

0

这不是数据库的问题,但是您正在尝试使用相同的文件名存储不同的图像(来自不同的请求,可能是相同的图像)。此文件已存在于您的存储位置。您首先必须检查该文件是否已存在于存储位置中,如果存在,请将其删除并再次移动新文件。或者我通常做的是在末尾添加一个随机的 5 个字符串,以确保它们永远不会有相同的文件名,然后我将这个新名称保存到数据库中。

$filename = \Str::random(5) . '_' . $filename;
于 2020-10-05T14:48:59.900 回答
0

如果要将现有图像保存到目录中。

这是我的示例代码。在保存到数据库之前,我习惯于随机图像名称。

 trait UploadFileTrait
{
    /**
     * Upload file
     *
     * @param null $folder
     * @param null $disk
     * @param null $filename
     *
     * @return string
     */
    public function uploadFile($folder = null, $disk = null, $filename = null)
    {
        $image = Image::make($filename);
        $extension = $filename->extension();
        $file = Str::random(40) . '.' . $extension;
        Storage::put($folder . $file, $image->orientate()->encode($extension), 'public');
        $image->resize(350, 350, function ($constraint) {
            $constraint->aspectRatio();
            $constraint->upsize();
        })->save();

        return $file;
    }
于 2020-10-05T14:46:16.503 回答