在 maven 中使用了 commons-fileupload,使用方法:

(一)上传

1.0 pom 文件依赖

<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version>
</dependency>

1-1.前端界面

<form action="" enctype="multipart/form-data" class="modifyall"method="post" id="uploadForm"><input type="file" name="file" id="file"style="display: inline-block" class="po">         <input type="submit" class="layui-btn layui-btn-sm "value="上传" id="fileUpload"> </form>

1-2.js

function fileUpload() {var URL = root + "/teacher/teacherUpload";var data = new FormData($('#uploadForm')[0]);$.ajax({url : URL,type : "post",data : data,async : false,cache : false,processData : false,contentType : false,success : function(data) {      //返回数据类型为 String if (data == "ok") {location.reload();}if (data == "min") {      //如果文件大小小于最小上传值,返回 "min",并将最小值的大小存储在 session 中,通过<input type="hidden"> 和 id 获取最小值var min = $("#min").val();alert("文件必须大于" + min);location.reload();}if (data == "max") {      //同最小值alert("文件必须小于" + max);location.reload();}},error : function(data) {alert("操作失败");}});
}

1-3.Controller@ResponseBody    @RequestMapping("/teacherUpload")

public String upload(MultipartFile file, HttpServletRequest request, HttpServletRequest reponse)throws IOException {PageData pd = this.getPageData();// 根据考试 id 获取考试信息String testid = pd.getString("testid");List<PageData> list = this.teacherFacade.selectTestById(testid);List<PageData> system = this.teacherFacade.selectSystem();/** 文件大小检测*/long filesize = file.getSize();long minSize = (long) system.get(0).get("file_minsize");long maxSize = (long) system.get(0).get("file_maxsize");// 文件小于最小值或大于最大值;if (minSize > filesize) {session.setAttribute("min", minSize + "Byte");return "min";}if (maxSize < filesize) {session.setAttribute("max", maxSize + "Byte");return "max";}// 保存路径为考试名 String path = request.getSession().getServletContext().getRealPath("/ExamSystem/" + list.get(0).getString("testname"));System.out.println("path>>" + path);String fileName = file.getOriginalFilename();// 将文件名加入到数据库pd.put("submit", fileName);this.teacherFacade.updateaddfile(pd);System.out.println("fileName>>" + fileName);File dir = new File(path, fileName);System.out.println("dir.exists()>>" + dir.exists());if (!dir.exists()) {dir.mkdirs();}System.out.println("dir.exists()>>" + dir.exists());
//        MultipartFile自带的解析方法
        file.transferTo(dir);return "ok";}

(二)下载

2-1 前端

<form action="downTest" name="form3" id="form3" method="post"><!-- action 是请求映射的地址 --><input type="submit" class="test_down" value="下载查看" />
</form>

2-2 Controller

@ResponseBody@RequestMapping("/downTest")private void down(HttpServletRequest request, HttpServletResponse response) throws IOException {// 根据考试 id 获取考试信息// list = this.studentFacade.selectTestById(testid);ServletContext application = request.getSession().getServletContext();List<PageData> list = (List<PageData>) application.getAttribute("RunTest");System.out.println(list);if (list != null) {String path = request.getServletContext().getRealPath("/") + "ExamSystem/"+ list.get(0).getString("testname") + "/";System.out.println(path);String fileName = list.get(0).getString("submit");fileName = new String(fileName.getBytes(), "ISO8859-1");//解决无法下载中文的问题//System.out.println(path + fileName);File file = new File(path + fileName);//System.out.println(file);if (file != null) {//System.out.println("文件的名字:" + fileName);response.addHeader("content-disposition", "attachment;filename=" + fileName);FileUtils.copyFile(file, response.getOutputStream());}}}

下载是会有中文名无法显示的问题,代码中加入

fileName = new String(fileName.getBytes(), "ISO8859-1");

(三)打包为 zip 下载 (原文地址没找到...)

3-1 前端

<a  id="downloadInfo" href="downZip?testid=${test.get('testid')}"
title="打包下载">打包下载</a>

3-2 Controller

@ResponseBody@RequestMapping("/downZip")public void downZip(HttpServletRequest request, HttpServletRequest reponse) throws IOException {PageData pd = this.getPageData();//response.setContentType("application/x-msdownload;");// System.out.println(pd);String testid = pd.getString("testid");System.out.println(testid);List<PageData> list = new ArrayList<PageData>();if (this.teacherFacade.selectTestById(testid) != null) {// 归档考试pd.put("test_signal", "3");this.teacherFacade.updateSignal(pd);list = this.teacherFacade.selectTestById(testid);}if (list != null) {try {String testName = list.get(0).getString("testname");String sourcePath = request.getServletContext().getRealPath("/") + "ExamSystem/" + testName;System.out.println(sourcePath);String zipName = testName + ".zip";zipName = new String(zipName.getBytes(), "ISO8859-1");System.out.println(zipName);String zipPath = request.getServletContext().getRealPath("/") + "ExamSystem/" + zipName;File file = new File(sourcePath);// 要被压缩的文件夹File zipFile = new File(zipPath);ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));if (file.isDirectory()) {File[] files = file.listFiles();for (File fileSec : files) {ZipUtil.recursionZip(zipOut, fileSec, "");}}zipOut.close();if (zipFile != null) {System.out.println("文件的名字:" + zipName);response.addHeader("content-disposition", "attachment;filename=" + zipName);FileUtils.copyFile(zipFile, response.getOutputStream());}} catch (Exception e) {e.printStackTrace();}}}

3-3 工具类

package com.ssm.util;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class ZipUtil {/** 文件压缩*/public static void recursionZip(ZipOutputStream zipOut, File file, String baseDir) throws Exception {if (file.isDirectory()) {File[] files = file.listFiles();for (File fileSec : files) {recursionZip(zipOut, fileSec, baseDir + file.getName() + File.separator);}} else {byte[] buf = new byte[1024];InputStream input = new FileInputStream(file);zipOut.putNextEntry(new ZipEntry(baseDir + file.getName()));int len;while ((len = input.read(buf)) != -1) {zipOut.write(buf, 0, len);}input.close();}}
}

(四)删除文件夹下的所有内容  原文地址

4-1 获取文件地址

String sourcePath = request.getSession().getServletContext().getRealPath("/") + "ExamSystem/"+ testName;

4-2 删除文件夹下所有内容

File sourceFile = new File(sourcePath);
if (sourceFile.exists()) {                                        DeleteFolderUtil.deleteFile(sourceFile);
}

4-3 工具类

package com.ssm.util;import java.io.File;public class DeleteFolderUtil {/** 删除文件夹下所有内容*/public static void deleteFile(File file) {if (file.isDirectory()) {File[] files = file.listFiles();for (int i = 0; i < files.length; i++) {deleteFile(files[i]);}}file.delete();}}



转载于:https://www.cnblogs.com/oneMr/p/10039166.html

上机考试系统 commons-fileupload 上传与下载 压缩为 zip 文件 删除文件夹下所有内容...相关推荐

  1. 文件上传,下载,预览,删除(File),分页接口

    文件上传,下载,预览,删除(File) 1.公共参数方法 1.1公共返回类型定义 1.2 分页接口 1.3公共实体类 1.4 公共的 mapper.java/xml(都放在一起) 1.4.1 File ...

  2. 【微信小程序云开发】1分钟学会实现上传、下载、预览、删除图片,并且以九宫格展示图片

    大家好,我叫小秃僧 这篇文章是讲解云开发如何上传.下载.预览.删除图片,并且以九宫格展示图片的功能 学习目录 1. 实现效果 2.JavaScript代码 3.wxml代码 4.wxss代码 1. 实 ...

  3. springboot文件上传下载实战 ——文件上传、下载、在线打开、删除

    springboot文件上传下载实战 文件上传 文件上传核心 UserFileController 文件上传测试 文件下载与在线打开 文件下载.在线打开核心 UserFileController 文件 ...

  4. 市委组织部项目--word上传,下载,预览,删除

    需求:市委组织部考核项目,既然是考核项目就会有很多考核标准要求等,而且各个下属单位对于被考核指标的结果需要上传.这些过程都是通过文档实现的.也就是需要word文档的上传,下载,预览等功能. Word上 ...

  5. php 多文件上传与下载,php实现文件下载跟多文件上传

    php实现文件下载和多文件上传 文件下载: html: 文件上传: html代码:请选择您要上传的文件: 请选择您要上传的文件: 请选择您要上传的文件: 请选择您要上传的文件: 请选择您要上传的文件: ...

  6. 山东大学项目实训(十七)—— 微信小程序附件上传、下载、预览、删除

    目录 附件相关功能再实现 附件业务功能介绍 设计步骤 我的上报查看事件详情 (补充) 附件相关功能再实现 下图为笔者之前所写的博客关于实现的附件上传,但是没有下载.预览和删除.正因为没有下载.预览和删 ...

  7. MinIO基本使用(实现上传、下载功能)

    MinIO基本使用(实现上传.下载功能) 1.简介 2.下载和安装 3.启动服务端 4.创建User和Bucket 4.1 创建User 4.1.1 生成accessKey和secretKey 4.2 ...

  8. java action 上传文件_JavaWeb框架_Struts2_(七)-----文件的上传和下载

    1.  前言 这个章节是Struts2框架应用最广泛的三个版块(上传下载.国际化.校验输入)之一,所以这一版块的学习还蛮重要的. 2.  具体内容 2.1Struts2文件上传 2.1.1单文件上传 ...

  9. Java Web项目中遇到的文件上传与下载问题

    (转发自:https://www.cnblogs.com/xdp-gacl/p/4200090.html)   在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中 ...

最新文章

  1. java mysql死锁_记一次线上mysql死锁分析(一)
  2. 在Opendaylight中karaf启动的时候自动安装自己编写的feature
  3. RE|GoF23种设计模式-动态代理
  4. CH4402 小Z的袜子(莫队)
  5. 以太坊代币标准: ERC20、ERC223的介绍与比较
  6. 如何指南:Apache Drill入门
  7. 科学证明夜猫子都死得早?稳住,事情不是这样的
  8. linux系统启动自动启动,linux系统下的自动启动
  9. 小学生都学Python了,你还不知道怎么开始
  10. TensorFlow中Variable()和get_variable()
  11. SQL2005触发器和存储过程
  12. channel带缓冲区和不带缓冲区的区别
  13. Win7原版|MSDN Windows7 SP1官方原版ISO镜像下载(全版本)
  14. 粘贴PDF,删除空行
  15. DigiCert SSL证书支持中文域名申请吗?
  16. 自然语言处理 朴素贝叶斯文本分类
  17. 一个完整的App应该具备哪些功能
  18. 看看这篇ARM体系结构你就都明白了
  19. 工具-如何屏蔽浏览器中的广告(Adblock Plus(广告屏蔽器))
  20. 微信小程序如何实现登录注册带源码

热门文章

  1. UML 中各种图形重要性的排行
  2. ZOJ-1610-Count the Colors
  3. js获取当前日期方法
  4. 为什么有必要对网站开启https?
  5. 小谈RTMP中AMF3类型的Command message
  6. 解决vs.netIDE报以下文件中的行尾不一致,要将行尾标准化吗?的提示
  7. android 监听屏幕是否锁屏
  8. Android 创建新Project时报错 Cannot create linked resource
  9. java.lang包—基本类型的封装类
  10. JVM—GC垃圾收集器