本站和网页 https://learnku.com/laravel/t/2274/aetherupload-let-laravel-support-large-file-breakpoint-upload 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

AetherUpload - 让 Laravel 支持超大文件断点上传 | Laravel | Laravel China 社区
Laravel 话题列表 社区 Wiki 优质外文 招聘求职 Laravel 实战教程 社区文档 登录 注册 首页 Go PHP Python Vue.js Java MySQL Rust LK
Elasticsearch
F2E 前端
程序员
Server
Database
DevTools
Computer Science
手机开发
AdonisJS
社区
Wiki
教程
Laravel 实战教程首页
《L01 Laravel 教程 - Web 开发实战入门》
《L02 Laravel 教程 - Web 开发实战进阶》
《L03 Laravel 教程 - 实战构架 API 服务器》
《L04 Laravel 教程 - 微信小程序从零到发布》
《L05 Laravel 教程 - 电商实战》
《L06 Laravel 教程 - 电商进阶》
《LX1 Laravel / PHP 扩展包视频教程》
《LX2 PHP 扩展包实战教程 - 从入门到发布》
《L07 Laravel 教程 - Laravel TDD 测试实战》
《LX3 Laravel 性能优化入门》
《LX4 Laravel / PHP 五分钟视频》
文档
社区文档首页
《Laravel 中文文档》
《Laravel 速查表》
《PHP 代码简洁之道》
《Laravel 编码技巧》
《Dcat Admin 中文文档》
《Laravel Nova 中文文档》
《Lumen 中文文档》
《Dingo API 中文文档》
《 Laravel 项目开发规范》
《构建 Laravel 开发环境》
微信登录
AetherUpload - 让 Laravel 支持超大文件断点上传
45
36
23
分享
13392
创建于
7年前
说明
AetherUpload
是提供超大文件上传的laravel扩展包,带百分比进度显示,支持断点续传,支持自定义中间件,基于laravel 5开发。
我们知道,在以前,文件上传采用的是直接传整个文件的方式,这种方式对付一些小文件是没有问题的。而当需要上传大文件时,此种方式不仅操作繁琐,需要修改web服务器和后端语言的配置,而且会大量占用服务器的内存,导致服务器内存吃紧,严重的甚至传输超时或文件过大无法上传。很显然,普通的文件上传方式已无法满足现在越来越高的要求。
随着技术的发展,如今我们可以利用HTML5的分块上传技术来轻松解决这个困扰,通过将大文件分割成小块逐个上传再拼合,来降低服务器内存的占用,突破服务器及后端语言配置中的上传大小限制,可上传任意大小的文件,同时也简化了操作,提供了直观的进度显示。
用法
0) 在终端内切换到你的laravel项目根目录,执行
composer require peinhu/aetherupload-laravel dev-master
1) 在
config/app.php
providers
数组中添加一行
Peinhu\AetherUpload\AetherUploadServiceProvider::class,
2) 执行
php artisan vendor:publish
来发布一些文件和目录
3) 赋予上传目录相应权限,在项目根目录下,执行
chmod 755 storage/app/uploads -R
4) 在浏览器访问
http://域名/aetherupload
可到达示例页面
提示:更改相关配置选项请编辑
config/aetherupload.php
优化建议
(推荐)设置每天自动清除无效文件。
由于上传流程存在意外终止的情况,如在传输过程中强行关闭页面或浏览器,将会导致已产生的临时文件成为无效文件,占据大量的存储空间,我们可以使用Laravel的任务调度功能来定期清除它们。
在Linux中运行
crontab -e
命令,确保文件中包含这行代码:
* * * * * php /项目根目录的绝对路径/artisan schedule:run 1>> /dev/null 2>&1
app/Console/Kernel.php
中的
schedule
方法中添加以下代码:
$schedule->call(function () {
(new \Peinhu\AetherUpload\Uploader())->cleanUpDir();
})->daily();
提高临时文件读写速度。
利用Linux的tmpfs文件系统,来达到将临时文件放到内存中快速读写的目的。执行以下命令:
mkdir /dev/shm/tmp
chmod 1777 /dev/shm/tmp
mount --bind /dev/shm/tmp /tmp
本帖已被设为精华帖!
举报
Payne
119 声望
暂无个人描述~
人点赞
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
推荐文章:
更多推荐...
博客
高效办公小技巧——如何批量处理 SQL 文件?
19
10
9个月前
🎈 Owl Admin v2.0 已发布,让你轻松打造灵活高效的后台管理系统
28
52
1年前
Go实现支持多种协议的抓包工具——Shermie-Proxy
27
38
Xdebug3 断点调试环境之 - Laravel8 + PHP8 + Xdebug3 + PhpStorm2021.3 + Homestead v13.2.1 + Mac
11
22
Laravel 使用 intervention/image 扩展包,生成带文字的海报
25
使用 Macro 让你的代码更简洁,更具有可读性
34
21
2年前
讨论数量:
排序:
时间
投票
Summer
站长
11.3k 声望
维护者 @ LearnKu.com
:+1: Cool
评论
baitongda
课程读者
3 声望
PHP高级工程师 @ 厦门维运创智网络科技有限公司
值得收藏一下
W-W
239 声望
我在上传的时候启用了秒传,已经提示了上传成功,但是服务器并没有文件,我试着将这段代码注释掉之后可以看到上传的文件,但是是
.part
后缀的
# 检测是否可以秒传
if ( $fileHash ) {
if ( RedisHandler::hashExists($fileHash) ) {
$result['savedPath'] = RedisHandler::getFilePathByHash($fileHash); // file\201801\3178d162f252353a4ee625fd10703214.mp4
return Responser::returnResult($result);
请问是问题出在哪里了呢?
6年前
秒传一直没有走到
UploadHandler
里面的
saveChunk
方法
重新安装了包,执行了 demo ,秒传虽然提示上传成功,但是服务器没有文件
好吧,我加了一个配置项,在满足秒传的情况下,根据配置项决定是否启用秒传
config\aetherupload.php
<?php
return [
"OPEN_REDIS_UPLOAD"
=> false,
];
vendor\peinhu\aetherupload-laravel\src
public static function hashExists($fileHash)
$result = false;
if (config('aetherupload.OPEN_REDIS_UPLOAD')) {
if ( class_exists('\Predis\Connection\ConnectionException') ) {
try {
$result = Redis::hexists(config('aetherupload.REDIS_KEY'), $fileHash);
} catch ( ConnectionException $e ) {
return $result;
@Kevinvinvin
晕,才看到这个,最好去github代码库那边反馈issue,一般能第一时间处理,这边是不能及时回复的?。
1)首先说一下秒传功能是不需要关闭选项的,设计逻辑是只要满足条件就能自动启用秒传,如果不满足条件就不启用,因为秒传本身只会带来好处,避免了文件重复造成的空间浪费,也节省了上传时间,所以没有必要关闭。
2)你的做法只是临时屏蔽了问题,但问题还是存在的,这么做秒传功能就没了,损失还是挺大的。
3)根据你的描述,说明插件判断文件已经存在,上传走了秒传流程,所以没有文件是正常的。原因的话我猜测可能是你手动删除了之前已上传的文件,但没有更新redis中的文件hash清单,产生了脏数据,即在你删除文件之后没有更新redis,redis中还留有该文件的hash记录,插件以为该文件是存在的,直接走秒传流程(不会上传文件)。如果是这种情况,可以通过执行
php artisan aetherupload:build
来重建redis中的文件hash清单,修正这个问题,然后以后的删除文件操作记得都需要及时更新redis。
@Payne
搜嘎~ 恍然大悟 :sweat_smile::pray:
漫漫长路
10 声望
想问一下
那个要用什么函数返回‘时长‘
5年前
南巷以南丶
6 声望
我想上传后缀名是exe的文件,但是我在源代码中发现了这个方法,哪位大神可以告诉我如何解决吗
并且我在配置文件的白名单设置了exe也没用
Cracker
2 声望
此扩展已经无法使用,更新后报错
@Cracker
你更新的什么版本?目前最新还是1.0.7,2.0版本还没正式发布。
AetherUpload 2
已发布,根据用户反馈和需求,添加分布式部署支持、添加Mime-Type检查、添加头文件redis储存驱动、添加跨域中间件、添加秒传开关配置项、添加自定义黑名单配置项、代码重构优化。
line75
0 声望
PHP工程师 @ 广州申迪
有没有php接口类型的方案
4年前
@line75
因为前端也是有一些特定逻辑的,所以如果是手机客户端不是直接可以用的,不过可以自己仿照着写一下。
xh2228609266
我是laravel5.8的,引入组件后,用组件中的示例可以上传文件,上传后也可以直接下载,就是使用组件提供的访问资源的访问去访问资源就会报404错误,我的nginx启用了伪静态,隐藏了index.php,如果我不隐藏index.php或者太访问资源的路径后再跟一个路径分隔符就可以访问到!请问一下如果使用伪静态,是不是还需要单独再配置什么?
@xh2228609266
没遇到过这样的问题,刚用了5.8测试也无法复现问题,请用laravel文档中推荐的方法来做伪静态,应该不会有问题。一般来说,不会下载正常访问却不正常,如果你那边实在不行,那可以自己重写访问路由和处理逻辑。
xiaohui111
请问如何获取到上传文件的名称
@xiaohui111
看前端源码
你好。有个问题请教一下
我想把上传的文件保存到项目根目录的 public 下
我想要获取到文件的上传的原来文件名
求大神赐教
1.不可能直接传到/public,laravel规范是必须传到storage/app下的目录中,所以给出了storage:link这样的命令来把storage/app/public生成软连接到/public下。你想要本扩展上传的文件能在/public下访问,就要将配置文件中的
root_dir
对应项修改为'public',然后运行artisan命令aetherupload:groups,再运行storage:link,这样在/public就生成了软连接,就可以访问到文件了。
2.在前端可以获取到,通过上传完成回调success(someCallback)就可以获取到文件原名resourceName。
waxxing
请问一下,这个是断点续传还是断线续传?
@waxxing
断线续传
讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
框内皆可上传图片">
GitHub 兼容 Markdown">
支持 MD
帮助
关注本文
TA 的博客
纠错改进
社区赞助商
成为赞助商
关于 LearnKu
LearnKu 是终身编程者的修道场
做最专业、严肃的技术论坛
LearnKu 诞生的故事
资源推荐
《社区使用指南》
《文档撰写指南》
《LearnKu 社区规范》
《提问的智慧》
服务提供商
其他信息
成为版主
所有测验
联系站长(反馈建议)
粤ICP备18099781号-6
粤公网安备 44030502004330号
违法和不良信息举报
设计和编码
请登录
提交
忘记密码?
or
第三方账号登录
GitHub 登录
内容举报
匿名举报,为防止滥用,仅管理员可见举报者。
我要举报该
,理由是:
垃圾广告
:恶意灌水、广告、推广等内容
无意义内容
:测试、灌水、文不对题、消极内容、文章品质太差等
违规内容
:色情、暴利、血腥、敏感信息等
不友善内容
:人身攻击、挑衅辱骂、恶意行为
科学上网
:翻墙、VPN、Shadowsocks,政策风险,会被关站!
不懂提问
:提问太随意,需要再做一遍《提问的智慧》测验
随意提问
:提问没有发布在社区问答分类下
排版混乱
:没有合理使用 Markdown 编写文章,未使用代码高亮
内容结构混乱
:逻辑不清晰,内容混乱,难以阅读
标题随意
:标题党、标题不释义
尊重版权
:分享付费课程、破解软件(付费),侵犯作者劳动成果
其他理由
:请补充说明
取消