Spring Boot的檔案上傳

超頻化石魚發表於2018-11-22

Spring Boot的檔案上傳並不需要單獨進行。當前端進行請求時,所要上傳的檔案作為請求的一個引數即可,與其他型別引數相同。服務端接收時,只需要對這個檔案引數使用MultipartFile型別接收即可。

由於檔案上傳的引數無法直接拼接到URL中,所以只能是post請求。

如圖,用postman來測試,使用post請求,在body中共傳入3個引數:

  • photo:圖片檔案。型別為File,Value選擇本地的檔案。
  • param0:字串。
  • param1:字串。

對於服務端,接收前端傳入的這3個引數:

@RequestMapping(value = "/upload")
public Boolean upload(@RequestParam("photo") MultipartFile file, @RequestParam("param0") String param0,  @RequestParam("param1") String param1) {
    if (file == null) return false;
    try{
        String basePath = "D:/save/";
        FileInputStream fileInputStream = (FileInputStream) (file.getInputStream());
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(basePath + file.getOriginalFilename()));
        byte[] bs = new byte[1024];
        int len;
        while ((len = fileInputStream.read(bs)) != -1) {
            bos.write(bs, 0, len);
        }
        bos.flush();
        bos.close();
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

如上,使用MultipartFile接收檔案,使用兩個String來接收param0和param1。

然後操作File儲存到本地即可。

 

通常的檔案處理思路是:將檔案儲存在本地,其基礎路徑儲存在配置檔案中,同時要在tomcat中對該路徑進行對映。然後將擴充套件路徑和檔名儲存在資料庫中。當前端進行請求時,從資料庫中取出擴充套件路徑資訊,傳送給前端。前端將擴充套件路徑與專案路徑進行拼裝來訪問。

例如,服務端的地址為192.168.1.11:8030,工程名為Template,圖片的儲存路徑是D:/test/資料夾:

1.在Spring Boot中配置basePath

basePath = D:/test/

2.開啟Tomcat的server.xml,在<Host>標籤下新增一個<Context>標籤用於對映:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

       <Context debug="0" docBase="D:/test" path="/Template/photo" reloadable="true"/>

       ...

</Host>

其作用是將docBase對映到path。這樣,當訪問Tomcat的path下的檔案時,Tomcat就會去docBase下尋找該檔案並返回。

3.前端向服務端傳送請求並上傳檔案hello.jpg

4.服務端收到前端請求,將前端上傳的檔案以MultipartFile接收,然後希望儲存在分類的資料夾下,例如:

D:/test/2018/11/hello.jpg

其中basePathD:/test/,所以擴充套件路徑為2018/11/hello.jpg。擴充套件路徑需要儲存在資料庫中。

服務端將接收到的MultipartFile以流的形式儲存到D:/test/2018/11/hello.jpg。然後將2018/11/hello.jpg存入資料庫。

5.前端向服務端請求圖片。

6.服務端從資料庫中取出圖片擴充套件路徑,為2018/11/hello.jpg。然後將該路徑返回給前端。

7.前端收到擴充套件路徑2018/11/hello.jpg,將服務端路徑與擴充套件路徑進行拼裝,為:

192.168.1.11:8030/Template/photo/2018/11/hello.jpg

然後使用該路徑請求圖片。

8.Tomcat收到請求,根據設定的對映路徑,將包含/Template/photo在內的左側路徑轉換為D:/test,於是圖片地址變為D:/test/2018/11/hello.jpg。這樣Tomcat就準確地取到了路徑,並返回給前端。

 

相關文章