Мне нужно иметь возможность изменить размер изображения и поместить измененную версию обратно в $request
, кто-нибудь знает, возможно ли это?
В основном я унаследовал некоторый код, который содержит потенциально более 100+ отдельный файлзагружать разделы, и теперь моя задача изменить размеры всех изображений на сайте, если они превышают определенный размер.
Так что теперь мне нужно перехватить ВСЕ загрузки изображений в приложении, определить, превышают ли они набор.размер и, если они есть, измените их размер.
Весь код, который я нашел в Интернете, показывает только, как изменить размер изображения, а затем сразу сохранить измененную версию, но мне нужно иметь возможность изменить размер изображения и поместить егоНАЗАД в $request
для обработки контроллером.
Изображения поступают в виде массивов изображений из отдельных разделов, поэтому мне нужно иметь возможность зациклить весь запрос, проверьте, есть ли какие-либо извходные данные содержат / являются файлами, а затем проверяют их размеры.Если они превышают установленный размер, измените их размер и замените их в $request
, чтобы при продолжении запроса контроллер мог обработать изображение как обычно, но он будет обрабатывать новую версию с измененным размером.
Я попытался изменить размеры изображений и затем использовать метод laravels $request->merge()
, но я не могу заставить его работать.
В настоящее время я изменяю размеры всех изображений в промежуточном программном обеспечении, как это
public function handle($request, Closure $next)
{
foreach($request->files as $fileKey => $file){
//Create a new array to add the newly sized images in
$newFileArray = [];
//Get each of the files that are being uploaded in the request, if there are no files this will just be ignored.
foreach ($file as $key => $f) {
if(!is_null($f)){
$image = Image::make($f);
if($image->height() > 500 || $image->width() > 500){
$image->resize(500, null, function ($constraint) {
$constraint->aspectRatio();
});
}
$newFileArray[$key] = $image;
} else {
$newFileArray[$key] = null;
}
}
$request->merge([
$fileKey => $newFileArray
]);
};
return $next($request);
}
Я просто не могу заставить его работать!
Возможно ли это?
РЕДАКТИРОВАТЬ
После отличного предложения в комментариях одного изответы ниже, я добился этого, отредактировав файл временного изображения напрямую, чтобы мне не пришлось возиться с запросом, вот как я это сделал.
public function handle($request, Closure $next)
{
foreach($request->files as $fileKey => $file){
//Get each of the files that are being uploaded in the request, if there are no files this will just be ignored.
foreach ($file as $key => $f) {
if(!is_null($f)){
$image = Image::make($f->getPathName());
if($image->height() > 500 || $image->width() > 500){
$image->resize(500, null, function ($constraint) {
$constraint->aspectRatio();
});
$image->save($f->getPathName());
}
}
}
};
return $next($request);
}