php flash 大文件 上传,PHP+FLASH大文件断点续传功能分享

今天分享给大家一个项目中大文件断点续传功能.大文件切割分片上传. 个人感觉这个功能还不错,具有参考价值,现在把源码分享给大家,有需要的朋友可以参考.功能截图如下

0b4b92e8a58a3822a11fe02af77703ef.png

首先要让服务器支持大文件上传,设置如下

upload_max_filesize = 2M //PHP最大能接受的文件大小

post_max_size = 8M //PHP能收到的最大POST值'

memory_limit = 128M //内存上限

max_execution_time = 30 //最大执行时间

思路如下1.建立上传文件夹

2.把文件从上传临时目录移动到上传文件夹

3.所有的文件块上传完成后,进行文件合成

4.删除文件夹

5.返回上传后的文件路径

前端ji部分

var userInfo       = {userId:"kazaff", md5:"",truePath:'',categoryId:''};

var chunkSize      = 5 * 1024* 1024;//分块大小  上线时候调成5M

var uniqueFileName = null;          //文件唯一标识符

var md5Mark        = null;

var backEndUrl     = "{:U('Admin/FileManage/beforeUpload')}";

WebUploader.Uploader.register({

"before-send-file": "beforeSendFile",

"before-send": "beforeSend",

"after-send-file": "afterSendFile"

}, {

beforeSendFile: function(file){

//秒传验证

var task = new $.Deferred();

var start = new Date().getTime();

(new WebUploader.Uploader()).md5File(file, 0, 10*1024*1024).progress(function(percentage){

console.log(percentage);

}).then(function(val){

console.log("总耗时: "+((new Date().getTime()) - start)/1000);

md5Mark = val;

userInfo.md5 = val;

$.ajax({

type: "POST",

url: backEndUrl,

data: {

status: "md5Check",

md5: val,

categoryId:$('#categoryid').val()

},

cache: false,

timeout: 1000, //todo 超时的话,只能认为该文件不曾上传过

dataType: "json"

}).then(function(data, textStatus, jqXHR){

if(data.ifExist){   //若存在,这返回失败给WebUploader,表明该文件不需要上传

task.reject();

uploader.skipFile(file);

file.path = data.path;

UploadComlate(file,data);

}else{

task.resolve();

//拿到上传文件的唯一名称,用于断点续传

uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);

}

}, function(jqXHR, textStatus, errorThrown){    //任何形式的验证失败,都触发重新上传

task.resolve();

//拿到上传文件的唯一名称,用于断点续传

uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);

});

});

return $.when(task);

}, beforeSend: function(block){

//分片验证是否已传过,用于断点续传

var task = new $.Deferred();

$.ajax({

type: "POST",

url: backEndUrl,

data: {

status: "chunkCheck",

name: uniqueFileName,

chunkIndex: block.chunk,

size: block.end - block.start

},

cache: false,

timeout: 1000, //todo 超时的话,只能认为该分片未上传过

dataType: "json"

}).then(function(data, textStatus, jqXHR){

if(data.ifExist){   //若存在,返回失败给WebUploader,表明该分块不需要上传

task.reject();

}else{

task.resolve();

}

}, function(jqXHR, textStatus, errorThrown){    //任何形式的验证失败,都触发重新上传

task.resolve();

});

由于源码有点长此处省略,有需要源码的自己下载.................

php处理大文件部分代码

注: 由于php部分代码处理比较多,就不把代码粘贴出来了.源码包已经整理好,需要的朋友可以自己下载

百度网盘下载链接: https://pan.baidu.com/s/1hsCifvY 密码: i49f

本期除了API文档外,再附送《SWFUpload V2_2_0 说明文档.htm》 花生米AJAX-UI系列之:基于JQUERY的文件上传控件0.1版 特点: 可设定为是否单个上传,或者是批量上传; 可在上传过程中取消上传(单个或者批量取消); 在批量选择文件后,可以手工选择上传其中部分文件; 可在上传文件时顺带上传REQUEST传参,如SESSION_ID; 选择批量文件,在上传前,用户还可删除其中几个不想上传文件; 本控件是对swfUpload这个FLASH插件的二次包装,控件类对象中的一个内部元素即为一个SWFUpload对象,可对其中进行相应的操作(详见附送的SWFUpload V2_2_0 说明文档.htm) 本控件内置一个保存了文件列表信息的数组$fileList,其单元为JSON对象,保存了每个文件的ID,名称,类型,大小等信息; 可自定义按钮显示文字,文件上传的服务器端地址,以及SWF控件相对于当前网页的相对路径 本个控件包是建立在JSP基础上为大家展示上传效的,但实际该控件有用的部分仅在客户端前台;后台代码可以全部推翻,重新用PHP,.NET等其它动态语言编写 使用了本控件后,在后台编写代码时,不必编写实时监控文件上传进度的复杂代码,只用编写简单的处理保存上传文件的代码即可,因为FLASH插件会自动帮助算出上传进度,并实时定时给控件提供进度显示数据,这样就减轻了后台开发人员的工作量; 基于上一点,本控件前台也不会以长轮询方式访问服务器端,以获取文件上传进度情况,而是自己定时计算以上传的字节总数。因此当上传一个文件时,FLASH插件只会发一次传输请求,这样就改善了效率。 由于用FLASH传值时会给服务器造出一个新的SESSION,导致在服务端过滤器作用下可能会上传失败,因此用户可以在上专文件时,利用this.$swfUpload的addPostParam或者setPostParams方法,将原来的SESSION_id作为REQUEST参数传回服务端,服务端过滤器只要根据此SESSION_id判断相应用户是否“登录”即可.\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值