1. 設定 Google Cloud Storage 專案
  2. 添加 Google Cloud Storage 依賴
xmlCopy code
<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-storage</artifactId>
    <version>1.120.0</version> <!-- 請確保使用最新的版本 -->
</dependency>

  1. 設定認證
  2. 在後端程式中進行檔案上傳
javaCopy code
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;

@Service
public class FileStorageService {

    private final String BUCKET_NAME = "your-bucket-name"; // 將這裡替換為您在 GCS 上的 Bucket 名稱

    private final Storage storage;

    public FileStorageService() {
        storage = StorageOptions.getDefaultInstance().getService();
    }

    public String uploadFile(MultipartFile file) throws IOException {
        String fileName = generateFileName(file.getOriginalFilename());
        BlobId blobId = BlobId.of(BUCKET_NAME, fileName);
        Blob blob = storage.create(BlobInfo.newBuilder(blobId).build(), file.getBytes());
        return blob.getMediaLink();
    }

    private String generateFileName(String originalFileName) {
        return UUID.randomUUID().toString() + "-" + originalFileName;
    }
}

  1. 將 Spring Boot 控制器使用 FileStorageService
javaCopy code
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;

@RestController
@RequestMapping("/files")
public class FileController {

    @Autowired
    private FileStorageService fileStorageService;

    @PostMapping("/upload")
    public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
        try {
            String fileUrl = fileStorageService.uploadFile(file);
            return ResponseEntity.ok(fileUrl);
        } catch (IOException e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to upload file.");
        }
    }
}

  1. 確保檔案存取權限設定正確
  2. 測試