本文主要是介绍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上传文件,包括解压缩上传的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!