愿景:"让编程不再难学,让技术与生活更加有趣"
更多架构课程请访问 xdclass.net
目录
第1集 新版javaweb的文件上传讲解
简介:讲解Javaweb文件上传
-
javaweb文件上传
- Web应用系统开发中,文件上传和下载功能是非常常用的功能,浏览器在上传的过程中是将文件以流的形式提交到服务器端的
-
前端开发 1)表单的提交方法必须是post 2)需要声明是一个文件上传组件 3)必须设置表单的enctype="multipart/form-data
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>小滴课堂文件上传样例</title> </head> <body> <form action="<%=request.getContextPath()%>/fileUpload" method="post" enctype="multipart/form-data"> 用户名:<input type="text" name="username"/> 头像:<input type="file" name="img"> <input type="submit" value="提交"> </form> </body> </html>
-
后端开发
@WebServlet("/fileUpload") @MultipartConfig public class FileUploadServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); System.out.println("username="+username); Part part = request.getPart("img"); //获取真实文件名称 String header = part.getHeader("content-disposition"); String realFileName = header.substring(header.indexOf("filename=")+10,header.length()-1); System.out.println("realFileName="+realFileName); //获取真实的文件内容 InputStream is = part.getInputStream(); //web-inf目录外界不能直接访问,如果文件机密性强则放这里 //String dir = this.getServletContext().getRealPath("/WEB-INF/file"); String dir = this.getServletContext().getRealPath("/file"); File dirFile = new File(dir); //如果目录不存在,则创建 if(!dirFile.exists()){ dirFile.mkdirs(); } String uniqueName = UUID.randomUUID()+realFileName; //文件流拷贝 //File file = new File(dir,realFileName); File file = new File(dir,uniqueName); FileOutputStream out = new FileOutputStream(file); byte[] buf = new byte[1024]; int len; while ((len = is.read(buf))!=-1 ){ out.write(buf,0,len); } out.close(); is.close(); //图片访问 request.getRequestDispatcher("/file/"+uniqueName).forward(request,response); } }
-
注意点:
- 考虑上传文件存储的目录
- 防止文件重名覆盖,防止一个目录下面出现太多文件,限制上传文件的最大值,上传的文件判断后缀名是否合法
-
互联网公司里面的文件服务器:
- 基本很少互联网公司把文件存储在javaweb项目里面,一个是性能,一个是成本
- 多数是会搭建专门的文件服务器,或者使用第三方的CDN,比如阿里云的OSS, 高级架构课程会讲这块知识点
第2集 javaweb核心之文件下载实战
简介:讲解 javaweb的文件下载讲解
-
javaweb文件下载
- 网站下载文件,这块也是很常用的,javaweb如何实现文件下载呢?
- 只需通过超链接即可实现,就是通过超链接,在连接地址里写上文件的路径,浏览器会自动打开该文件
- 普通的文本,图片等浏览器能直接显示内容的浏览器都能直接打开并显示
- 如果是浏览器无法打开的文件,比如exe等浏览器就会提示你下载改文件或者使用当前系统自带的工具打开该文件
-
后端开发
-
客户端发送请求给服务端告诉服务端需要下载的文件,服务端读取该文件转换为输入流,在通过outputstream响应给客户端,需要设置response的头信息
@WebServlet("/download") public class FileDownloadServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //客户端传递需要下载的文件名 String file = request.getParameter("file"); //获取文件在我们项目中的路径,发布到tomcat的实际路径 String path = request.getServletContext().getRealPath("/file/"); String filePath = path+file; FileInputStream fis = new FileInputStream(filePath); response.setCharacterEncoding("UTF-8"); //指明响应的配置信息,包含附件 response.setHeader("Content-Disposition","attachment; filename="+file); //如果文件名不包含中文可以不设置该项 //如果包含中文名,则需要设置编码,否则文件名下载后中文字符会乱码 //getBytes指定了编码的方式,ISO-8859-1指定了解码(读取)的方式,想要转换编码,就是先编码,再解码 //response.setHeader("Content-Disposition","attachment; filename="+new String(file.getBytes("gb2312"),"ISO-8859-1")); ServletOutputStream out = response.getOutputStream(); byte[] buf = new byte[1024]; int len; while ((len= fis.read(buf))!=-1){ out.write(buf,0,len); } out.close(); } }
-
-
前端开发
干货文档
<a href="<%=request.getContextPath()%>/download?file=test1.png">下载</a>
关注公众号发送:“CSDN干货文档” 即可领取