WebUploader的java后端上传代码(支持分片上传)(未测试)
2016-07-22 02:00
766 查看
[Java]代码
public void fileUpload(HttpServletRequest request, HttpServletResponse response) throws ServletException { try { String path = request.getParameter("path"); path = path != null ? java.net.URLDecoder.decode(path, "utf-8") : ""; boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); // 得到所有的表单域,它们目前都被当作FileItem List<FileItem> fileItems = upload.parseRequest(request); String id = ""; String fileName = ""; // 如果大于1说明是分片处理 int chunks = 1; int chunk = 0; FileItem tempFileItem = null; for (FileItem fileItem : fileItems) { if (fileItem.getFieldName().equals("id")) { id = fileItem.getString(); } else if (fileItem.getFieldName().equals("name")) { fileName = new String(fileItem.getString().getBytes( "ISO-8859-1"), "UTF-8"); } else if (fileItem.getFieldName().equals("chunks")) { chunks = NumberUtils.toInt(fileItem.getString()); } else if (fileItem.getFieldName().equals("chunk")) { chunk = NumberUtils.toInt(fileItem.getString()); } else if (fileItem.getFieldName().equals("file")) { tempFileItem = fileItem; } } // 临时目录用来存放所有分片文件 String tempFileDir = getTempFilePath() + File.separator + id; File parentFileDir = new File(tempFileDir); if (!parentFileDir.exists()) { parentFileDir.mkdirs(); } // 分片处理时,前台会多次调用上传接口,每次都会上传文件的一部分到后台(默认每片为5M) File tempPartFile = new File(parentFileDir, fileName + "_" + chunk + ".part"); FileUtils.copyInputStreamToFile(tempFileItem.getInputStream(), tempPartFile); // 是否全部上传完成 // 所有分片都存在才说明整个文件上传完成 boolean uploadDone = true; for (int i = 0; i < chunks; i++) { File partFile = new File(parentFileDir, fileName + "_" + i + ".part"); if (!partFile.exists()) { uploadDone = false; } } // 所有分片文件都上传完成 // 将所有分片文件合并到一个文件中 if (uploadDone) { File destTempFile = new File(getTempFilePath(), fileName); for (int i = 0; i < chunks; i++) { File partFile = new File(parentFileDir, fileName + "_" + i + ".part"); FileOutputStream destTempfos = new FileOutputStream( destTempFile, true); FileUtils.copyFile(partFile, destTempfos); destTempfos.close(); } // 得到 destTempFile 就是最终的文件 // 添加到文件系统或者存储中 // 删除临时目录中的分片文件 FileUtils.deleteDirectory(parentFileDir); // 删除临时文件 destTempFile.delete(); ResponseUtil.responseSuccess(response, null); } else { // 临时文件创建失败 if (chunk == chunks -1) { FileUtils.deleteDirectory(parentFileDir); ResponseUtil.responseFail(response, "500", "内部错误"); } } } } catch (Exception e) { logger.error(e.getMessage(), e); ResponseUtil.responseFail(response, "500", "内部错误"); } }
相关文章推荐
- ftp 实现文件的上传下载以及列出文件列表Java代码(未测试)
- 套路重写Java的equals函数
- java中常用的时间处理类TimeUtil
- java lisi乱序、排序
- Java字符串工具类(未测试)
- 算法--列(java实现)
- 统计项目源码行数的Java代码
- java实现鼠标和键盘动作后台监听(未测试)
- 利用Gson实现Json串和Java Bean互转(未测试)
- Java实现简单的截图工具(未测试)
- java zip 工具类(未测试)
- Java通用的Excel文件生成工具类,支持生成文件和浏览器直接下载(未测试)
- java在线预览txt、word、ppt、execel,pdf代码(未测试)
- java实现发送邮件可多个附件内嵌图片-commons-email使用(未测试)
- Java 批量随机生成身份证号码(未测试)
- 简单的java爬虫抓取网页实现代码(未测试)
- java 汉字转化为拼音工具类(未测试)
- JAVA 比较两张图片的相似度的代码(未测试)
- SpringMVC多文件上传实例(未测试)
- Java加密解密DESUtil、TripleDESUtil(未测试)