文件断点续传和秒传的一些问题

1、文件md5计算时机

在文件添加是进行md5计算。
问题:注意开始上传按钮显示与隐藏的时机。

uploader.bind('FilesAdded', function (up, files) {
    $("#uploader_start").hide();
    for (var i in files) {
        filecount=files.length;
        var fileReader = new FileReader(), box = document.getElementById('box');
        blobSlice = File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice, file = files[i].getNative(), chunkSize = 209715200000,
        chunks = Math.ceil(file.size / chunkSize), currentChunk = 0, spark = new SparkMD5();
        sizestr+=files[i].size+":";
        fileReader.onload = function (e) {                                        spark.appendBinary(e.target.result);
            currentChunk++;
            if (currentChunk < chunks) {
                loadNext();
            } else {
                var tempMd5=spark.end();
                md5str+=tempMd5+":";
                box.innerHTML="正在检查秒传";
                $("#md5Str").val(md5str);
                if (currentcount==filecount) {
                    $("#uploader_start").show();
                    box.innerHTML="";
                }
                currentcount++;
            }
        };
        function loadNext() {
            var start = currentChunk * chunkSize, end = start + chunkSize >= file.size ? file.size : start + chunkSize;
            fileReader.readAsBinaryString(blobSlice.call(file, start, end));
        }
        loadNext();
    }
});

2、文件上传之前的参数传递

                uploader.bind("BeforeUpload",function(up,files){
                        uploader.setOption("multipart_params",
                            {
                                md5Result:md5str,
                                sizeResult:sizestr, 
                                //和一些其他必要的参数
                            });

                    });

3、ashx处理

foreach (string upload in context.Request.Files)
{
     if (upload != null && upload.Trim() != "")
     {
         if(数据库中存在该文件的MD5&&已上传完整)
         {
             break;
         }
         else
         {
             if(临时文件的文件夹不存在)
             {
                 //创建临时文件夹
             }
             //tempchunk:根据已上传文件文件大小计算chunk的分片数
             //chunk:当前上传的分片数
             //chunks:总分片数
             if(chunks>1)
             {
                 if(临时文件不存在)
                 {
                     //保存分片文件,并把数据插入到数据库
                 }
                 else
                 {
                     if(tempchunk==chunk)
                     {
                         //保存分片文件,并把数据更新到数据库
                     }
                 }
             }
             if(chunks>1&&chunk+1==chunks)
             {
                 //合并临时文件并做数据库相关操作
             }
             if(chunks==1)
             {
                 //小文件上传
             }
         }
     }
}

4、处理多个文件上传时的问题

多个文件上传时,传递过来MD5数组。在遍历浏览器发送过来的文件时,需要获取MD5值,如果定义`public static int imd5 = 1;`,这个情况会有时出现第二次上传时文件无法上传的情况(可能是imd5还没有释放,其中imd5++的值还保留在imd5中),所以处理时需要获取文件的总个数filecount,就可以在进行文件合并时这么处理:
                           if (imd5 == filecount)
                            {
                                imd5 = 1;
                            }
                            else
                            {
                                imd5++;
                            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值