当前位置: 首页 > news >正文

Laravel实现图片上传接口以及图片压缩优化测试

1. 创建 Laravel 项目

确保你已经安装了 Laravel 和相关依赖。创建一个新的 Laravel 项目:

composer create-project --prefer-dist laravel/laravel image-upload
cd image-upload

2. 设置数据库

编辑 .env 文件以连接到你的数据库,然后运行迁移:

php artisan migrate

3. 创建控制器

使用 Artisan 命令创建一个控制器:

php artisan make:controller ImageController --resource

4. 实现上传逻辑

打开 app/Http/Controllers/ImageController.php 并添加以下方法:

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;class ImageController extends Controller
{/*** Store a newly created resource in storage.** @param  \Illuminate\Http\Request  $request* @return \Illuminate\Http\JsonResponse*/public function store(Request $request){// 验证请求数据$validator = Validator::make($request->all(), ['image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',]);if ($validator->fails()) {return response()->json($validator->errors(), 422);}// 保存图片到 storage/app/public/images 目录$path = $request->file('image')->store('public/images');// 返回响应return response()->json(['message' => 'Image uploaded successfully.','path' => Storage::url($path),]);}
}

5. 添加路由

routes/api.php 中添加路由:

use App\Http\Controllers\ImageController;Route::post('/images', [ImageController::class, 'store']);

6. 使用场景

  • 用户上传个人头像
  • 商家上传商品图片
  • 用户上传评论中的附件图片

7. 优化建议

7.1 文件存储位置
  • 云存储服务:使用 Amazon S3 或其他云存储服务来存储图片,以减轻服务器的存储压力。
  • 本地存储:如果使用本地存储,考虑使用符号链接将 storage/app/public 映射到 public/storage,这样可以直接通过 HTTP 访问这些文件。你需要在 config/filesystems.php 文件中配置 public 存储盘。
7.2 图片处理
  • 调整大小和压缩:使用 Intervention Image 或者 Laravel 的内置功能来调整图片大小、压缩等,以减少存储空间占用和带宽消耗。
  • 多尺寸生成:根据不同的展示需求生成不同尺寸的图片版本。
7.3 安全性
  • 严格验证:对上传文件类型进行严格验证,防止恶意文件上传。
  • 直接写入文件:使用 Storage::put() 方法直接从二进制流写入文件,避免客户端上传可能带来的安全风险。
7.4 性能
  • 缓存机制:在生产环境中使用缓存机制来提高访问速度。
  • CDN 加速:使用 CDN 来加速图片加载速度。
7.5 错误处理
  • 详细错误信息:增加更详细的错误处理逻辑,例如当文件上传失败时返回具体原因。

8. 配置符号链接

如果你选择使用本地存储,需要在项目根目录下执行以下命令来创建符号链接:

php artisan storage:link

9. 配置云存储

如果你选择使用云存储,比如 Amazon S3,则需要在 config/filesystems.php 中配置 s3 存储盘,并且在 ImageController 中修改存储路径和获取 URL 的方式。

10. 测试

你可以使用 Postman 或 curl 来测试你的 API。例如使用 curl:

curl -X POST http://localhost/api/images \-F "image=@/path/to/image.jpg" \-H "Content-Type: multipart/form-data"

以上就是基于 Laravel 框架实现图片上传接口的详细步骤。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 亿发详解:ERP系统选择的艺术——中小企业如何避免实施陷阱?
  • Ingress Nginx Controller
  • 哪种电容笔更好用一点?2024开学季实测五款高性价比电容笔!
  • Linux磁盘分区,增加磁盘应用实例,磁盘情况查询
  • 驱动开发系列11 - Linux Graphics 图形栈概述(二)
  • 适合开发人员的网页爬虫工具DrissionPage
  • “精准学”官宣将公布中国首个语音端到端大模型
  • 深圳表哥告诉你“上位机和SCADA的区别”
  • 微知-linux内核中PCIe驱动扫描后驱动加载为什么有两种类型的resource?分别是什么?
  • JAVA后端程序拉取私人仓库的npm包并将该程序打包成jar包
  • C++学习笔记----4、用C++进行程序设计(五)---- 非复合与继承关系
  • react中的useCallback、useMemo、useRef 和 useContext
  • TypeScript 面试题汇总
  • 多系统萎缩不慌张,这些维生素是你的“守护神”✨
  • RabbitMQ(面试篇)
  • 【css3】浏览器内核及其兼容性
  • ESLint简单操作
  • Fastjson的基本使用方法大全
  • JavaScript 基本功--面试宝典
  • Mithril.js 入门介绍
  • Odoo domain写法及运用
  • Sass 快速入门教程
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 工作手记之html2canvas使用概述
  • 如何选择开源的机器学习框架?
  • 推荐一个React的管理后台框架
  • 中文输入法与React文本输入框的问题与解决方案
  • 追踪解析 FutureTask 源码
  • 白色的风信子
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​io --- 处理流的核心工具​
  • (3) cmake编译多个cpp文件
  • (42)STM32——LCD显示屏实验笔记
  • (CPU/GPU)粒子继承贴图颜色发射
  • (day18) leetcode 204.计数质数
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (十八)Flink CEP 详解
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转)iOS字体
  • (转)Mysql的优化设置
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • **PHP分步表单提交思路(分页表单提交)
  • *1 计算机基础和操作系统基础及几大协议
  • .“空心村”成因分析及解决对策122344
  • .Net 4.0并行库实用性演练
  • .net core 依赖注入的基本用发
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 提取注释生成API文档 帮助文档
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...