【JavaWeb】图片的上传与下载

1、上传(到服务器保存)

1.需要有一个表单 from,method=post请求
2.from标签的 encType属性值必须为 multipart/from-data

(encType=multipart/form-data 表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器)

3.在 from标签中使用 input(type=file)添加上传的文件
4.编写服务器代码(Servlet程序)接收,处理上传的数据

 
(需导入commons-fileupload.jar、commons-io.jar包)

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

      // 1.先判断上传的文件是否多段数据(只有是多段的数据,才是上传文件的)
      if(ServletFileUpload.isMultipartContent(req)){
          // 2.创建FileItemFactory工厂实现类
          FileItemFactory fileItemFactory = new DiskFileItemFactory();
          // 3.创建用于解析上传文件的工具类ServletFileUpload类
          ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
          // 4.调用解析方法解析上传的数据,得到每一个表单项FileItem
          try {
              List<FileItem> list = servletFileUpload.parseRequest(req);

              // 5.循环判断每一个表单项,是普通类型,还是上传的文件
              for (FileItem fileItem : list) {
                  if(fileItem.isFormField()){
                      // 普通表单项
                      System.out.println("表单项的name属性值" + fileItem.getFieldName());
                      System.out.println("表单项的value属性值" + fileItem.getString("UTF-8"));// 参数utf-8解决乱码问题
                  }else{
                      // 上传的文件
                      System.out.println("表单项的name属性值" + fileItem.getFieldName());
                      System.out.println("上传的文件名" + fileItem.getName());

                      fileItem.write(new File("/233.png"));
                  }
              }
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }


 }

 

2、下载(到本地)

 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      // 1.获取要下载的文件名
       String downloadFileName = "图片.png";

       // 2.读取要下载的文件内容(通过ServletContext对象可以读取)
       ServletContext servletContext = getServletContext();
       // "/" 被服务器解析表示为地址 http://ip:port/工程名/ 映射到代码的web目录
       InputStream resourceAsStream = servletContext.getResourceAsStream("/img/" + downloadFileName);

       // 4.在回传之前通过响应头告诉客户端返回的数据类型
       // 获取要下载的文件类型
       String mimeType = servletContext.getMimeType("/img/" + downloadFileName);
       System.out.println("下载的文件类型: " + mimeType);
       resp.setContentType(mimeType);

       // 5.告诉客户端收到的数据是用于下载使用(还是使用响应头)
       // Content-Disposition表示:收到的内容浏览器作出什么处理
       // attachment表示附件,表示下载使用
       // filename表示指定下载的文件名(下载的文件名可以任意)
       // resp.setHeader("Content-Disposition","attachment;filename=" + downloadFileName);
       // url编码是把内容(汉字转化为16进制的格式)
       resp.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode("中.png","UTF-8"));

       // 3.把下载的内容回传给客户端
       // 获取响应流的输出流
       ServletOutputStream outputStream = resp.getOutputStream();
       // 读取输入流中的数据,复制给输出流,输出给客户端
       IOUtils.copy(resourceAsStream,outputStream);

}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

り澄忆秋、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值