servlet实现文件上传和下载
2018-03-25 22:54
351 查看
servlet实现文件上传注意事项:
表单提交方式应为post方式,还要设置表单属性enctype=”multipart/form”使用Part对象来获取上传文件的相关属性以及获取文件的输入流
上传到服务器的路径一定要是绝对路径
设置编码格式防止中文名乱码
使用@MultipartConfig标注Servlet
servlet实现文件下载注意事项:
设置response对象的ContentType为对应的文件类型取得下载文件在服务器上的真实路径
文件上传servlet:
package com.ysgncss; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; @WebServlet("/UploadFile.do") @MultipartConfig //表示期望multipart/data-form MIME类型 public class UploadFile extends HttpServlet { private static final long serialVersionUID = 1L; public UploadFile() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //1.获取上传文件的文件名 Part filepart=request.getPart("filename"); String conf=filepart.getHeader("content-disposition"); String filename=""; //从头信息中获取文件名 for (String content : conf.split(";")) { if (content.trim().startsWith("filename")) { filename=content.substring(content.indexOf("\"")+1, content.lastIndexOf("\"")); } } //2.利用输入输出流传输数据 OutputStream out =null; InputStream in=null; ServletContext context=getServletContext(); PrintWriter writer=response.getWriter(); String path=context.getRealPath("/upload"); try { //构造到指定目录的输出流 out=new FileOutputStream(new File(path+File.separator+filename)); //获取上传文件输入流 in=filepart.getInputStream(); int read; byte b[]=new byte[1024]; while((read=in.read(b))!=-1){ out.write(b, 0, read); } writer.write("文件上传成功至"+path); } catch (FileNotFoundException e) { writer.write("没有指定上传文件 上传失败"); }finally{ in.close(); out.close(); } } }
文件上传html代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"> <title>上传页面</title> </head> <body> <form action="UploadFile.do" method="post" enctype="multipart/form-data"> <h4>请选择文件:</h4><input type="file" name="filename"><br> <input type="submit" value="login"> </form> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.slim.min.js" ></script> <script type="text/javascript" src="js/bootstrap.min.js"></script> </body> </html>
文件下载Servlet代码:
package com.ysgncss; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/download.do") public class DownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public DownloadServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("application/pdf"); ServletContext servletContext=this.getServletContext(); String downloadFilename=request.getParameter("filename"); //建议游览器保存文件 response.setHeader("Content-Disposition", "attachment;filename="+downloadFilename); //得到真实路径 String realpath=servletContext.getRealPath("/download/"+downloadFilename); try { //获取文件输入流 InputStream in=new FileInputStream(new File(realpath)); //获取输出流 OutputStream out=response.getOutputStream(); int read=0; byte[] bytes=new byte[1024]; while((read=in.read(bytes))!=-1){ out.write(bytes, 0, read); } out.flush(); out.close(); in.close(); } catch (Exception e) { System.out.println(e.getMessage()); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
文件下载html代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"> <title>下载页面</title> </head> <body> <h1>点击<a href="download.do?filename=python.pdf">这里</a>下载</h1> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.slim.min.js" ></script> <script type="text/javascript" src="js/bootstrap.min.js"></script> </body> </html>
相关文章推荐
- Jsp/Servlet:实现文件上传与下载
- Jsp/Servlet:实现文件上传与下载
- 转载tangl_99的Servlet 实现文件上传下载--自己的一点心得
- jsp+servlet实现文件的上传和下载 运用了Apache Commons组件
- js调用applet实现和Servlet的数据和文件上传下载
- 【ZT】Jsp/Servlet:实现文件上传与下载【一】
- jsp+servlet+commons-fileupload-1.3.jar+commons-io-2.4.jar+jstl标签库实现文件上传与下载
- Jsp+Servlet实现文件上传下载——前台页面开发
- servlet实现图片预览、文件上传下载(转载)
- Servlet和Jsp实现原生的上传与下载文件
- jquery.uploadify-3.1+servlet实现多文件的上传和下载文件存储到BLOB中
- Jsp/Servlet:实现文件上传与下载 推荐
- jsp/servlet实现文件上传下载
- day20之用Servlet实现文件上传和下载(借助第三方开发包)
- servlet 实现 文件的上传与下载
- JSP/servlet实现文件上传下载和删除
- Servlet 实现文件的上传与下载
- 用SmartUpload实现文件的上传下载(在servlet中实现)
- Servlet方式实现文件的上传和下载
- 【ZT】Jsp/Servlet:实现文件上传与下载【二】