Search in sources :

Example 1 with BlobId

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());
        }
    }
}
Also used : BodyPart(javax.mail.BodyPart) MessagingException(javax.mail.MessagingException) XFormInstanceImpl(org.activityinfo.server.endpoint.odk.xform.XFormInstanceImpl) Attachment(org.activityinfo.model.type.attachment.Attachment) IOException(java.io.IOException) BlobId(org.activityinfo.store.spi.BlobId)

Example 2 with BlobId

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);
    }
}
Also used : FileItem(org.apache.commons.fileupload.FileItem) WebApplicationException(javax.ws.rs.WebApplicationException) ResourceId(org.activityinfo.model.resource.ResourceId) BlobId(org.activityinfo.store.spi.BlobId) ServletException(javax.servlet.ServletException) IOException(java.io.IOException) WebApplicationException(javax.ws.rs.WebApplicationException) FileUploadException(org.apache.commons.fileupload.FileUploadException)

Example 3 with BlobId

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);
    }
}
Also used : WebApplicationException(javax.ws.rs.WebApplicationException) ResourceId(org.activityinfo.model.resource.ResourceId) BlobId(org.activityinfo.store.spi.BlobId) AuthenticatedUser(org.activityinfo.legacy.shared.AuthenticatedUser) GcsFileMetadata(com.google.appengine.tools.cloudstorage.GcsFileMetadata) GcsFilename(com.google.appengine.tools.cloudstorage.GcsFilename)

Aggregations

BlobId (org.activityinfo.store.spi.BlobId)3 IOException (java.io.IOException)2 WebApplicationException (javax.ws.rs.WebApplicationException)2 ResourceId (org.activityinfo.model.resource.ResourceId)2 GcsFileMetadata (com.google.appengine.tools.cloudstorage.GcsFileMetadata)1 GcsFilename (com.google.appengine.tools.cloudstorage.GcsFilename)1 BodyPart (javax.mail.BodyPart)1 MessagingException (javax.mail.MessagingException)1 ServletException (javax.servlet.ServletException)1 AuthenticatedUser (org.activityinfo.legacy.shared.AuthenticatedUser)1 Attachment (org.activityinfo.model.type.attachment.Attachment)1 XFormInstanceImpl (org.activityinfo.server.endpoint.odk.xform.XFormInstanceImpl)1 FileItem (org.apache.commons.fileupload.FileItem)1 FileUploadException (org.apache.commons.fileupload.FileUploadException)1