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

相关文章

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

Java读取InfluxDB数据库的方法详解

《Java读取InfluxDB数据库的方法详解》本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、... 首先,创建一个Java项目,用于撰写代码。接下来,配置所需要的依赖;这里我们就选择可用于与Infl

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st