- 設定 Google Cloud Storage 專案:
- 在 Google Cloud Console 上建立一個新的專案。
- 開啟 Cloud Storage 服務。
- 創建一個新的存儲空間(Bucket)。
- 添加 Google Cloud Storage 依賴:
- 在
pom.xml
中添加 Google Cloud Storage 的 Maven 依賴。
xmlCopy code
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.120.0</version> <!-- 請確保使用最新的版本 -->
</dependency>
- 設定認證:
- 在 Google Cloud Console 中創建一個服務帳戶並下載 JSON 金鑰文件。
- 將 JSON 金鑰文件放置在您的 Spring Boot 專案中,通常是在
src/main/resources
目錄下。
- 在後端程式中進行檔案上傳:
- 在您的 Spring Boot 專案中創建一個服務或控制器類,用於處理檔案上傳請求。
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;
}
}
- 將 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.");
}
}
}
- 確保檔案存取權限設定正確:
- 在 Google Cloud Console 中確保 Bucket 的存取控制設定正確,以確保您的檔案能夠被正確地訪問。
- 測試:
- 部署您的 Spring Boot 應用程式,測試檔案上傳功能是否正常工作。