首页>代码>webuploader+bootstrap实现文件断点分片并发上传实例2(前端一些优化和遇到的问题总结)>/webuploader/src/com/cn/upload/Video.java
package com.cn.upload; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 合并分块 * @author Administrator * */ @SuppressWarnings("serial") public class Video extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { super.doGet(request, response); doPost(request, response); } @SuppressWarnings("resource") public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String savePath = this.getServletConfig().getServletContext() .getRealPath(""); String folad = "uploads"; savePath = savePath + "\\" + folad + "\\"; String action = request.getParameter("action"); if (action.equals("mergeChunks")) { // 合并文件 // 需要合并的文件的目录标记 String fileMd5 = request.getParameter("fileMd5"); String fileSuffix=request.getParameter("fileSuffix"); // 读取目录里的所有文件 File f = new File(savePath + "/" + fileMd5); File[] fileArray = f.listFiles(new FileFilter() { // 排除目录只要文件 public boolean accept(File pathname) { if (pathname.isDirectory()) { return false; } return true; } }); // 转成集合,便于排序 List<File> fileList = new ArrayList<File>(Arrays.asList(fileArray)); Collections.sort(fileList, new Comparator<File>() { public int compare(File o1, File o2) { if (Integer.parseInt(o1.getName()) < Integer.parseInt(o2 .getName())) { return -1; } return 1; } }); // UUID.randomUUID().toString()-->随机名 File outputFile = new File(savePath + "/" + fileMd5 + "."+fileSuffix); // 创建文件 outputFile.createNewFile(); // 输出流 FileChannel outChnnel = new FileOutputStream(outputFile).getChannel(); // 合并 FileChannel inChannel; for (File file : fileList) { inChannel = new FileInputStream(file).getChannel(); inChannel.transferTo(0, inChannel.size(), outChnnel); inChannel.close(); // 删除分片 file.delete(); } outChnnel.close(); // 清除文件夹 File tempFile = new File(savePath + "/" + fileMd5); if (tempFile.isDirectory() && tempFile.exists()) { tempFile.delete(); } System.out.println("合并成功"); } else if (action.equals("checkChunk")) { // 检查当前分块是否上传成功 String fileMd5 = request.getParameter("fileMd5"); String chunk = request.getParameter("chunk"); String chunkSize = request.getParameter("chunkSize"); File checkFile = new File(savePath + "/" + fileMd5 + "/" + chunk); response.setContentType("text/html;charset=utf-8"); // 检查文件是否存在,且大小是否一致 if (checkFile.exists() && checkFile.length() == Integer.parseInt(chunkSize)) { // 上传过 response.getWriter().write("{\"ifExist\":1}"); } else { // 没有上传过 response.getWriter().write("{\"ifExist\":0}"); } } } }
最近下载更多
a251406968 LV1
2023年10月20日
taoshen95 LV15
2022年4月13日
李海洋 LV12
2021年11月29日
240598911 LV10
2021年11月9日
wu000000
2021年7月21日
暂无贡献等级
darling007 LV1
2021年5月8日
sun丶孙 LV8
2021年3月28日
527826533 LV10
2021年1月12日
sunwenbin_789 LV3
2021年1月4日
Randson LV1
2020年12月15日
最近浏览更多
a251406968 LV1
2023年10月20日
Niderongyan LV9
2023年5月26日
201601070152 LV3
2022年12月6日
随便001
2022年11月25日
暂无贡献等级
wanglinddad LV55
2022年4月15日
taoshen95 LV15
2022年4月13日
李海洋 LV12
2021年11月29日
红茶馆 LV5
2021年11月24日
240598911 LV10
2021年11月9日
justinsx LV1
2021年11月3日