学习内容:学习JavaWeb(Day41)

1、文件的上传
2、文件的查看
3、文件的下载
4、使用工具类上传文件
5、基于servlet3.0以上的文件上传


1、文件的上传

(1)实现文件的上传需要的依赖包
commons-fileupload.jar
commons-io.jar

(2)在jsp文件创建上传文件表单

<!--创建可以上传文件的表单需要声明enctype="multipart/form-data-->
<form class="form-horizontal" action="/fileUpload" method = "post" enctype="multipart/form-data"><div class="form-group"><label class="col-sm-2 control-label">文件描述:</label><div class="col-sm-10"><input type="text" name="desc" /></div></div><div class="form-group"><label class="col-sm-2 control-label">点击上传文件:</label><div class="col-sm-10"><input type="file" name="myFile" /></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><input type="submit" value="提交"></div></div>
</form>

(3)创建FileUploadServlet.java

@WebServlet("/fileUpload")
public class FileUploadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getRequestDispatcher("WEB-INF/views/file.jsp").forward(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");//判定当前提交表单是不是一个文件表单 是true  否falseboolean isMultipart = ServletFileUpload.isMultipartContent(request);if (isMultipart) {try {//构建factory对象用于ServletFileUpload构造方法中DiskFileItemFactory factory = new DiskFileItemFactory();//设置上传文件时用的临时空间ServletContext servletContext = this.getServletConfig().getServletContext();File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");//文件的临时目录factory.setSizeThreshold(1024); //设置临时空间大小factory.setRepository(repository);ServletFileUpload upload = new ServletFileUpload(factory);upload.setSizeMax(1024*1024*20);//设置表单提交所有内容总长度upload.setHeaderEncoding("UTF-8");//解决上传文件名的中文乱码//获取表单中所有的输入项                List<FileItem> fileItems = upload.parseRequest(request);for (FileItem item : fileItems) {String contentType = item.getContentType(); //获取上传的文件类型String fieldName = item.getFieldName();//获取控件name属性值String name = item.getName();//上传的文件的文件名称long size = item.getSize();//获取文件或文本大小//如果表单中不包含文件if(item.isFormField()){String value = item.getString("UTF-8");//tomcat容器默认采用了iso-8859-1的编码方法//可以反解码成二进制在解码//value = new String(value.getBytes("ISO8859-1"),"UTF-8");System.out.println(value);System.out.println("contentType:" + contentType + "filedName : "+ fieldName + "name: "+ name + "size:" + size);}else{//表单中包含文件System.out.println("contentType:" + contentType + "filedName : "+ fieldName + "name: "+ name + "size:" + size);//获取上传文件的后缀名int index = name.lastIndexOf(".");String suffixName = name.substring(index);//生成唯一文件名称String randomName = UUID.randomUUID().toString();String newName = randomName + suffixName;//构建目录File dir = new File("d:/img");if(!dir.exists()){dir.mkdir(); //创建单层目录 mkdirs() 创建多层目录}//构建文件File file = new File(dir,newName);InputStream is = item.getInputStream();OutputStream os = new FileOutputStream(file);BufferedInputStream bis = new BufferedInputStream(is);byte[] buffer = new byte[1024*1024];BufferedOutputStream bos = new BufferedOutputStream(os);int len = -1;while((len = bis.read(buffer)) != -1){bos.write(buffer,0,len);}bos.flush();bos.close();bis.close();}}} catch (FileUploadException e) {e.printStackTrace();}} else {response.sendError(404, "文件表单设置有误!");}}
}

2、文件的查看

(1)创建查看文件的jsp页面

<html>
<head><title>Title</title><link rel="stylesheet" href="/css/bootstrap.min.css">
</head>
<body>
<img src="/img/show" class="img-circle" alt="" width="100" height="100">
</body>
</html>

(2)创建ShowFileServlet.java文件

@WebServlet("/img/show")
public class ShowFileServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String dir = DirectoryUtil.FILE_DIR;//查看exe文件时进行下载,//查看word和excel文档时会下载一个zip包,想要查看需要下载插件File file = new File(dir + "研发1固定资产横向表7.16.xlsx");InputStream is = new FileInputStream(file);//输出流为response.getOutputStream()OutputStream outputStream = response.getOutputStream();int len = -1;while((len = is.read()) != -1){outputStream.write(len);}is.close();outputStream.close();}
}

