Mercurial > dive4elements > river
diff flys-client/src/main/java/org/dive4elements/river/client/server/FileUploadServiceImpl.java @ 5834:f507086aa94b
Repaired internal references.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 12:31:32 +0200 |
parents | flys-client/src/main/java/de/intevation/flys/client/server/FileUploadServiceImpl.java@04ccec566689 |
children | 821a02bbfb4e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/org/dive4elements/river/client/server/FileUploadServiceImpl.java Thu Apr 25 12:31:32 2013 +0200 @@ -0,0 +1,119 @@ +package de.intevation.flys.client.server; + +import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; +import de.intevation.artifacts.httpclient.exceptions.ConnectionException; +import de.intevation.artifacts.httpclient.http.HttpClient; +import de.intevation.artifacts.httpclient.http.HttpClientImpl; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.fileupload.FileItemIterator; +import org.apache.commons.fileupload.FileItemStream; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +public class FileUploadServiceImpl +extends HttpServlet +{ + private static final Logger logger = Logger.getLogger(FileUploadServiceImpl.class); + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) { + logger.debug("handling post request."); + + String url = getServletContext().getInitParameter("server-url"); + + Document request = createFileXML(req); + + if (request == null) { + return; + } + HttpClient client = new HttpClientImpl(url); + + try { + Document result = client.callService(url, "fileupload", request); + + PrintWriter respWriter = resp.getWriter(); + respWriter.write("<html><link href='FLYS.css' rel='stylesheet' type='text/css'>"); + respWriter.write("<body><div style='font-face: Arial,Verdana,sans-serif; font-size: 11px'>"); + + if (result == null) { + logger.warn("FileUpload service returned no result."); + respWriter.write("FileUpload service returned no result"); + } + else { + String status = result.getElementsByTagName("status") + .item(0).getTextContent(); + respWriter.write(status); + } + + respWriter.write("</div></body></html>"); + respWriter.flush(); + + return; + } + catch (ConnectionException ce) { + logger.error(ce, ce); + } + catch (IOException e) { + logger.error(e, e); + } + } + + + protected Document createFileXML(HttpServletRequest req) { + ServletFileUpload upload = new ServletFileUpload(); + + try{ + FileItemIterator iter = upload.getItemIterator(req); + + while (iter.hasNext()) { + FileItemStream item = iter.next(); + InputStream stream = item.openStream(); + + // Process the input stream + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int len; + byte[] buffer = new byte[stream.available()]; + while ((len = stream.read(buffer, 0, buffer.length)) != -1) { + out.write(buffer, 0, len); + } + + buffer = Base64.encodeBase64(buffer); + String b64File = new String(buffer); + + Document fileDoc = XMLUtils.newDocument(); + + ElementCreator ec = new ElementCreator(fileDoc, null, null); + Element root = ec.create("upload"); + Element id = ec.create("artifact-uuid"); + id.setTextContent(req.getParameter("uuid")); + + Element data = ec.create("data"); + data.setTextContent(b64File); + + fileDoc.appendChild(root); + root.appendChild(id); + root.appendChild(data); + + return fileDoc; + } + } + catch(Exception e){ + logger.debug("Failed to create xml document containing the file."); + logger.debug(e, e); + } + return null; + } +}