Spring boot 与 从 AQS S3 读写文件的详细代码
好的,下面是一个详细的Spring Boot项目代码示例,展示如何与AWS S3进行读写文件操作。
步骤一:添加依赖
首先,在Spring Boot项目中添加AWS S3相关的依赖。如果你使用Maven,可以在 pom.xml 中添加以下依赖:
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.17.27</version> <!-- 请根据需要选择最新版本 -->
</dependency>
步骤二:配置AWS凭证和Bucket信息
在application.properties中配置AWS凭证和S3 Bucket的信息。
aws.s3.bucketName=your-bucket-name
aws.region=your-region
步骤三:创建S3服务类
创建一个服务类来封装与S3的交互逻辑,包括上传和下载文件的方法。
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.core.sync.ResponseBytes;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@Service
public class S3Service {
private final S3Client s3Client;
private final String bucketName;
public S3Service(@Value("${aws.s3.bucketName}") String bucketName,
@Value("${aws.region}") String region) {
this.s3Client = S3Client.builder()
.region(Region.of(region))
.credentialsProvider(DefaultCredentialsProvider.create())
.build();
this.bucketName = bucketName;
}
public void uploadFile(String keyName, File file) {
PutObjectRequest request = PutObjectRequest.builder()
.bucket(bucketName)
.key(keyName)
.build();
s3Client.putObject(request, RequestBody.fromFile(file));
}
public File downloadFile(String keyName) throws IOException {
GetObjectRequest request = GetObjectRequest.builder()
.bucket(bucketName)
.key(keyName)
.build();
ResponseBytes<GetObjectResponse> objectBytes = s3Client.getObjectAsBytes(request);
byte[] data = objectBytes.asByteArray();
File file = new File(keyName);
try (FileOutputStream fos = new FileOutputStream(file)) {
fos.write(data);
}
return file;
}
}
步骤四:在控制器中使用S3服务
创建一个控制器,用于处理文件上传和下载请求。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@RestController
@RequestMapping("/api/files")
public class FileController {
private final S3Service s3Service;
@Autowired
public FileController(S3Service s3Service) {
this.s3Service = s3Service;
}
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
File convFile = new File(file.getOriginalFilename());
try (FileOutputStream fos = new FileOutputStream(convFile)) {
fos.write(file.getBytes());
}
s3Service.uploadFile(file.getOriginalFilename(), convFile);
return "File uploaded successfully: " + file.getOriginalFilename();
}
@GetMapping("/download/{fileName}")
public String downloadFile(@PathVariable String fileName) throws IOException {
File file = s3Service.downloadFile(fileName);
// You can process the downloaded file here
return "File downloaded successfully: " + file.getName();
}
}
步骤五:启动Spring Boot应用程序
确保所有配置和代码都正确之后,你可以启动Spring Boot应用程序。你可以使用以下命令来启动应用程序:
mvn spring-boot:run
运行示例
-
上传文件:
你可以通过POST请求上传文件,示例如下:curl -X POST -F "file=@/path/to/your/file.txt" http://localhost:8080/api/files/upload -
下载文件:
你可以通过GET请求下载文件,示例如下:curl -X GET http://localhost:8080/api/files/download/file.txt
总结
以上示例展示了如何在Spring Boot中与AWS S3进行文件读写操作。通过上述步骤,你可以轻松实现文件的上传和下载功能。根据你的具体需求,可以进一步扩展和优化这些代码,例如处理异常、增加安全性、实现文件的删除等操作。确保在实际生产环境中,按照AWS最佳实践来配置和管理访问权限和安全性。
浙公网安备 33010602011771号