To integrate Alibaba Cloud Object Storage Service (OSS) into a Spring Boot project, start by defining configuraton properites in your application configuration file:
oss:
config:
endpoint: ${oss.config.endpoint}
access-key: ${oss.config.access-key}
secret-key: ${oss.config.secret-key}
bucket: ${oss.config.bucket}
Create a configuration properties class to bind these values:
@ConfigurationProperties(prefix = "oss.config")
@Data
public class OssConfigProperties {
private String endpoint;
private String accessKey;
private String secretKey;
private String bucket;
}
Develop an OSS interaction utility class with proper resource management:
@Slf4j
public class OssUploader {
private final String endpoint;
private final String accessKey;
private final String secretKey;
private final String bucket;
public OssUploader(String endpoint, String accessKey, String secretKey, String bucket) {
this.endpoint = endpoint;
this.accessKey = accessKey;
this.secretKey = secretKey;
this.bucket = bucket;
}
public String upload(byte[] fileData, String objectName) {
try (OSS ossClient = new OSSClientBuilder().build(endpoint, accessKey, secretKey)) {
ossClient.putObject(bucket, objectName, new ByteArrayInputStream(fileData));
return String.format("https://%s.%s/%s", bucket, endpoint, objectName);
} catch (OSSException | ClientException e) {
log.error("OSS operation failed: {}", e.getMessage());
throw new RuntimeException("File upload failed", e);
}
}
}
Register the utility as a Spring bean using configuration class:
@Configuration
public class OssBeanConfig {
@Bean
public OssUploader ossUploader(OssConfigProperties config) {
return new OssUploader(
config.getEndpoint(),
config.getAccessKey(),
config.getSecretKey(),
config.getBucket()
);
}
}
Implement a file upload endpoint in your controller:
@RestController
@RequestMapping("/api/files")
public class FileUploadController {
private final OssUploader uploader;
public FileUploadController(OssUploader uploader) {
this.uploader = uploader;
}
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
String originalName = file.getOriginalFilename();
String extension = originalName.substring(originalName.lastIndexOf('.'));
String fileName = UUID.randomUUID() + extension;
return uploader.upload(file.getBytes(), fileName);
}
}