所以昨天我尝试制作一个upload file function,因为当用户制作他的产品时,他也可以上传一张图片。
但是当我在项目中进行迭代时,图片太大了,所以我决定使用干预包来调整图片大小并创建缩略图。
我制作了该功能,但部分工作。
if($file = $request->hasFile('image')) {
$file = $request->file('image');
$extension = $file->getClientOriginalName();
$username = Auth::user()->username;
$destinationPath = public_path('/uploads/products/' . $username);
$thumb = Image::make($file->getRealPath())->resize(100, 100, function ($constraint) {
$constraint->aspectRatio(); //maintain image ratio
});
$thumb->save($destinationPath.'/thumb_'.$extension);
$destinationPath = public_path('/uploads/products/' . $username);
$file->move($destinationPath, $extension);
$product['imagePath'] = '/uploads/products/'. $username . '/' . $extension;
$product['thumbnail'] = '/uploads/products/'. $username . '/thumb_' . $extension;
}
我是这样做的,不同的用户将在/uploads/products
中创建一个不同的文件。
此外,我上传原始图片和调整大小,所以我应该喜欢:
picture.jpg
和thumb_picture.jpg
。
如果未创建自定义文件(来自用户名),我收到此错误:
无法将图像数据写入路径 (C:\ XAMPP \ htdocs中\店\公共/上传/产品/书/ thumb_Jellyfish.jpg)
当我评论6,7,8行时,该功能有效,但它只上传原始图片。如果删除评论,缩略图也会起作用!
所以我想,在创建自定义文件夹之后,整个函数工作正常,但在它有可写问题之前。
有什么想法吗?一切都会受到赞赏!
答案 0 :(得分:1)
如果有人想知道如何解决这个问题或做类似的事情,我只是找到了解决方案:
if($file = $request->hasFile('image')) {
$file = $request->file('image');
$extension = $file->getClientOriginalName();
$username = Auth::user()->username;
$thumb = Image::make($file->getRealPath())->resize(100, 100, function ($constraint) {
$constraint->aspectRatio(); //maintain image ratio
});
$destinationPath = public_path('/uploads/products/' . $username);
$file->move($destinationPath, $extension);
$thumb->save($destinationPath.'/thumb_'.$extension);
$product['imagePath'] = '/uploads/products/'. $username . '/' . $extension;
$product['thumbnail'] = '/uploads/products/'. $username . '/thumb_' . $extension;
}
因此,这段代码在/uploads/products/
内创建了一个动态文件夹(我选择了经过身份验证的用户的用户名)。在该文件夹中,它会上传图片并创建一个已调整大小的图片,以供缩略图使用。此外,当它创建缩略图时,它保持原始图片的比例,因此它不会失去比例