使用Spring Boot實現檔案上傳功能

省赚客开发者团队發表於2024-07-12

使用Spring Boot實現檔案上傳功能

大家好,我是微賺淘客系統3.0的小編,是個冬天不穿秋褲,天冷也要風度的程式猿!

在這篇文章中,我們將詳細介紹如何使用Spring Boot實現檔案上傳功能。這是一個常見的需求,無論是處理使用者上傳的圖片、文件,還是其他型別的檔案,瞭解並掌握檔案上傳的實現是非常重要的。接下來,我們將透過具體的程式碼示例來演示如何實現這一功能。

1. 建立Spring Boot專案

首先,我們需要建立一個Spring Boot專案。在你的IDE中選擇建立一個新的Spring Boot專案,確保選擇以下依賴項:

  • Spring Web
  • Spring Boot DevTools

專案建立完成後,專案結構如下:

src/
|-- main/
|   |-- java/
|   |   `-- cn/
|   |       `-- juwatech/
|   |           `-- fileupload/
|   |               |-- FileUploadApplication.java
|   |               `-- controller/
|   |                   `-- FileUploadController.java
|   `-- resources/
|       |-- application.properties
|       `-- static/
|-- test/
    `-- java/

2. 配置檔案

application.properties檔案中,新增以下配置來指定檔案上傳的儲存路徑:

file.upload-dir=uploads

3. 建立檔案上傳控制器

接下來,我們將建立一個控制器類FileUploadController,來處理檔案上傳請求。

package cn.juwatech.fileupload.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@RestController
public class FileUploadController {

    @Value("${file.upload-dir}")
    private String uploadDir;

    @PostMapping("/upload")
    public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {
        String fileName = StringUtils.cleanPath(file.getOriginalFilename());
        try {
            if (file.isEmpty()) {
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("File is empty");
            }

            // 將檔案儲存到目標目錄
            Path targetLocation = Paths.get(uploadDir).toAbsolutePath().normalize().resolve(fileName);
            Files.copy(file.getInputStream(), targetLocation);

            return ResponseEntity.ok("File uploaded successfully: " + fileName);
        } catch (IOException ex) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Could not upload the file: " + fileName);
        }
    }
}

4. 啟動類

最後,建立主啟動類FileUploadApplication

package cn.juwatech.fileupload;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class FileUploadApplication {
    public static void main(String[] args) {
        SpringApplication.run(FileUploadApplication.class, args);
    }
}

5. 測試檔案上傳

啟動Spring Boot應用程式,訪問http://localhost:8080/upload,你可以使用工具如Postman來測試檔案上傳功能。選擇POST方法並上傳檔案:

POST /upload
Content-Type: multipart/form-data
Body: file=<選擇要上傳的檔案>

6. 完整程式碼示例

以下是整個專案的程式碼結構及內容:

application.properties

file.upload-dir=uploads

FileUploadController.java

package cn.juwatech.fileupload.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@RestController
public class FileUploadController {

    @Value("${file.upload-dir}")
    private String uploadDir;

    @PostMapping("/upload")
    public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {
        String fileName = StringUtils.cleanPath(file.getOriginalFilename());
        try {
            if (file.isEmpty()) {
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("File is empty");
            }

            Path targetLocation = Paths.get(uploadDir).toAbsolutePath().normalize().resolve(fileName);
            Files.copy(file.getInputStream(), targetLocation);

            return ResponseEntity.ok("File uploaded successfully: " + fileName);
        } catch (IOException ex) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Could not upload the file: " + fileName);
        }
    }
}

FileUploadApplication.java

package cn.juwatech.fileupload;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class FileUploadApplication {
    public static void main(String[] args) {
        SpringApplication.run(FileUploadApplication.class, args);
    }
}

至此,我們已經成功實現了一個簡單的Spring Boot檔案上傳功能。你可以根據實際需求,進一步擴充套件和最佳化這個功能,例如新增檔案型別和大小的驗證,提供更多的檔案處理選項等。

著作權歸聚娃科技微賺淘客系統開發者團隊,轉載請註明出處!

相關文章