https://blog.13log.cn/ https://blog.13log.cn/
首页
  • 首页
  • 登录
搜索历史 清空
写文章

登录

账号密码登录
扫码登录
扫码登录
请使用手机扫码登录
注册登录即表示同意用户协议和隐私政策
前端
Vue React uniapp 小程序 electron
后端
Node php Go Python
技术教程
源码搭建 代码片段 AI编程
网站公告
休闲灌水
推荐 最新
实现 50MB 超大图片上传
十三 2026-7-29 php

实现 50MB 超大图片上传

如何在 ThinkPHP 8 中安全实现 50MB 超大图片 上传在现代 Web 开发中,处理 50MB 级别的超大图片(如高清设计原图、医疗医学影像等)是一项常见的需求。由于默认环境下服务器和框架都有严格的文件大小限制,直接上传会导致失败。本文将介绍如何在 ThinkPHP 8 (TP8) 中安全、稳定地实现 50MB 图片的上传。 一、 突破基础环境限制 大文件上传的第一步是调整服务器和 PHP 的基础配置,否则请求在到达 ThinkPHP 之前就会被拦截。 修改 php.ini 配置 upload_max_filesize = 50M post_max_size = 55M memory_limit = 256M max_execution_time = 300 提示:post_max_size 必须大于 upload_max_filesize,并适当调大超时时间 二、 ThinkPHP 8 后端代码实现 在 TP8 中,建议使用内置的验证器(Validate)来对图片的大小和后缀进行严格校验,确保系统安全。 <?php namespace app\controller; use app\BaseController; use think\exception\ValidateException; use think\facade\Filesystem; class UploadController extends BaseController { public function uploadImage() { // 1. 获取上传的文件 $file = $this->request->file('image'); if (!$file) { return json(); } try { // 2. 严格验证:限制 50MB 仅允许常见图片格式 validate([ 'image' => [ 'fileSize' => 55 * 1024 * 1024, 'fileExt' => 'jpg,jpeg,png,gif,webp', 'fileMime' => 'image/jpeg,image/png,image/gif,image/webp' ] ])->check(); // 3. 保存文件到本地存储(storage/topic 目录) $saveName = Filesystem::disk('public')->putFile('images', $file); return json([ 'code' => 200, 'msg' => '上传成功', 'url' => '/storage/' . $saveName ]); } catch (ValidateException $e) { // 验证失败异常捕获 return json(); } catch (\Exception $e) { // 系统错误异常捕获 return json(); } } } 三、 生产环境的优化建议 在实际生产环境中,单次上传 50MB 的物理文件会极大消耗服务器带宽与内存,建议采取以下优化手段 前端分片上传:利用 JavaScript (如 WebUploader 或 Plupload) 将 50MB 图片切分成 2MB 的小块并发上传,后端接收后再进行合并,配合 TP8 路由可以实现断点续传。 直传云存储:通过后端生成签名,让前端直接将 50MB 图片上传至阿里云 OSS、腾讯云 COS 或七牛云,完全不占用 Web 服务器的带宽。

59 0 0

最新评论

链接

搜索

搜索历史 清空
关于 友链 rss

备案号: 鄂ICP备2026023438号-1