开发 文件上传并调整尺寸

· 发布于 8个月前 · 283 次阅读
本帖最后由 阳 于 2018-11-06 08:21:17 编辑。

对于图片的上传,原始尺寸太大,且用户上传的图片也大小不一,所以有必要进行一下尺寸的调整。

本站开发图床功能时使用 Intervention\Image 并结合 Laravel 的文件存储 API 实现.

实现代码如下:

<?php
namespace App\Http\Controllers;

use App\Models\Image as Attach;
use App\Models\Thumbnail;
use Illuminate\Http\Request;
use Intervention\Image\Facades\Image;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\File;

final class ImageController extends Controller
{
    public function upload(Request $request)
    {
        // authorize code

        $this->validate($request, [
            'image' => 'required|dimensions:min_width=100,min_height=100|max:2048',
        ]);

        $file = $request->file('image');

        $originFilePath = $file->store('images', 'public');

        // Attach::create(['path'=>$originFilePath, ...]);

        // 生成调整后的文件路径
        $path = 'images/sized/' . $file->hashName();

        $img = Image::make($file);
        $img->fit(256);  // 以最优方案裁剪为256x256

        // 保存图片
        if (Storage::disk('public')->put($path, $img->stream()->getContents(), 'public')) {
            // Thumbnail::create(['path'=>$path, ...]);
            return response()->json([
                'data' => [
                    'url' => Storage::disk('public')->url($path),
                ]
            ]);
        }

        return response()->json([
            'status' => 'error',
            'code' => 500,
            'data' => [
                'message' => '上传失败',
            ]
        ]);
    }
}
共收到 0 条回复
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册