Я использую 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 папки?
Вы сначала загружаете 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;
}
Я нахожу решение
Я пытаюсь так:
$file = $file->move($destinationPath, $fileName);
Оно работает