zoukankan      html  css  js  c++  java
  • springBoot之文件上传与下载

    注意:代码的编写是在建立Marven工程的基础上编写的

    比较简单,直接上代码:

    单文件上传的服务端的代码:

    @RequestMapping(value = "/testUploadFile", method = RequestMethod.POST)
      public void testUploadFile(HttpServletRequest req,
          MultipartHttpServletRequest multiReq) {
        // 获取上传文件的路径
        String uploadFilePath = multiReq.getFile("file1").getOriginalFilename();
        System.out.println("uploadFlePath:" + uploadFilePath);
        // 截取上传文件的文件名
        String uploadFileName = uploadFilePath.substring(
            uploadFilePath.lastIndexOf('\') + 1, uploadFilePath.indexOf('.'));
        System.out.println("multiReq.getFile()" + uploadFileName);
        // 截取上传文件的后缀
        String uploadFileSuffix = uploadFilePath.substring(
            uploadFilePath.indexOf('.') + 1, uploadFilePath.length());
        System.out.println("uploadFileSuffix:" + uploadFileSuffix);
        FileOutputStream fos = null;
        FileInputStream fis = null;
        try {
          fis = (FileInputStream) multiReq.getFile("file1").getInputStream();
          fos = new FileOutputStream(new File(".//uploadFiles//" + uploadFileName
              + ".")
              + uploadFileSuffix);
          byte[] temp = new byte[1024];
          int i = fis.read(temp);
          while (i != -1){
            fos.write(temp,0,temp.length);
            fos.flush();
            i = fis.read(temp);
          }
        } catch (IOException e) {
          e.printStackTrace();
        } finally {
          if (fis != null) {
            try {
              fis.close();
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
          if (fos != null) {
            try {
              fos.close();
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }
      }

    多文件上传服务端的代码:

    @RequestMapping(value = "testUploadFiles", method = RequestMethod.POST)
      @ResponseBody
      public void handleFileUpload(HttpServletRequest request) {
        List<MultipartFile> files = ((MultipartHttpServletRequest) request)
            .getFiles("file");
        MultipartFile file = null;
        BufferedOutputStream stream = null;
        for (int i = 0; i < files.size(); ++i) {
          file = files.get(i);
          if (!file.isEmpty()) {
            try {
              String uploadFilePath = file.getOriginalFilename();
              System.out.println("uploadFlePath:" + uploadFilePath);
              // 截取上传文件的文件名
              String uploadFileName = uploadFilePath
                  .substring(uploadFilePath.lastIndexOf('\') + 1,
                      uploadFilePath.indexOf('.'));
              System.out.println("multiReq.getFile()" + uploadFileName);
              // 截取上传文件的后缀
              String uploadFileSuffix = uploadFilePath.substring(
                  uploadFilePath.indexOf('.') + 1, uploadFilePath.length());
              System.out.println("uploadFileSuffix:" + uploadFileSuffix);
              stream = new BufferedOutputStream(new FileOutputStream(new File(
                  ".//uploadFiles//" + uploadFileName + "." + uploadFileSuffix)));
              byte[] bytes = file.getBytes();
              stream.write(bytes,0,bytes.length);
            } catch (Exception e) {
              e.printStackTrace();
            } finally {
              try {
                if (stream != null) {
                  stream.close();
                }
              } catch (IOException e) {
                e.printStackTrace();
              }
            }
          } else {
            System.out.println("上传文件为空");
          }
        }
        System.out.println("文件接受成功了");
      }

    下载文件服务端的代码:

     @RequestMapping(value = "/testDownload", method = RequestMethod.GET)
      public void testDownload(HttpServletResponse res) {
        String fileName = "upload.jpg";
        res.setHeader("content-type", "application/octet-stream");
        res.setContentType("application/octet-stream");
        res.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        OutputStream os = null;
        try {
          os = res.getOutputStream();
          bis = new BufferedInputStream(new FileInputStream(new File("d://"
              + fileName)));
          int i = bis.read(buff);
          while (i != -1) {
            os.write(buff, 0, buff.length);
            os.flush();
            i = bis.read(buff);
          }
        } catch (IOException e) {
          e.printStackTrace();
        } finally {
          if (bis != null) {
            try {
              bis.close();
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }
        System.out.println("success");
      }
    }

    浏览器端的界面代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <form action="http://localhost:8080/testUploadFile" method="POST" enctype="multipart/form-data">
        <p>单文件上传:</><br/>
        <input type="file" name="file1"/>
        <input type="submit" value = "上传"/>
    </form>
    <form method="POST" enctype="multipart/form-data" 
        action="http://localhost:8080/testUploadFiles">
        <p>多文件上传:</>
        <p>文件1:<input type="file" name="file" /></p>
        <p>文件2:<input type="file" name="file" /></p>
        <p><input type="submit" value="上传" /></p>
    </form>
    <a href="http://localhost:8080/testDownload">下载</a>
    </body>
    </html>
  • 相关阅读:
    Java正式day_06——数组排序
    别只知道策略模式+简单工厂,试试更香的策略模式+抽象工厂!
    图解连接阿里云(一)创建阿里云物联网平台产品和设备,使用MQTT.fx快速体验
    嵌入式交叉编译GDB,结合vscode图形化调试C和C++代码 coredump定位段错误
    内核链表之list_for_eacy_entry手绘图解
    makefile实验三 理解make工作的基本原则
    玩转Libmodbus(一) 搭建开发环境
    RT-Thread的C语言多态风格展示
    C++函数默认参数 详解
    杂类-边学边记
  • 原文地址:https://www.cnblogs.com/studyCenter/p/6665171.html
Copyright © 2011-2022 走看看