X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=org.argeo.app.servlet.odk%2Fsrc%2Forg%2Fargeo%2Fapp%2Fservlet%2Fodk%2FOdkSubmissionServlet.java;fp=org.argeo.app.servlet.odk%2Fsrc%2Forg%2Fargeo%2Fapp%2Fservlet%2Fodk%2FOdkSubmissionServlet.java;h=a5864d83336206d6e81c7229c05aea3febb3ef97;hp=25d00f45f4176bc0902706f9d75a3a5b148a9dd9;hb=73f619d9a87672e9f6434123b2a741bdaf2f27e2;hpb=ace1678a1f8d093801473cc84890d62546479b82 diff --git a/org.argeo.app.servlet.odk/src/org/argeo/app/servlet/odk/OdkSubmissionServlet.java b/org.argeo.app.servlet.odk/src/org/argeo/app/servlet/odk/OdkSubmissionServlet.java index 25d00f4..a5864d8 100644 --- a/org.argeo.app.servlet.odk/src/org/argeo/app/servlet/odk/OdkSubmissionServlet.java +++ b/org.argeo.app.servlet.odk/src/org/argeo/app/servlet/odk/OdkSubmissionServlet.java @@ -1,6 +1,8 @@ package org.argeo.app.servlet.odk; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.time.Instant; import java.time.ZoneId; import java.time.ZoneOffset; @@ -21,11 +23,12 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; +import org.argeo.api.cms.CmsLog; import org.argeo.api.cms.CmsSession; import org.argeo.app.core.SuiteUtils; +import org.argeo.app.image.ImageProcessor; import org.argeo.app.odk.OrxType; import org.argeo.app.xforms.FormSubmissionListener; -import org.argeo.api.cms.CmsLog; import org.argeo.cms.auth.RemoteAuthRequest; import org.argeo.cms.auth.RemoteAuthUtils; import org.argeo.cms.jcr.CmsJcrUtils; @@ -82,7 +85,22 @@ public class OdkSubmissionServlet extends HttpServlet { ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING); } else { - Node fileNode = JcrUtils.copyStreamAsFile(submission, part.getName(), part.getInputStream()); + Node fileNode; + if (part.getName().endsWith(".jpg")) { + // Fix metadata + Path temp = Files.createTempFile("image", ".jpg"); + try { + ImageProcessor imageProcessor = new ImageProcessor(() -> part.getInputStream(), + () -> Files.newOutputStream(temp)); + imageProcessor.process(); + fileNode = JcrUtils.copyStreamAsFile(submission, part.getName(), + Files.newInputStream(temp)); + } finally { + Files.deleteIfExists(temp); + } + } else { + fileNode = JcrUtils.copyStreamAsFile(submission, part.getName(), part.getInputStream()); + } String contentType = part.getContentType(); if (contentType != null) { fileNode.addMixin(NodeType.MIX_MIMETYPE);