基于Servlet和SSM框架的文件上传下载的多种实现方法

xiaoxiao2021-02-28  43

文件上传:

Servlet下实现:

文件上传 package TaskSubmit.Servlet; import java.io.*; import java.io.IOException; import java.sql.Connection; import java.sql.Statement; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import TaskSubmit.JDBCpool.JDBCutils; import TaskSubmit.Model.*; @WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; @SuppressWarnings("unchecked") protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); Task task = (Task) request.getSession().getAttribute("Task"); Student student = (Student) request.getSession().getAttribute("user"); String Saccount = student.getSaccount(); // 存放用户账号,用来重命名文件 String Sname = student.getSname(); // 存放用户姓名,用来重命名文件 String ClassName = student.getClassName();// 存放用户班级,用来指定文件夹 String TaskName = task.getTaskName(); // 存放作业名字,用来指定文件夹 String fileType = null; // 存放文件类型,用来重命名文件 try { // 创建工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); File f = new File("E:\\SubmitFile"); if (!f.exists()) { f.mkdirs(); } // 设置文件上传的缓存路径 factory.setRepository(f); // 创建Fileupload组件 ServletFileUpload fileUpload = new ServletFileUpload(factory); fileUpload.setHeaderEncoding("utf-8"); // 设置允许上传的最大 1024*1024*10M // fileUpload.setSizeMax(10485760); // 解析request List<FileItem> fileitems = fileUpload.parseRequest(request); // PrintWriter writer = response.getWriter(); // 遍历集合 for (FileItem fileitem : fileitems) { // 判断是否为普通字段 if (fileitem.isFormField()) { // 获得字段名和字段值 // String name = fileitem.getFieldName(); // String value = fileitem.getString("utf-8"); // writer.print("提交者:"+value+"<br>"); } else { // 上传的文件路径 String fileName = fileitem.getName(); // 截取出文件名 fileName = fileName.substring(fileName.lastIndexOf("\\") + 1); // 截取出文件类型 fileType = fileName.substring(fileName.lastIndexOf(".") + 1); // 对上传文件进行重命名 fileName = "e:\\SubmitFiles\\" + ClassName + "\\" + TaskName + "\\" + Saccount + "-" + Sname + "." + fileType; // 在服务器创建同名文件 File file = new File(fileName); file.getParentFile().mkdirs(); file.createNewFile(); // 获得上传文件流 InputStream in = fileitem.getInputStream(); // 获得写入文件流 OutputStream out = new FileOutputStream(file); // 流的对拷 byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } // 关流 in.close(); out.close(); // 删除临时文件 fileitem.delete(); } } // 更新提交情况表 Connection conn = JDBCutils.getDataSource().getConnection(); Statement stmt = conn.createStatement(); String sql = "UPDATE taskstu SET Flag=1 WHERE TaskName='" + TaskName + "'AND Saccount='" + Saccount + "'"; stmt.executeUpdate(sql); // 提交完成 返回作业列表 // response.sendRedirect("/TaskSubmit/StudentView/TaskList.jsp?curPage=1"); request.getSession().setAttribute("message", "提交成功!"); response.sendRedirect("/TaskSubmit/StudentIndexServlet"); } catch (Exception e) { throw new RuntimeException(e); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

文件下载 String path = "E:" + File.separator + "hrmUpload"; String fileName = documentService.findDocumentById(id).getFileName(); // 获取路径,创建文件对象 File file = new File(path + File.separator + fileName);// File.separator为分隔符,如'/' // 通知浏览器以下载的方式打开文件 response.reset(); response.addHeader("Content-Type", "application/octet-stream"); response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "utf-8")); // 通过文件对象获取文件相关的输入流 InputStream in = new FileInputStream(file); // 获取response对象的输出流 OutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } // 关闭流 in.close(); out.close();

SSM框架下实现:

基于Servlet的文件上传和下载,完全适用于SSM框架下文件上传和下载

文件上传

    先说一下文件的获取,文件的获取可以通过直接在方法中添加MultipartFile类型的参数进行自动获取,也可以像Servlet中一样通过遍历request进行获取。我这里使用document对象进行接收,其有一个MultipartFile类型的属性file。

首先要配置文件解析器(在Spring的配置文件中):

<!-- 配置文件解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">     <property name="defaultEncoding" value="UTF-8"/> </bean> @RequestMapping("/addDocument.do") public String addDocument(Document document, HttpSession session, Model model) throws IllegalStateException, IOException { // 上传文件的路径 // String path = session.getServletContext().getRealPath("/upload"); String path = "E:" + File.separator + "hrmUpload"; File file = new File(path); if (!file.exists()) { file.mkdir(); } // 上传的文件名 String fileName = document.getFile().getOriginalFilename(); // 将文件保存到指定路径和名称 document.getFile().transferTo(new File(path + File.separator + fileName));// File.separator分隔符/或者\ document.setFileName(fileName); document.setUser((User) session.getAttribute("login_user")); int rows = documentService.addDocument(document); if (rows > 0) { return "redirect:/document/findDocument.do"; } else { model.addAttribute("failMSG", "上传文件失败!"); return "/jsp/fail.jsp"; } } 文件下载 @RequestMapping("/downLoad.do") public ResponseEntity<byte[]> downLoad(Integer id) throws IOException { String path = "E:" + File.separator + "hrmUpload"; String fileName = documentService.findDocumentById(id).getFileName(); File file = new File(path + File.separator + fileName); HttpHeaders headers = new HttpHeaders(); String downloadFileName = new String(fileName.getBytes("UTF-8"), "iso8859-1"); // 指定类型,应用程序的字节流 headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", downloadFileName); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK); }
转载请注明原文地址: https://www.6miu.com/read-2621461.html

最新回复(0)