3、文件的下载

(1)创建DownLoadServlet.java文件

@WebServlet("/fileDownload")
public class DownLoadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("multipart/form-data");File file = new File("d:/soft/typora-setup-x64.exe");//设置文件的长度,下载时会有进度条response.setContentLength(Long.valueOf(file.length()).intValue());String fileName = new String(file.getName().getBytes("UTF-8"),"ISO8859-1");//设置Content-Disposition,表示文件是被下载使用的。filename是下载的文件名response.setHeader("Content-Disposition","attachment;filename=\""+fileName+"\"");BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());int len = -1;while((len = bis.read()) != -1){bos.write(len);}bos.flush();bos.close();bis.close();}
}

4、使用工具类上传文件

(1)创建上传工具类

public class UploadUtil {public boolean upload(HttpServletRequest request) throws IOException, FileUploadException {boolean isMultipart = ServletFileUpload.isMultipartContent(request);if (isMultipart) {try {//构建factory对象用于ServletFileUpload构造方法中DiskFileItemFactory factory = new DiskFileItemFactory();//设置上传文件时用的临时空间File repository = new File("d:/temp");factory.setSizeThreshold(1024); //设置临时空间大小factory.setRepository(repository);ServletFileUpload upload = new ServletFileUpload(factory);upload.setSizeMax(1024*1024*10);//设置表单提交所有内容总长度//获取表单中所有的控件List<FileItem> fileItems = upload.parseRequest(request);for (FileItem item : fileItems) {String contentType = item.getContentType(); //获取上传的文件类型String fieldName = item.getFieldName();//获取控件name属性值String name = item.getName();//上传的文件的文件名称long size = item.getSize();//获取文件或文本大小if (item.isFormField()) {String value = item.getString();value = new String(value.getBytes("ISO8859-1"), "UTF-8");System.out.println(value);System.out.println("contentType:" + contentType + "filedName : " + fieldName + "name: " + name + "size:" + size);} else {System.out.println("contentType:" + contentType + "filedName : " + fieldName + "name: " + name + "size:" + size);//获取上传文件的后缀名int index = name.lastIndexOf(".");String suffixName = name.substring(index);//生成唯一文件名称String randomName = UUID.randomUUID().toString();String newName = randomName + suffixName;//构建目录File dir = new File("d:/img");if (!dir.exists()) {dir.mkdir(); //创建单层目录 mkdirs() 创建多层目录}//构建文件File file = new File(dir, newName);InputStream is = item.getInputStream();OutputStream os = new FileOutputStream(file);BufferedInputStream bis = new BufferedInputStream(is);byte[] buffer = new byte[1024 * 1024];BufferedOutputStream bos = new BufferedOutputStream(os);int len = -1;while ((len = bis.read(buffer)) != -1) {bos.write(buffer, 0, len);}bos.flush();bos.close();bis.close();}}} catch (Exception e) {throw new FileUploadException("文件上传异常", e);}return true;} else {return false;}}
}

(2)调用工具类

@WebServlet("/fileUpload")
public class FileUploadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getRequestDispatcher("WEB-INF/views/file.jsp").forward(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");UploadUtil uploadUtil = new UploadUtil();try {boolean result = uploadUtil.upload(request);if(!result){response.sendError(404,"表单设置有误!");}} catch (FileUploadException e) {e.printStackTrace();response.sendError(500,"文件上传异常");return;}
}

5、基于servlet3.0以上的文件上传

(1)增加注解@MultipartConfig

@WebServlet("/upload3")
@MultipartConfig(maxRequestSize = 10000,maxFileSize = 2000)//最大请求值,最大文件大小
public class FileUploadServlet3 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");String desc = request.getParameter("desc");System.out.println(desc);//上传文件只有一个时 Part file = request.getPart("myFile");Collection<Part> parts = request.getParts();//上传多个文件int count = 1;for (Part part : parts) {if (part.getName().equals("myFile")) {InputStream is = part.getInputStream();OutputStream os = new FileOutputStream(new File("d:/img/" + count + ".jpg"));int len = -1;while ((len = is.read()) != -1) {os.write(len);}os.flush();is.close();os.close();count++;}}}
}

学习日志day41(2021-09-03)(1、文件的上传 2、文件的查看 3、文件的下载 4、使用工具类上传文件 5、基于servlet3.0以上的文件上传 )相关推荐

