zoukankan      html  css  js  c++  java
  • scala实现HighCharts生成的SVG图像下载

     1 @WebServlet(name = "Highcharts-Chart-Export", urlPatterns = Array[String]("/svg"))
     2 @MultipartConfig
     3 @Singleton
     4 class ExportSVGServlet extends HttpServlet with Disposable {
     5   val REQUEST_METHOD_POST = "POST"
     6   val CONTENT_TYPE_MULTIPART = "multipart/"
     7   val ORBIDDEN_WORD = "<!ENTITY"
     8 
     9   override def service(req: HttpServletRequest, res: HttpServletResponse) = {
    10     req.setCharacterEncoding("utf-8")
    11     res.setCharacterEncoding("utf-8")
    12 
    13     val multi = isMultipartRequest(req)
    14     val svg = getParameter(req, "svg", multi)
    15     val width = getParameter(req, "width", multi)
    16     val mime = getParameter(req, "type", multi)
    17 
    18     writeFileContentToHttpResponse(svg, "patent-analysis-imageexport-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()), if (width != null) width.toFloat else 0f, mime, res);
    19   }
    20 
    21   def writeFileContentToHttpResponse(svg: String,
    22     filename: String,  Float, mime: String,
    23     response: HttpServletResponse) = {
    24 
    25     var stream = new ByteArrayOutputStream()
    26 
    27     stream = SVGRasterizer.transcode(stream, svg, mime, width)
    28 
    29     response.reset()
    30     response.setContentLength(stream.size())
    31     response.setCharacterEncoding("utf-8")
    32     response.setHeader("Content-disposition", "attachment; filename=" + filename + {
    33       mime.toLowerCase() match {
    34         case "image/png" => ".png"
    35         case "image/jpeg" => ".jpg"
    36         case "application/pdf" => ".pdf"
    37         case _ => mime.toLowerCase()
    38       }
    39     })
    40     response.setHeader("Content-type", mime)
    41     using(response.getOutputStream()) { out => out.write(stream.toByteArray()) }
    42   }
    43 
    44   def isMultipartRequest(request: HttpServletRequest) = REQUEST_METHOD_POST.equalsIgnoreCase(request.getMethod()) && request.getContentType() != null && request.getContentType().toLowerCase().startsWith(CONTENT_TYPE_MULTIPART)
    45 
    46   private def getParameter(request: HttpServletRequest, name: String, multi: Boolean) = {
    47     if (multi && request.getPart(name) != null) {
    48       getValue(request.getPart(name));
    49     } else {
    50       request.getParameter(name);
    51     }
    52   }
    53 
    54   private def getValue(part: Part) =Source.fromInputStream(part.getInputStream(), "utf-8").mkString
    55 
    56   def getFilename(name: String) = if (name != None) name else "chart"
    57 }
  • 相关阅读:
    Python3.x和Python2.x的区别
    urllib库python2和python3具体区别
    Oracle实现自增方式:序列+触发器
    菜单
    visual studio 2013连接Oracle 11g并获取数据:(二:实现)
    Oracle连接出现TNS:no listener或者ORA-12514: TNS:listener does not currently know
    visual studio 2013连接Oracle 11g并获取数据:(一:环境搭建)
    C#编程
    Oracle 11g 安装
    Android在Eclipse上的环境配置
  • 原文地址:https://www.cnblogs.com/TerryLiang/p/2875969.html
Copyright © 2011-2022 走看看