use of org.activityinfo.store.spi.BlobId in project activityinfo by bedatadriven.
the class XFormSubmissionResource method persist.
private void persist(AuthenticatedUser user, XFormInstance instance, AttachmentValue fieldValue) {
Attachment attachment = fieldValue.getValues().get(0);
if (attachment.getFilename() != null) {
try {
BodyPart bodyPart = ((XFormInstanceImpl) instance).findBodyPartByFilename(attachment.getFilename());
String mimeType = bodyPart.getContentType();
attachment.setMimeType(mimeType);
blobFieldStorageService.put(user, bodyPart.getDisposition(), mimeType, new BlobId(attachment.getBlobId()), instance.getFormClassId(), bodyPart.getInputStream());
} catch (MessagingException messagingException) {
LOGGER.log(Level.SEVERE, "Unable to parse input", messagingException);
throw new WebApplicationException(Response.status(BAD_REQUEST).build());
} catch (IOException ioException) {
LOGGER.log(Level.SEVERE, "Could not write attachment to GCS", ioException);
throw new WebApplicationException(Response.status(SERVICE_UNAVAILABLE).build());
}
}
}
use of org.activityinfo.store.spi.BlobId in project activityinfo by bedatadriven.
the class GcsBlobServlet method doPost.
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
List<FileItem> fileItems = getFileItems(request);
BlobId blobId = new BlobId(getFileItems(fileItems, "blobId").getString());
String mimeType = getFileItems(fileItems, "mimeType").getString();
String fileName = getFileItems(fileItems, "fileName").getString();
ResourceId resourceId = ResourceId.valueOf(getFileItems(fileItems, "resourceId").getString());
FileItem fileItem = getFileItems(fileItems, "file");
Preconditions.checkState(!Strings.isNullOrEmpty(blobId.asString()));
Preconditions.checkState(!Strings.isNullOrEmpty(resourceId.asString()));
service.put(authProvider.get(), "attachment; filename=\"" + fileName + "\"", mimeType, blobId, resourceId, fileItem.getInputStream());
} catch (WebApplicationException e) {
sendError(response, e);
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Error handling upload", e);
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
use of org.activityinfo.store.spi.BlobId in project activityinfo by bedatadriven.
the class GcsBlobServlet method doGet.
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
BlobId blobId = new BlobId(request.getParameter("blobId"));
ResourceId resourceId = ResourceId.valueOf(request.getParameter("resourceId"));
Preconditions.checkState(!Strings.isNullOrEmpty(blobId.asString()));
Preconditions.checkState(!Strings.isNullOrEmpty(resourceId.asString()));
AuthenticatedUser user = authProvider.get();
service.assertNotAnonymousUser(user);
service.assertHasAccess(user, blobId, resourceId);
service.assertBlobExists(blobId);
GcsFileMetadata metadata = GcsServiceFactory.createGcsService().getMetadata(new GcsFilename(service.getBucketName(), blobId.asString()));
response.setHeader("Content-Disposition", metadata.getOptions().getContentDisposition());
response.setContentType(metadata.getOptions().getMimeType());
BlobstoreServiceFactory.getBlobstoreService().serve(service.blobKey(blobId), response);
} catch (WebApplicationException e) {
sendError(response, e);
}
}
Aggregations