  1. PHP文件上传,下载,Sql工具类!

    PHP文件上传,下载,Sql工具类! 对文件大小,文件类型 同名覆盖 中文转码的操作,可直接使用 前台 upload.html <!DOCTYPE html> <html> & ...

  2. Spring MVC-09循序渐进之文件上传(基于Servlet3.0+内置功能)

    概述 测试 源码 概述 Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload) 上篇博文我们说了基于Apache Commons FileUpload的 ...

  3. MD5工具类,提供字符串MD5加密(校验)、文件MD5值获取(校验)功能

    import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.Byt ...

  4. Spring MVC-09循序渐进之文件上传(基于Servlet3.0+Html5客户端上传文件)

    示例 测试 源码 虽然Servlet3.0+中上传文件,我们在服务端编程即可非常容易,但是用户体验却不是非常友好.单独的一个HTML表单并不能显示进度条,或者显示已经成功上传的文件数量. 不管是Jav ...

  5. Servlet3.0学习总结(三)——基于Servlet3.0的文件上传

    在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不 ...

  6. 【学习日志】2022.09.02 (C++)strcmp和stricmp、strcmpi三者之间的区别、C语言判断文件后缀名、ZENO Audio Update、TEN MINUTES PHYSICS

    (C++)strcmp和stricmp.strcmpi三者之间的区别 (strcmpi在Windows C标准库实现,但不在GNU C标准库实现) #include <string.h> ...

  7. 实习日志 (2021.09.13)

    2021.09.13星期一 今天把之前的算法题终于给弄明白了,并能够按照自己的思路去把他给完成,总结这个题目并不是很难,最重要的是要把链表给弄懂,一开始由于我对链表不是很熟悉,导致我在写该题目的时候花 ...

  8. C++一周学习总结(2021/05/03)

    1.友元 为了能访问某个类中的所有成员方法和成员数据 两种方式: ① 友元函数 在类的头文件中增加:friend 函数名(参数); [例]有一个计算机类,需要对这个计算机的CPU进行升级 头文件: # ...

  9. Java之~ 上传 图片压缩,阿里图片压缩,图片旋转方法工具类

    需要的jar jai_codec-1.1.3.jar,jai_core-1.1.3.jar,simpleimage-1.2.0.jar,metadata-extractor-2.3.1.jar(旋转时 ...

最新文章

  1. iOS下KVO使用过程中的陷阱
  2. body里写注释 postman_快速掌握Postman实现接口测试
  3. 面试整理(1):原生ajax
  4. python增删改查csv文件_Python--作业2--对员工信息文件,实现增删改查操作
  5. 电脑入门完全自学手册_室内设计CAD施工图识读手册
  6. 【技术+某度面经】Jenkins 内容+百度面经分享
  7. 25+ 个 jQuery 网页拖放操作的插件
  8. TypeScript - 字符串字面量类型
  9. 买电梯房几楼才是最好 几个最差楼层千万不能选
  10. 如何搭建远程访问服务器?外网访问数据库实操教程
  11. 时间管理-要抽专门的时间去做那些重要但不紧急的事情
  12. Linux中Sort命令详解
  13. PPT里面如何插入斜体文字
  14. 别人笑我太疯癫 唐伯虎诗词集
  15. Jetson nano (4GB B01) 系统安装,官方Demo测试 (目标检测、手势识别)
  16. 零基础想学大数据?你需要这个完整学习路线
  17. 30多个HTML5经典动画应用展示
  18. 在线课程推荐(国外篇)
  19. 信息流广告的核心是什么(信息流推广的核心操作和优化思路)
  20. edge浏览器如何把网页放到桌面_win10系统设置edge浏览器快捷方式放到桌面的操作方法...

热门文章

  1. L1-059 敲笨钟 C直观解法
  2. 企业移动设备管理(MDM)概述
  3. Pandown.js
  4. 从gitlab上下载项目
  5. swift单元测试(三)XCTest之UI测试UITest
  6. 通用产品演示系统,适合快速演示功能和开发
  7. 004.model视图模型
  8. 斯坦福大学 iOS 开发公开课总结
  9. JAVA获取Class对象及其Class类中的常用方法
  10. windows神器推荐 TreeSize