129 lines
4.2 KiB
Java
129 lines
4.2 KiB
Java
package app.mealsmadeeasy.api.s3;
|
|
|
|
import io.minio.*;
|
|
import io.minio.errors.*;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.security.InvalidKeyException;
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
|
@Component
|
|
public class MinioS3Manager implements S3Manager {
|
|
|
|
@Value("${app.mealsmadeeasy.api.minio.endpoint}")
|
|
private String endpoint;
|
|
|
|
@Value("${app.mealsmadeeasy.api.minio.accessKey}")
|
|
private String accessKey;
|
|
|
|
@Value("${app.mealsmadeeasy.api.minio.secretKey}")
|
|
private String secretKey;
|
|
|
|
@Override
|
|
public InputStream load(String bucket, String objectName) throws IOException {
|
|
try (final MinioClient client = MinioClient.builder()
|
|
.endpoint(this.endpoint)
|
|
.credentials(this.accessKey, this.secretKey)
|
|
.build()
|
|
) {
|
|
return client.getObject(GetObjectArgs.builder()
|
|
.bucket(bucket)
|
|
.object(objectName)
|
|
.build());
|
|
} catch (Exception e) {
|
|
throw new IOException(e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String store(
|
|
String bucketName,
|
|
String filename,
|
|
String mimeType,
|
|
InputStream inputStream,
|
|
long objectSize
|
|
) throws IOException {
|
|
try (final MinioClient client = MinioClient.builder()
|
|
.endpoint(this.endpoint)
|
|
.credentials(this.accessKey, this.secretKey)
|
|
.build()) {
|
|
final boolean bucketExists = client.bucketExists(BucketExistsArgs.builder()
|
|
.bucket(bucketName)
|
|
.build());
|
|
if (!bucketExists) {
|
|
client.makeBucket(MakeBucketArgs.builder()
|
|
.bucket(bucketName)
|
|
.build());
|
|
}
|
|
|
|
final ObjectWriteResponse response = client.putObject(
|
|
PutObjectArgs.builder()
|
|
.bucket(bucketName)
|
|
.stream(inputStream, objectSize, -1)
|
|
.contentType(mimeType)
|
|
.object(filename)
|
|
.build()
|
|
);
|
|
return response.object();
|
|
} catch (ErrorResponseException | XmlParserException | InsufficientDataException | InternalException |
|
|
InvalidKeyException | InvalidResponseException | NoSuchAlgorithmException | ServerException e) {
|
|
throw new IOException(e);
|
|
} catch (Exception minioBuildException) {
|
|
throw new RuntimeException(minioBuildException);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void delete(String bucketName, String objectName) throws IOException {
|
|
try (final MinioClient client = MinioClient.builder()
|
|
.endpoint(this.endpoint)
|
|
.credentials(this.accessKey, this.secretKey)
|
|
.build()) {
|
|
client.removeObject(
|
|
RemoveObjectArgs.builder()
|
|
.bucket(bucketName)
|
|
.object(objectName)
|
|
.build()
|
|
);
|
|
} catch (ErrorResponseException | InsufficientDataException | InternalException | InvalidKeyException |
|
|
InvalidResponseException | NoSuchAlgorithmException | ServerException | XmlParserException e) {
|
|
throw new IOException(e);
|
|
} catch (Exception minioBuildException) {
|
|
throw new RuntimeException(minioBuildException);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String getUrl(String bucketName, String objectName) {
|
|
return this.endpoint + "/" + bucketName + "/" + objectName;
|
|
}
|
|
|
|
public String getEndpoint() {
|
|
return this.endpoint;
|
|
}
|
|
|
|
public void setEndpoint(String endpoint) {
|
|
this.endpoint = endpoint;
|
|
}
|
|
|
|
public String getAccessKey() {
|
|
return this.accessKey;
|
|
}
|
|
|
|
public void setAccessKey(String accessKey) {
|
|
this.accessKey = accessKey;
|
|
}
|
|
|
|
public String getSecretKey() {
|
|
return this.secretKey;
|
|
}
|
|
|
|
public void setSecretKey(String secretKey) {
|
|
this.secretKey = secretKey;
|
|
}
|
|
|
|
}
|