上传图片并创建其缩略图Laravel 5.2

时间:2017-01-18 07:16:46

标签: php laravel file-upload laravel-5 image-uploading

所以昨天我尝试制作一个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.jpgthumb_picture.jpg

如果未创建自定义文件(来自用户名),我收到此错误:

  

无法将图像数据写入路径   (C:\ XAMPP \ htdocs中\店\公共/上传/产品/书/ thumb_Jellyfish.jpg)

当我评论6,7,8行时,该功能有效,但它只上传原始图片。如果删除评论,缩略图也会起作用!

所以我想,在创建自定义文件夹之后,整个函数工作正常,但在它有可写问题之前。

有什么想法吗?一切都会受到赞赏!

1 个答案:

答案 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/内创建了一个动态文件夹(我选择了经过身份验证的用户的用户名)。在该文件夹中,它会上传图片并创建一个已调整大小的图片,以供缩略图使用。此外,当它创建缩略图时,它保持原始图片的比例,因此它不会失去比例