#php #database #laravel #image
#php #База данных #laravel #изображение
Вопрос:
Все мои множественные данные успешно вставлены в базу данных. Однако, если я хочу вставить то же изображение, что и то, которое было вставлено ранее, появились эти ошибки LeagueFlysystemFileExistsException File already exists at path: public/complaint/walls defect 1.jpg
. Предположительно, я хочу, чтобы один и тот же файл изображения можно было вставлять несколько раз. Могу ли я узнать, как я могу это исправить?
таблица жалоб
id
defect_id
image
description
report_by
ComplaintController.php
<?php
namespace AppHttpControllers;
use Auth;
use Validator;
use Response;
use CarbonCarbon;
use AppComplaint;
use IlluminateSupportFacadesStorage;
use IlluminateHttpRequest;
use InterventionImageImageManagerStatic 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!');
}
Ответ №1:
Это не проблема с БД, но вы пытаетесь сохранить другое изображение (из другого запроса, может быть одно и то же изображение) с тем же именем файла. Этот файл уже существует в вашем хранилище. Вам либо сначала нужно проверить, существует ли файл уже в месте хранения, и если это так, удалите его и снова переместите новый. Или то, что я обычно делаю, это добавляю случайную строку из 5 символов в конце, чтобы убедиться, что у них никогда не будет одного и того же имени файла, и я сохраняю это новое имя в БД.
$filename = Str::random(5) . '_' . $filename;
Ответ №2:
Если вы хотите сохранить существующее изображение в свой каталог.
Вот мой пример кода. Я использовал случайное имя изображения перед сохранением в базе данных.
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;
}