package dk.thoerup.pictureposterservice; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Date; import java.util.Map; import java.util.TreeMap; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.oreilly.servlet.multipart.FilePart; import com.oreilly.servlet.multipart.MultipartParser; import com.oreilly.servlet.multipart.ParamPart; import com.oreilly.servlet.multipart.Part; /** * Servlet implementation class PostServlet */ public class PostServlet extends HttpServlet { private static final long serialVersionUID = 1L; Logger logger = Logger.getLogger(PostServlet.class.getName()); protected Map decodeString(String str) throws UnsupportedEncodingException { Map map = new TreeMap(); String[] pairs = str.split("&"); for (String pair : pairs) { String keyValue[] = pair.split("="); String key = keyValue[0]; String val = URLDecoder.decode(keyValue[1], "UTF-8"); map.put(key, val); } return map; } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { MultipartParser parser = new MultipartParser(request,1000000); Map values = null; byte file[] = null; Part part; while ( (part= parser.readNextPart()) != null) { if (part.getName().equals("file") ) { FilePart fpart = (FilePart) part; ByteArrayOutputStream baos = new ByteArrayOutputStream(128000); InputStream is = fpart.getInputStream(); byte data[] = new byte[8192]; int len; while ( (len = is.read(data)) !=-1 ) { baos.write(data, 0, len); } is.close(); file = baos.toByteArray(); baos.close(); } else { ParamPart params = (ParamPart) part; values = decodeString( params.getStringValue() ); } } Posting post = new Posting(); post.setTitle( values.get("title") ); post.setNote( values.get("note") ); post.setAuthor(values.get("author")); if ( !values.get("latitude").equals("") ) { post.setLatitude( Double.parseDouble(values.get("latitude")) ); } if ( !values.get("longitude").equals("") ) { post.setLongitude( Double.parseDouble(values.get("longitude")) ); } post.setPostdate( new Date() ); // now() PostingDAO.savePosting(post); logger.info("Saved with postID=" +post.getId()); String fileName = "/home/app/data/PicturePoster/" + post.getId() + ".jpeg"; FileOutputStream fo = new FileOutputStream(fileName); fo.write(file); } }