阅读量:0
要在Spring Boot项目中使用MinIO进行文件访问控制,你需要遵循以下步骤:
- 添加依赖
在你的pom.xml
文件中添加MinIO Java SDK的依赖:
<groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.3.0</version> </dependency>
- 配置MinIO客户端
在你的application.properties
或application.yml
文件中添加MinIO服务器的配置信息:
# application.properties minio.endpoint=http://localhost:9000 minio.access-key=your_access_key minio.secret-key=your_secret_key
或者
# application.yml minio: endpoint: http://localhost:9000 access-key: your_access_key secret-key: your_secret_key
- 创建MinIO配置类
创建一个名为MinioConfig
的配置类,用于初始化MinIO客户端:
import io.minio.MinioClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MinioConfig { @Value("${minio.endpoint}") private String endpoint; @Value("${minio.access-key}") private String accessKey; @Value("${minio.secret-key}") private String secretKey; @Bean public MinioClient minioClient() { return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } }
- 使用MinIO客户端进行文件访问控制
现在你可以在你的服务类中使用MinioClient
来进行文件访问控制。例如,你可以创建一个名为FileStorageService
的服务类,用于上传、下载和删除文件:
import io.minio.GetObjectArgs; import io.minio.PutObjectArgs; import io.minio.RemoveObjectArgs; import io.minio.errors.ErrorResponseException; import io.minio.errors.InsufficientDataException; import io.minio.errors.InternalException; import io.minio.errors.InvalidResponseException; import io.minio.errors.ServerException; import io.minio.errors.XmlParserException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; @Service public class FileStorageService { @Autowired private MinioClient minioClient; public void uploadFile(String bucketName, String objectName, MultipartFile file) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, InvalidResponseException, InternalException, XmlParserException, ServerException, ErrorResponseException { try (InputStream inputStream = file.getInputStream()) { PutObjectArgs putObjectArgs = PutObjectArgs.builder() .bucket(bucketName) .object(objectName) .stream(inputStream, file.getSize(), -1) .contentType(file.getContentType()) .build(); minioClient.putObject(putObjectArgs); } } public InputStream downloadFile(String bucketName, String objectName) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, InvalidResponseException, InternalException, XmlParserException, ServerException, ErrorResponseException { GetObjectArgs getObjectArgs = GetObjectArgs.builder() .bucket(bucketName) .object(objectName) .build(); return minioClient.getObject(getObjectArgs); } public void deleteFile(String bucketName, String objectName) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, InvalidResponseException, InternalException, XmlParserException, ServerException, ErrorResponseException { RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder() .bucket(bucketName) .object(objectName) .build(); minioClient.removeObject(removeObjectArgs); } }
- 在控制器中使用
FileStorageService
最后,在你的控制器中使用FileStorageService
来处理文件上传、下载和删除请求:
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, @RequestParam("bucketName") String bucketName, @RequestParam("objectName") String objectName) { try { fileStorageService.uploadFile(bucketName, objectName, file); return new ResponseEntity<>("File uploaded successfully", HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<>("Failed to upload file: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } @GetMapping("/download/{bucketName}/{objectName}") public ResponseEntity<?> downloadFile(@PathVariable("bucketName") String bucketName, @PathVariable("objectName") String objectName) { try { InputStream inputStream = fileStorageService.downloadFile(bucketName, objectName); return ResponseEntity.ok().body(inputStream.readAllBytes()); } catch (Exception e) { return new ResponseEntity<>("Failed to download file: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } @DeleteMapping("/delete/{bucketName}/{objectName}") public ResponseEntity<String> deleteFile(@PathVariable("bucketName") String bucketName, @PathVariable("objectName") String objectName) { try { fileStorageService.deleteFile(bucketName, objectName); return new ResponseEntity<>("File deleted successfully", HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<>("Failed to delete file: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } }
现在你已经成功地在Spring Boot项目中使用MinIO进行文件访问控制。你可以根据需要对这些示例代码进行修改和扩展。