Как загрузить файлы в 2 папки одновременно одним способом на laravel?

Я использую Laravel 5.6

Я хочу загружать файлы в 2 папки одновременно. Так что, если изображение успешно загружено в папку продукта, я хочу, чтобы изображение также загружалось в папку с превью

Я пытаюсь так:

public function uploadImage($file)
{
if($file) {
$fileName = str_random(40) . '.' . $file->guessClientExtension();
}

$destinationPath = storage_path() . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 'product';

if(!File::exists($destinationPath)) {
File::makeDirectory($destinationPath, 0755, true);
}

$file->move($destinationPath, $fileName);

$destinationPathThumb = storage_path() . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 'product' . DIRECTORY_SEPARATOR . 'thumb';

if(!File::exists($destinationPathThumb)) {
File::makeDirectory($destinationPathThumb, 0755, true);
}

$image_resize = Image::make($file->getRealPath());
$image_resize->resize(300, 300);
$image_resize->save($destinationPathThumb . DIRECTORY_SEPARATOR . $fileName);

return $fileName;
}

Если код запускается, это просто успешно загрузить в папку продукта. Не загружал в папку thumbs

Существуют такие ошибки:

сообщение Невозможно найти файл (/ tmp / phpUSxbEJ).

Вмешательство исключения \ Изображение \ Исключение \ NotReadableException

Я пытаюсь запустить этот код:

public function uploadImage($file)
{
if($file) {
$fileName = str_random(40) . '.' . $file->guessClientExtension();
}
$destinationPathThumb = storage_path() . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 'product' . DIRECTORY_SEPARATOR . 'thumb';

if(!File::exists($destinationPathThumb)) {
File::makeDirectory($destinationPathThumb, 0755, true);
}
$image_resize = Image::make($file->getRealPath());
$image_resize->resize(300, 300);
$image_resize->save($destinationPathThumb . DIRECTORY_SEPARATOR . $fileName);
return $fileName;
}

Поэтому я удаляю код для загрузки в папку продукта. Я стараюсь, и это работает. Успешная загрузка в папку с превью

Поэтому я думаю, что в одном процессе, он загружает только в одну папку

Есть ли другой способ загрузки на 2 папки?

0

Решение

Вы сначала загружаете temporary file который будет удален, как только вы сохраните его на своем диске, поэтому вы не можете использовать его повторно, вместо того, чтобы повторно использовать его, вы извлекаете сохраненное изображение, изменяете его размер и сохраняете его под другим именем:

public function uploadImage($file)
{
...
$file->move($destinationPath, $fileName);
//$file here doesn't exist anymore, hence it can't be read
...
$uploadedFile = Storage::get($destinationPath . DIRECTORY_SEPARATOR . $filename);
$image_resize = Image::make($uploadedFile);
$image_resize->resize(300, 300);
$image_resize->save($destinationPathThumb . DIRECTORY_SEPARATOR . $fileName);

return $fileName;
}
1

Другие решения

Я нахожу решение

Я пытаюсь так:

$file = $file->move($destinationPath, $fileName);

Оно работает

0

По вопросам рекламы [email protected]