问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java服务器如何对zip文件分包上传?

发布网友 发布时间:2022-04-22 10:33

我来回答

1个回答

热心网友 时间:2022-07-13 10:24

这个你是用什么客户端上传呢?

java写的客户端和H5页面都可以做这个操作,思路都是一样的。

把文件切割再上传,后台接受结束后再把文件合并。

在DB里做个记录就是断点续传了嘛。

给点代码提示:

js:

每次上传2M,必须是支持H5的浏览器才行,兼容的问题需要注意!

function calculate(file,callBack){

    var fileReader = new FileReader(),    
        blobSlice = File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice,    
        chunkSize = 2097152,    
        // read in chunks of 2MB
        chunks = Math.ceil(file.size / chunkSize),    
        currentChunk = 0,    
        spark = new SparkMD5();    
    
    fileReader.onload = function(e) {    
        spark.appendBinary(e.target.result); // append binary string
        currentChunk++;    
    
        if (currentChunk < chunks) {    
            loadNext();    
        }    
        else {    
            callBack(spark.end());  
        }    
    };    
    
    function loadNext() {    
        var start = currentChunk * chunkSize,    
            end = start + chunkSize >= file.size ? file.size : start + chunkSize;    
    
        fileReader.readAsBinaryString(blobSlice.call(file, start, end));    
    };    
    
    loadNext();    
}

java代码没什么注释,也不是全部的代码看个大概意思,理解一下吧

根据文件的MD5码来判断每次上传的文件是不是上传过的。

如果是就找到上次的点告诉前台从哪开始上传。

Message message = new Message();
PrintWriter out = response.getWriter();
ServiceBreakpointUpload service = new ServiceBreakpointUpload();
BreakpointShard shard = new BreakpointShard();

String currentShardIndex = "";
String totalShard = "";
String fileMD5 = "";
String fileName = "";
String fileType = "other";
try {
fileMD5 = request.getParameter("fileMD5");
Part part = request.getPart("fileData");
currentShardIndex = request.getParameter("currentShardIndex");
totalShard = request.getParameter("totalShard");
fileName = request.getParameter("fileName");
fileName = new String(fileName.getBytes("iso-8859-1"),"UTF-8");
fileType = request.getParameter("fileType");
String typeFolderName = service.getTypeFolder(fileType);
String folderPath = getServletContext().getRealPath("/upload/") + typeFolderName + File.separator;
String path = folderPath + fileName + "-" + fileMD5 + "-" + currentShardIndex;
System.out.println("fileName:"+fileName);
// 是否初次上传
if (!service.isUpload(fileMD5,fileType)) {
BreakpointFile breakpointFile = new BreakpointFile();
breakpointFile.setMd5(fileMD5);
breakpointFile.setFile_name(fileName);
breakpointFile.setTotal_shard(totalShard);
breakpointFile.setCurrent_shard_index(currentShardIndex);
breakpointFile.setFile_type(fileType);
breakpointFile.setPath(folderPath);
service.saveFile(breakpointFile);
} else {// 返回上次完成位置
service.updateFile(fileMD5, currentShardIndex,fileType);
System.out.println("upload shard "+currentShardIndex+" OK");
}
shard.setMd5(fileMD5);
shard.setShard_index(currentShardIndex);
shard.setPath(path);
service.saveShardFile(shard);
part.write(path);
if (currentShardIndex.equals(totalShard)) {// 上传完成
System.out.println("upload File finsh start merge shard");
service.mergeFiles(fileMD5,fileType);
System.out.println("merge shard OK");
message.setData("completed");
}
message.setData(currentShardIndex);
out.println(JSONObject.fromObject(message).toString());
} catch (Exception e) {
e.printStackTrace();
message.setHasError(true);
message.setErrorMessage("错误!");
out.println(JSONObject.fromObject(message).toString());
}
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 怎么将文件分包,一包一包发送,每包1K 如何将文件分包,一包一包发送,每包1K 台式电脑一直关不上,总是提示正在关机中是怎么回事 台式电脑关不了机怎么解决? 为什么我的台式电脑按下电源按钮后关不了机? 台式主机关不了机怎么办? 台式电脑为什么关不了机 台式电脑关不了机怎么办??? 台式电脑关不了机是什么原因? 台式电脑关不了机(按主机也没用) 台式电脑关不了机怎么办? 药过期了还能吃吗 过期一年的药能吃吗? 过期药吃了有什么反应? 药品过了保质期还能吃吗? 过期的药吃了会怎样 过期一年的药还能吃吗 火山小视频属于腾讯的吗 请问过期药能吃吗? 抖音火山版被判赔偿腾讯800万,这是因为什么呢? 如何分包上传文件 大文件怎么传输? 网络传输超大文件 怎样通过网络向另外一台电脑传送大文件,4个G以上? 有谁知道大文件传输方案吗?内存超过20G了,怎么压缩都发不出去。。。 压缩包和文件夹传输时哪个快,为什么啊!! 如何进行异地最大速度的文件传输????? 怎么样可以给别人发送一个1.3G的文件 FTP传输的数据最多能支持多大?1.2GB还是1.5GB?上次用FTP传输4GB的数据,结果报错。 为什么传输文件时要先压缩 压缩文件如何分包? 租房合同格式怎么写 芦笋怎样种植 芦笋种子的种植方法和时间是什么? 想种植芦笋该怎么选地种植呢?如果做好种植管理呢? 用种子可以种植芦笋吗?应该怎么操作呢? 请问:JAVA EE中,当用户登录成功后,怎么把用户的登录信息保存到cookie中? java中Session是什么?怎么用? 404 Not Found Java用户登入问题,如果用户登入成功,我将用户对象存放到Session里,如果多个用户同时登入怎么办?