溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring Boot實(shí)現(xiàn)文件上傳示例代碼

發(fā)布時(shí)間:2020-08-27 12:31:06 來源:腳本之家 閱讀:142 作者:catoop 欄目:編程語言

使用SpringBoot進(jìn)行文件上傳的方法和SpringMVC差不多,本文單獨(dú)新建一個(gè)最簡單的DEMO來說明一下。

主要步驟包括:

1、創(chuàng)建一個(gè)springboot項(xiàng)目工程,本例名稱(demo-uploadfile)。

2、配置 pom.xml 依賴。

3、創(chuàng)建和編寫文件上傳的 Controller(包含單文件上傳和多文件上傳)。

4、創(chuàng)建和編寫文件上傳的 HTML 測試頁面。

5、文件上傳相關(guān)限制的配置(可選)。

6、運(yùn)行測試。

項(xiàng)目工程截圖如下:

Spring Boot實(shí)現(xiàn)文件上傳示例代碼

文件代碼:

  <dependencies>

    <!-- spring boot web支持 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- thmleaf模板依賴. -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
package com.example.controller;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

/**
 * 文件上傳的Controller
 * 
 * @author 單紅宇(CSDN CATOOP)
 * @create 2017年3月11日
 */
@Controller
public class FileUploadController {

  // 訪問路徑為:http://ip:port/upload
  @RequestMapping(value = "/upload", method = RequestMethod.GET)
  public String upload() {
    return "/fileupload";
  }

  // 訪問路徑為:http://ip:port/upload/batch
  @RequestMapping(value = "/upload/batch", method = RequestMethod.GET)
  public String batchUpload() {
    return "/mutifileupload";
  }

  /**
   * 文件上傳具體實(shí)現(xiàn)方法(單文件上傳)
   *
   * @param file
   * @return
   * 
   * @author 單紅宇(CSDN CATOOP)
   * @create 2017年3月11日
   */
  @RequestMapping(value = "/upload", method = RequestMethod.POST)
  @ResponseBody
  public String upload(@RequestParam("file") MultipartFile file) {
    if (!file.isEmpty()) {
      try {
        // 這里只是簡單例子,文件直接輸出到項(xiàng)目路徑下。
        // 實(shí)際項(xiàng)目中,文件需要輸出到指定位置,需要在增加代碼處理。
        // 還有關(guān)于文件格式限制、文件大小限制,詳見:中配置。
        BufferedOutputStream out = new BufferedOutputStream(
            new FileOutputStream(new File(file.getOriginalFilename())));
        out.write(file.getBytes());
        out.flush();
        out.close();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
        return "上傳失敗," + e.getMessage();
      } catch (IOException e) {
        e.printStackTrace();
        return "上傳失敗," + e.getMessage();
      }
      return "上傳成功";
    } else {
      return "上傳失敗,因?yàn)槲募强盏?";
    }
  }

  /**
   * 多文件上傳 主要是使用了MultipartHttpServletRequest和MultipartFile
   *
   * @param request
   * @return
   * 
   * @author 單紅宇(CSDN CATOOP)
   * @create 2017年3月11日
   */
  @RequestMapping(value = "/upload/batch", method = RequestMethod.POST)
  public @ResponseBody String batchUpload(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 {
          byte[] bytes = file.getBytes();
          stream = new BufferedOutputStream(new FileOutputStream(new File(file.getOriginalFilename())));
          stream.write(bytes);
          stream.close();
        } catch (Exception e) {
          stream = null;
          return "You failed to upload " + i + " => " + e.getMessage();
        }
      } else {
        return "You failed to upload " + i + " because the file was empty.";
      }
    }
    return "upload successful";
  }
}

package com.example.configuration;

import javax.servlet.MultipartConfigElement;

import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;

/**
 * 文件上傳配置
 * 
 * @author 單紅宇(CSDN CATOOP)
 * @create 2017年3月11日
 */
public class FileUploadConfiguration {

  @Bean
  public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    // 設(shè)置文件大小限制 ,超出設(shè)置頁面會拋出異常信息,
    // 這樣在文件上傳的地方就需要進(jìn)行異常信息的處理了;
    factory.setMaxFileSize("256KB"); // KB,MB
    /// 設(shè)置總上傳數(shù)據(jù)總大小
    factory.setMaxRequestSize("512KB");
    // Sets the directory location where files will be stored.
    // factory.setLocation("路徑地址");
    return factory.createMultipartConfig();
  }
}

@SpringBootApplication
public class DemoUploadfileApplication {

  public static void main(String[] args) {
    SpringApplication.run(DemoUploadfileApplication.class, args);
  }
}
<!DOCTYPE html>
<html>
<head>
<title>文件上傳示例</title>
</head>
<body>
  <h3>文件上傳示例</h3>
  <hr/>
  <form method="POST" enctype="multipart/form-data" action="/upload">
    <p>
      文件:<input type="file" name="file" />
    </p>
    <p>
      <input type="submit" value="上傳" />
    </p>
  </form>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>批量文件上傳示例</title>
</head>
<body>
  <h3>批量文件上傳示例</h3>
  <hr/>
  <form method="POST" enctype="multipart/form-data"
    action="/upload/batch">
    <p>
      文件1:<input type="file" name="file" />
    </p>
    <p>
      文件2:<input type="file" name="file" />
    </p>
    <p>
      文件3:<input type="file" name="file" />
    </p>
    <p>
      <input type="submit" value="上傳" />
    </p>
  </form>
</body>
</html>

最后啟動服務(wù),訪問 http://localhost:8080/upload 和 http://localhost:8080/upload/batch 測試文件上傳。

Demo源代碼下載地址:uploadfile_jb51.rar

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI