Mercurial Hosting > nabble
diff src/nabble/view/web/forum/UploadImage2.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children | 18cf4872fd7f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/nabble/view/web/forum/UploadImage2.java Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,113 @@ + +package nabble.view.web.forum; + +import fschmidt.util.java.HtmlUtils; +import fschmidt.util.servlet.JtpContext; +import nabble.model.FileUpload; +import nabble.model.Message; +import nabble.model.ModelException; +import nabble.model.Site; +import nabble.model.User; +import nabble.naml.namespaces.TemplateException; +import nabble.view.lib.Jtp; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileUploadException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Map; + + +public final class UploadImage2 extends HttpServlet { + private static final Logger logger = LoggerFactory.getLogger(UploadImage2.class); + + protected void service(HttpServletRequest request,HttpServletResponse response) + throws ServletException, IOException + { + JtpContext jtpContext = (JtpContext)getServletContext().getAttribute(JtpContext.attrName); + jtpContext.setTimeLimit(request,0L); + User user = Jtp.getUser(request,response); + if( user==null ) { + Jtp.login("You must login to upload an image.",request,response); + return; + } + PrintWriter out = response.getWriter(); + + out.print( "\r\n<html>\r\n<body>\r\n<script type=\"text/javascript\">\r\n" ); + + try { + final Map<String,FileItem> map; + try { + map = Jtp.getFileItems(request); + } catch(FileUploadException e) { + logger.warn("",e); + throw ModelException.newInstance( "upload_image_failed", "upload failed - " + e.getMessage() ); + } + FileItem fi = map.get("image"); + + if (fi == null || fi.getName() == null || fi.getName().length() == 0) { + String urlS = map.get("imageUrl").getString(); + URL url; + try { + url = new URL(urlS); + } catch(MalformedURLException e) { + throw ModelException.newInstance("invalid_url", "Invalid URL: "+urlS, e); + } + fi = new FileUpload.UrlFileItem(url); + try { + fi.getInputStream(); + } catch (IOException e) { + throw ModelException.newInstance("invalid_url", "Invalid URL: "+urlS, e); + } + } + + char type = map.get("srcType").getString().charAt(0); + long id = Long.parseLong(map.get("srcId").getString()); + Site site = Jtp.getSiteNotNull(request); + Message.Source src = Message.SourceType.getType(type).getSource(site,id); + + FileItem resizeSizeFI = map.get("resize-size"); + int resize = "none".equals(resizeSizeFI.getString())? 0 : Integer.valueOf(resizeSizeFI.getString()); + String name; + try { + name = FileUpload.uploadImage(fi,src,resize); + } catch (TemplateException e) { + throw ModelException.newInstance( "upload_image_failed", "Upload failed: " + e.getMessage()); + } + + FileItem floatPositionFI = map.get("float-position"); + String floatPosition = floatPositionFI == null? "none" : floatPositionFI.getString(); + + FileItem descriptionFI = map.get("description"); + String description = descriptionFI == null? "null" : '\'' + HtmlUtils.javascriptStringEncode(HtmlUtils.htmlEncode(descriptionFI.getString())) + '\''; + + out.print( "\r\nparent.Nabble.uploadedImage('" ); + out.print( (name) ); + out.print( "', '" ); + out.print( (floatPosition) ); + out.print( "', " ); + out.print( (description) ); + out.print( ");\r\nparent.Nabble.closeWindows();\r\n" ); + + } catch(ModelException e) { + logger.warn("Image upload failed",e); + + out.print( "\r\nalert(\"" ); + out.print( (HtmlUtils.javascriptStringEncode(e.getMessage())) ); + out.print( "\");\r\nhistory.back();\r\n" ); + + } + + out.print( "\r\n</script>\r\n</body>\r\n</html>\r\n" ); + + } +} +