use of org.craftercms.studio.model.aws.s3.S3Item in project studio by craftercms.
the class AwsS3ServiceImpl method listItems.
/**
* {@inheritDoc}
*/
@Override
@HasPermission(type = DefaultPermission.class, action = "s3 read")
public List<S3Item> listItems(@ValidateStringParam(name = "siteId") @ProtectedResourceId("siteId") String siteId, @ValidateStringParam(name = "profileId") String profileId, @ValidateStringParam(name = "path") String path, @ValidateStringParam(name = "type") String type) throws AwsException {
S3Profile profile = getProfile(siteId, profileId);
AmazonS3 client = getS3Client(profile);
List<S3Item> items = new LinkedList<>();
Mimetypes mimetypes = Mimetypes.getInstance();
MimeType filerType = StringUtils.isEmpty(type) || StringUtils.equals(type, ITEM_FILTER) ? MimeTypeUtils.ALL : new MimeType(type);
String prefix = StringUtils.isEmpty(path) ? path : normalizePrefix(path);
ListObjectsV2Request request = new ListObjectsV2Request().withBucketName(profile.getBucketName()).withPrefix(prefix).withDelimiter(delimiter);
ListObjectsV2Result result;
do {
result = client.listObjectsV2(request);
result.getCommonPrefixes().stream().map(p -> new S3Item(StringUtils.removeEnd(StringUtils.removeStart(p, prefix), delimiter), p, true)).forEach(items::add);
result.getObjectSummaries().stream().filter(o -> !StringUtils.equals(o.getKey(), prefix) && MimeType.valueOf(mimetypes.getMimetype(o.getKey())).isCompatibleWith(filerType)).map(o -> new S3Item(StringUtils.removeStart(o.getKey(), prefix), createUrl(profileId, o.getKey()), false)).forEach(items::add);
request.setContinuationToken(result.getNextContinuationToken());
} while (result.isTruncated());
return items;
}
use of org.craftercms.studio.model.aws.s3.S3Item in project studio by craftercms.
the class AwsS3ServiceImpl method uploadItem.
/**
* {@inheritDoc}
*/
@Override
@HasPermission(type = DefaultPermission.class, action = "s3 write")
public S3Item uploadItem(@ValidateStringParam(name = "siteId") @ProtectedResourceId("siteId") String siteId, @ValidateStringParam(name = "profileId") String profileId, @ValidateStringParam(name = "path") String path, @ValidateStringParam(name = "filename") String filename, InputStream content) throws AwsException {
S3Profile profile = getProfile(siteId, profileId);
AmazonS3 s3Client = getS3Client(profile);
String inputBucket = profile.getBucketName();
String key = StringUtils.isNotEmpty(path) ? normalizePrefix(path) + filename : filename;
AwsUtils.uploadStream(inputBucket, key, s3Client, partSize, filename, content);
return new S3Item(filename, createUrl(profileId, key), false);
}
use of org.craftercms.studio.model.aws.s3.S3Item in project studio by craftercms.
the class AwsS3Controller method uploadItem.
/**
* Upload a file to an S3 bucket.
* @param request the request
* @return the item uploaded
* @throws IOException if there is any error reading the content of the file
* @throws InvalidParametersException if there is any error parsing the request
* @throws AwsException if there is any error connecting to S3
*/
@PostMapping("/upload")
public ResultOne<S3Item> uploadItem(HttpServletRequest request) throws IOException, InvalidParametersException, AwsException {
if (ServletFileUpload.isMultipartContent(request)) {
ResultOne<S3Item> result = new ResultOne<>();
try {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterator = upload.getItemIterator(request);
String siteId = null;
String profileId = null;
String path = null;
while (iterator.hasNext()) {
FileItemStream item = iterator.next();
String name = item.getFieldName();
try (InputStream stream = item.openStream()) {
if (item.isFormField()) {
switch(name) {
case REQUEST_PARAM_SITEID:
siteId = Streams.asString(stream);
break;
case REQUEST_PARAM_PROFILE_ID:
profileId = Streams.asString(stream);
break;
case REQUEST_PARAM_PATH:
path = Streams.asString(stream);
default:
}
} else {
String filename = item.getName();
if (StringUtils.isNotEmpty(filename)) {
filename = FilenameUtils.getName(filename);
}
result.setEntity(RESULT_KEY_ITEM, s3Service.uploadItem(siteId, profileId, path, filename, stream));
result.setResponse(ApiResponse.OK);
}
}
}
return result;
} catch (FileUploadException e) {
throw new InvalidParametersException("The request body is invalid");
}
} else {
throw new InvalidParametersException("The request is not multipart");
}
}
Aggregations