plupload+springMVC上传文件,包括解压缩上传

2024-03-10 00:58

本文主要是介绍plupload+springMVC上传文件,包括解压缩上传,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

uploadALLPic 单次上传多图片,uploadZip上传zip或Rar文件解压

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<html>
<head>
<title>批量上传照片</title>
</head>
<body><p>hello</p><script type="text/javascript" src="${ctx}/lib/plupload/moxie.min.js"></script><script type="text/javascript" src="${ctx}/lib/plupload/plupload.min.js"></script><script type="text/javascript" src="${ctx}/lib/plupload/zh_CN.js"></script><input type="button" value="上传" id="uploadALLPic" /><img src="" id="showPic"/><input type="button" value="上传zip" id="uploadZip"/><script type="text/javascript">$(function () {initALLPicUploader();initZipUploader();});//批量上传图片function initALLPicUploader() {var excelUploader = new plupload.Uploader({runtimes: 'html5,flash,html4',multipart: true,multi_selection: true,browse_button: 'uploadALLPic', // 按钮idfile_data_name: "file",url: '${ctx}/upload/all/photo',max_file_size: '10000mb',filters: {max_file_size: '10000mb',mime_types: [{title: "Image files", extensions: "jpg,gif,png,jpeg"}]},flash_swf_url: '${ctx}/lib/plupload/Moxie.swf',init: {FilesAdded: function () {$.messager.progress({title: '请稍候',msg: '上传附件',text: '上传中.......'});excelUploader.start();console.log("2")},FileUploaded: function (up, file, response) {$.messager.progress('close');console.log("3")var result = JSON.parse(response.response);console.log(result)if (result.success !== true) {$.messager.alert("操作提示", result.message, "info");return;} else {var options = {title: "操作提示",msg: result.message,showType: 'slide',timeout: 5000};$("#showPic").attr("src","${ctx}/lib/images/"+result.url+"");return;} },Error: function (up, err) {$.messager.progress('close');console.log("4")$.messager.alert("操作提示", "上传发生错误:" + err.code + ", " + err.message, "error");}}});excelUploader.init();}function initZipUploader() {var excelUploader = new plupload.Uploader({runtimes: 'html5,flash,html4',multipart: true,multi_selection: true,browse_button: 'uploadZip', // 按钮idfile_data_name: "file",url: '${ctx}/upload/zip',max_file_size: '10000mb',filters: {max_file_size: '10000mb',mime_types: [{title: "Zip", extensions: "zip,rar"}]},flash_swf_url: '${ctx}/lib/plupload/Moxie.swf',init: {FilesAdded: function () {$.messager.progress({title: '请稍候',msg: '上传附件',text: '上传中.......'});excelUploader.start();},FileUploaded: function (up, file, response) {$.messager.progress('close');var result = JSON.parse(response.response);console.log(result)if (result.success !== true) {$.messager.alert("操作提示", result.message, "info");return;} else {var options = {title: "操作提示",msg: result.message,showType: 'slide',timeout: 5000};return;} },Error: function (up, err) {$.messager.progress('close');$.messager.alert("操作提示", "上传发生错误:" + err.code + ", " + err.message, "error");}}});excelUploader.init();}</script></body>
</html>

