展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Laravel怎样处理大文件分块上传_Laravel处理大文件分块上传方法【存储】

Laravel怎样处理大文件分块上传_Laravel处理大文件分块上传方法【存储】

Laravel大文件分块上传通过前端File.slice()分片并携带SHA-256标识,服务端直接读取HTTPbody流加锁写入临时目录,合并时调用cat命令流式拼接,Redis记录已传分片支持断点续传,上传后自动清理临时文件并配置Nginx客户端最大请求体大小。

本文目录
    Lara vel大文件分块上传需从前端分片、服务端原子写入、流式合并、Redis断点续传及自动化清理五方面实现:前端用File.slice()切片并携带SHA-256标识与序号;服务端直读HTTP body流并加锁写入临时目录;合并时调用cat命令流式拼接;Redis记录已传分片支持续传;上传后自动清理临时文件并配置Nginx client_max_body_size。

    Lara vel怎样处理大文件分块上传_Lara vel处理大文件分块上传方法【存储】

    在Lara vel中上传大文件(比如视频、备份包),如果直接硬上,很可能遭遇超时、内存溢出或者413错误。核心原因在于PHP和Web服务器对单次请求体积有限制,只要没启用分块机制,文件越大越容易翻车。下面这套方案,从存储层出发,围绕安全、高效、可扩展三个目标,把分块上传的完整实现拆开来讲。

    一、前端分片与元数据携带

    这一步是地基。只有让服务端准确识别每个分片属于哪个文件、排在第几块,后续才能有序重组,同时为断点续传铺路。关键是把文件哈希当作唯一标识,而不是依赖文件名或时间戳——两个同名文件不会互相覆盖。

    具体做法:前端用File.slice()按固定大小(比如5MB)把原始文件切成有序数组。接着计算整个文件的SHA-256哈希值,作为fileIdentifier。每个分片请求要带上四个必须字段:identifier(哈希值)、chunkNumber(从0开始递增)、totalChunks(总片数)、filename(原始文件名,用于最终落盘)。发送时用fetch传二进制流,Content-Type设为application/octet-stream,别用FormData——multipart解析额外消耗性能。

    二、服务端接收分片并原子写入临时存储

    这是最容易踩坑的一环。千万别用Lara vel默认的$request->file(),它会触发PHP完整解析multipart数据,大文件直接内存溢出。正确的做法是直接读取原始HTTP body流,完全绕过PHP的内存加载。

    定义路由POST /api/upload/chunk,在控制器里先校验identifier、chunkNumber、totalChunks是否合法。接着调用$request->getContent()获取原始二进制流——注意,这里不能用$request->file('file')。然后构造临时存储路径:storage_path("app/chunks/{$identifier}/{$chunkNumber}"),用mkdir(..., 0755, true)确保父目录存在。写入时加独占锁:file_put_contents($filePath, $content, LOCK_EX),防止并发写入同一个分片把数据搞乱。

    三、基于文件系统命令的流式合并(低内存占用)

    文件分片全传完后,合并操作要交给操作系统内核完成,PHP只负责发命令,不参与内存加载。否则遇到GB级文件,Storage::put()分分钟卡死进程。

    客户端发起POST /api/upload/merge?identifier=xxx请求后,先检查Redis里uploaded_chunks:{$identifier}的计数值是否等于totalChunks。然后遍历storage/app/chunks/{$identifier}/目录下所有分片文件,按chunkNumber升序排序,确认每个文件大小大于0。接着拼接一条shell命令:

    cat storage/app/chunks/{$identifier}/* > storage/app/uploads/{$finalName}

    通过exec()或Lara vel的Process组件执行。执行前务必确认web用户(比如www-data)对chunks/和uploads/目录有读写权限,而且磁盘剩余空间要大于目标文件大小。

    四、基于Redis状态管理的断点续传支持

    大文件上传最怕中途中断得从头再来。用Redis记录每个分片的上传状态,客户端可以随时查询哪些分片已成功,直接跳过重传。

    每个分片写入成功后,马上执行Redis::sAdd("uploaded_chunks:{$identifier}", $chunkNumber)。提供一个GET /api/upload/chunks/{identifier}接口,返回已经上传的分片索引数组(比如[0,1,2,4]),直接从Redis里取,不走磁盘,响应迅速。合并完成后,记得执行Redis::del("uploaded_chunks:{$identifier}")清理状态。为了防止Redis里残留脏数据,所有状态键必须设置过期时间,比如SETEX uploaded_chunks:abc 86400 [0,1,2]。

    五、分片清理与权限校验自动化

    临时分片如果不清除,日积月累会把磁盘塞爆。合并成功后,递归删除storage/app/chunks/{$identifier}/目录,用Filesystem::deleteDirectory()而不要用shell的rm -rf。再注册一个artisan命令php artisan upload:cleanup,让它定时扫描chunks/目录下超过24小时还没被合并的目录,直接清理掉。

    部署时别忘了设置目录权限:chmod -R 755 storage/app/chunks storage/app/uploads,然后chown -R www-data:www-data storage/app/chunks storage/app/uploads。最后,Nginx的client_max_body_size必须配置成至少128m,否则分片请求还没到PHP就被拦截,直接返回413错误。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 laravel
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。