栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

文件上传与下载

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

文件上传与下载

本文主要是用javaweb中Servlet实现 文件上传流程
  1. 需要的jar包
 
      commons-io
      commons-io
      2.6
    
    
      commons-fileupload
      commons-fileupload
      1.4
    
    
      javax.servlet
      servlet-api
      2.5
    
  1. 写个表单
头像:
  1. 配置servlet

      
        fileUpLoad
        cn.pdsu.FileUpLoad
      
      
        fileUpLoad
        /fileUpLoad
      
    

    4.业务代码分析(接受上传文件数据)

     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
            //获取请求内容的输入流
            ServletInputStream inputStream = req.getInputStream();
            //创建一个缓冲区供读取文件使用
            byte[] buffer=new byte[1024000];
            //从输入流中,读取buffer个字节,如果一个文件10000b,buffer设置的1000b,那么只需要执行10次就可以读取完
            int read = inputStream.read(buffer);
            //将内容以字符串接收
            String str=new String(buffer,0,read);
            System.out.println(str);
        }
    
    

    打印str结果如下,上传的图片被分析成字节数据打印

    1. 主代码

      package cn.pdsu;
      
      import org.apache.commons.fileupload.FileItem;
      import org.apache.commons.fileupload.FileItemFactory;
      import org.apache.commons.fileupload.FileUploadException;
      import org.apache.commons.fileupload.disk.DiskFileItemFactory;
      import org.apache.commons.fileupload.servlet.ServletFileUpload;
      
      import javax.servlet.ServletException;
      import javax.servlet.ServletInputStream;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.File;
      import java.io.IOException;
      import java.io.InputStream;
      import java.util.List;
      
      public class FileUpLoad extends HttpServlet {
      
      
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
      //先判断上传数据是否是多段数据,只有多段数据才是文件上传的
                  req.setCharacterEncoding("UTF-8");
               if (ServletFileUpload.isMultipartContent(req)){
                  //工厂实现类
                   FileItemFactory fileItemFactory=new DiskFileItemFactory();
                   //用于解析上传数据的工具类
                  ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
                  //解析上传的数据,得到每一个表单项fileitem
                   try {
                     List list= servletFileUpload.parseRequest(req);
                       for (FileItem fileItem: list) {
                           if (fileItem.isFormField()){
                               //普通表单项
                               System.out.println("name属性值"+fileItem.getFieldName());
                               System.out.println("value属性值"+fileItem.getString("UTF-8"));
                           }else {
                               //上传的文件
                               System.out.println("name属性值"+fileItem.getFieldName());
                               System.out.println("上传的文件名" +fileItem.getString());
                               //文件保存位置
                               File file=new File("e:\"+fileItem.getName());
                               fileItem.write(file);
                           }
                       }
                   } catch (Exception e) {
                       e.printStackTrace();
                   }
               }
      
          }
      
      
      }
      
      
      文件下载 流程

      常用API

      response.getOutputStream();
      servletContext.getResourceAsStream();
      servletContext.getMimeType();
      response.setContentType();
      
      response.setHeader("Content-Disposition","attachment; fileName=文件名");
      这个响应头告诉浏览器这是需要下载的,attachment表示附件,也就是下载的一个文件
      
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              //1.获取要下载的文件名
              String downname="smile.jpg";
              //2.获取要下载的文件内容(通过servletContext对象获取)
              ServletContext servletContext=getServletContext();
                 //获取下载内容类型
              String mimeType = servletContext.getMimeType("/file/" + downname);
              System.out.println("下载的文件类型: "+mimeType);
              //3.回传前通过响应头告诉客户端返回的数据类型
              resp.setContentType(mimeType);
      
              InputStream inputStream = servletContext.getResourceAsStream("/file/" + downname);
      
              //获取响应的输出流
              OutputStream outputStream=resp.getOutputStream();
              //4.把下载的文件内容回传给客户端
              //读取输入流中的全部数据复制给输出流,输出给客户端
              IOUtils.copy(inputStream,outputStream);
      
              //还要告诉客户端收到的数据是用于下载使用
              resp.setHeader("Content-Disposition" , "attachment; filename=smile.jpg");
          }
      
      
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/583765.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号