相对应的controller及Util

    @RequestMapping(value="/upload/all/photo",method = RequestMethod.POST)public ModelAndView upload(@RequestParam(value = "file") MultipartFile file) {String url="";try {if (null != file) {url=uploadService.doALLImport(file);}} catch (Exception e) {return new ModelAndView(new MappingJackson2JsonView(), new HashMap<String, Object>() {{put("success", false);put("message", "出错");}});}final String pathUrl = url;return new ModelAndView(new MappingJackson2JsonView(), new HashMap<String, Object>() {{put("success", true);put("url", pathUrl);put("message", "批量上传照片完成!");}});     }@RequestMapping(value="/upload/zip",method=RequestMethod.POST)public ModelAndView uploadZip(@RequestParam(value = "file") MultipartFile file) {String realPath = request.getSession().getServletContext().getRealPath("/WEB-INF/lib");try {            if (null != file) {//解压处理UploadUtil.resolveCompressUploadFile(request, file, realPath);}} catch (Exception e) {return new ModelAndView(new MappingJackson2JsonView(), new HashMap<String, Object>() {{put("success", false);put("message", "出错");}});}return new ModelAndView(new MappingJackson2JsonView(), new HashMap<String, Object>() {{put("success", true);put("message", "解压上传文件完成!");}});   }

service

    //批量上传照片public String doALLImport(MultipartFile file) throws Exception {String prefixName = "";String fileName ="";if (null != file) {String myFileName = file.getOriginalFilename();String realPath = request.getSession().getServletContext().getRealPath("/WEB-INF/lib");      //设置路径if (myFileName.trim() != "") {//重命名上传后的文件名               Random ra = new Random();int raNum = ra.nextInt(100);//获取当前系统时间Long nowTime = System.currentTimeMillis();prefixName = nowTime + "" + raNum;//重命名上传后的文件名               fileName = myFileName;//定义上传路径  String path = realPath +"/images/"+ prefixName+fileName;File localFile = new File(path);file.transferTo(localFile);//保存数据库saveAllPhoto(prefixName+fileName,fileName);}}return prefixName+fileName;}public String saveAllPhoto(String path,String fileName) {// String name = picName.substring(0, picName.indexOf("."));           //去除后缀UploadPic uploadPic = new UploadPic();uploadPic.setName(fileName);   //图片原名称uploadPic.setUrl(path);       //路径(xml配置头)uploadPicMapper.insert(uploadPic); return path;}

PS:网上引用的zip解压代码块(基本思路都类似)

public class CompressFileUtils {/** * 解压到指定目录 * @param zipPath * @param descDir * @author*/  public static void unZipFiles(String zipPath,String descDir)throws IOException{  unZipFiles(new File(zipPath), descDir);  }  /** * 解压文件到指定目录 * @param zipFile * @param descDir * @author isea533 */  @SuppressWarnings("rawtypes")  public static void unZipFiles(File zipFile,String descDir)throws IOException{  File pathFile = new File(descDir);  if(!pathFile.exists()){  pathFile.mkdirs();  }  ZipFile zip = new ZipFile(zipFile);  for(Enumeration entries = zip.getEntries();entries.hasMoreElements();){  ZipEntry entry = (ZipEntry)entries.nextElement();  String zipEntryName = entry.getName();  InputStream in = zip.getInputStream(entry);  String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;  //判断路径是否存在,不存在则创建文件路径  File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));  if(!file.exists()){  file.mkdirs();  }  //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压  if(new File(outPath).isDirectory()){  continue;  }  //输出文件路径信息  System.out.println(outPath);  OutputStream out = new FileOutputStream(outPath);  byte[] buf1 = new byte[1024];  int len;  while((len=in.read(buf1))>0){  out.write(buf1,0,len);  }  in.close();  out.close();  }   }  /** * 根据原始rar路径,解压到指定文件夹下.      * @param srcRarPath 原始rar路径 * @param dstDirectoryPath 解压到的文件夹      */public static void unRarFile(String srcRarPath, String dstDirectoryPath) {if (!srcRarPath.toLowerCase().endsWith(".rar")) {System.out.println("非rar文件!");return;}File dstDiretory = new File(dstDirectoryPath);if (!dstDiretory.exists()) {// 目标目录不存在时,创建该文件夹dstDiretory.mkdirs();}Archive a = null;try {a = new Archive(new File(srcRarPath));if (a != null) {a.getMainHeader().print(); // 打印文件信息.FileHeader fh = a.nextFileHeader();while (fh != null) {if (fh.isDirectory()) { // 文件夹 File fol = new File(dstDirectoryPath + File.separator+ fh.getFileNameString());fol.mkdirs();} else { // 文件File out = new File(dstDirectoryPath + File.separator+ fh.getFileNameString().trim());//System.out.println(out.getAbsolutePath());try {// 之所以这么写try,是因为万一这里面有了异常,不影响继续解压. if (!out.exists()) {if (!out.getParentFile().exists()) {// 相对路径可能多级,可能需要创建父目录. out.getParentFile().mkdirs();}out.createNewFile();}FileOutputStream os = new FileOutputStream(out);a.extractFile(fh, os);os.close();} catch (Exception ex) {ex.printStackTrace();}}fh = a.nextFileHeader();}a.close();}} catch (Exception e) {e.printStackTrace();}}
}
public class UploadUtil {/*** 解析上传的压缩文件* @param request 请求* @param file 上传文件* @return* @throws Exception*/public static String resolveCompressUploadFile(HttpServletRequest request,MultipartFile file,String path) throws  Exception  {/* 截取后缀名 */String fileName = file.getOriginalFilename();int pos = fileName.lastIndexOf(".");String extName = fileName.substring(pos+1).toLowerCase();//判断上传文件必须是zip或者是rar否则不允许上传if (!extName.equals("zip")&&!extName.equals("rar")) {throw new Exception("上传文件格式错误,请重新上传");}//重命名上传后的文件名               Random ra = new Random();int raNum = ra.nextInt(100);//获取当前系统时间Long nowTime = System.currentTimeMillis();        String saveName = nowTime + "" + raNum + "."+extName;//文件名String saveFileName = saveName.substring(0, saveName.lastIndexOf("."));// 根据服务器的文件保存地址和原文件名创建目录文件全路径File pushFile = new File(path  + "/images/" +saveFileName+"/"+ saveName);      File descFile = new File(path+"/images/"+saveFileName);if (!descFile.exists()) {descFile.mkdirs();}//解压目的文件String descDir = path +"/images/"+saveFileName+"/";file.transferTo(pushFile);//zipif (extName.equals("zip")) {CompressFileUtils.unZipFiles(pushFile, descDir);}else if (extName.equals("rar")) { //rar    CompressFileUtils.unRarFile(pushFile.getAbsolutePath(), descDir);           } else {throw new Exception("文件格式不正确不能解压");}return saveFileName;} 
}

至于上传或者解压的文件路径根据项目目录自行可调节

这篇关于plupload+springMVC上传文件,包括解压缩上传的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/792505

相关文章

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析