上机考试系统 commons-fileupload 上传与下载 压缩为 zip 文件 删除文件夹下所有内容...
生活随笔
收集整理的這篇文章主要介紹了
上机考试系统 commons-fileupload 上传与下载 压缩为 zip 文件 删除文件夹下所有内容...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在 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 文件 删除文件夹下所有内容...的全部內容,希望文章能夠幫你解決所遇到的問題。