/**
* @license Highcharts JS v2.3.3 (2012-11-02)
*
* (c) 20012-2014
*
* Author: Gert Vaartjes
*
* License: www.highcharts.com/license
*/
package com.highcharts.export.controller;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.NoSuchElementException;
import java.util.concurrent.TimeoutException;
import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.highcharts.export.converter.SVGConverter;
import com.highcharts.export.converter.SVGConverterException;
import com.highcharts.export.pool.PoolException;
import com.highcharts.export.util.MimeType;
import com.highcharts.export.util.TempDir;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.logging.Level;
import javax.servlet.http.HttpSession;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.RandomStringUtils;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
@Controller
@RequestMapping("/")
public class ExportController extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final Float MAX_WIDTH = 2000.0F;
private static final Float MAX_SCALE = 4.0F;
protected static Logger logger = Logger.getLogger("exporter");
@Resource(name = "svgConverter")
private SVGConverter converter;
/* catch all GET requests and redirect those */
@RequestMapping(method = RequestMethod.GET)
public String getAll(HttpSession session) {
String tempFile = (String) session.getAttribute("tempFile");
session.removeAttribute("tempFile");
if (tempFile != null && !tempFile.isEmpty()) {
// redirect to file download
return "redirect:" + TempDir.getDownloadLink(tempFile);
}
// redirect to demo page
return "redirect:demo";
}
@RequestMapping(value = "/demo", method = RequestMethod.GET)
public String demo() {
return "demo";
}
@RequestMapping(method = RequestMethod.POST)
public HttpEntity<byte[]> exporter(
@RequestParam(value = "svg", required = false) String svg,
@RequestParam(value = "type", required = false) String type,
@RequestParam(value = "filename", required = false) String filename,
@RequestParam(value = "width", required = false) String width,
@RequestParam(value = "scale", required = false) String scale,
@RequestParam(value = "options", required = false) String options,
@RequestParam(value = "constr", required = false) String constructor,
@RequestParam(value = "callback", required = false) String callback,
@RequestParam(value = "async", required = false, defaultValue = "false") Boolean async,
HttpServletRequest request,
HttpSession session) throws ServletException, InterruptedException, SVGConverterException, NoSuchElementException, PoolException, TimeoutException, IOException {
MimeType mime = getMime(type);
String tempFilename = null;
boolean isAndroid = request.getHeader("user-agent") != null && request.getHeader("user-agent").contains("Android");
if (isAndroid || MimeType.PDF.equals(mime) || async) {
tempFilename = createUniqueFileName(mime.name().toLowerCase());
}
String output = processRequest(svg, mime, width, scale, options, constructor, callback, tempFilename);
ByteArrayOutputStream stream;
if (async) {
String link = TempDir.getDownloadLink(tempFilename);
// write to stream
stream = new ByteArrayOutputStream();
stream.write(link.getBytes("utf-8"));
} else {
stream = ouputToStream(output, mime, tempFilename);
}
/* If tempFilename is not null, then we want to save the filename in session, in case of GET is used later on*/
if (isAndroid) {
session.setAttribute("tempFile", FilenameUtils.getName(tempFilename));
}
filename = getFilename(filename);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", mime.getType() + "; charset=utf-8");
headers.add("Content-Disposition",
"attachment; filename=" + filename.replace(" ", "_") + "." + mime.name().toLowerCase());
headers.setContentLength(stream.size());
return new HttpEntity<byte[]>(stream.toByteArray(), headers);
}
@RequestMapping(value = "/files/{name}.{ext}", method = RequestMethod.GET)
public void getFile(@PathVariable("name") String name, @PathVariable("ext") String ext, HttpServletResponse response) throws SVGConverterException, IOException {
Path path = Paths.get(TempDir.getOutputDir().toString(), name + "." + ext);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
try {
stream.write(FileUtils.readFileToByteArray(new File(path.toString())));
} catch (IOException ioex) {
logger.error("Tried to read file from filesystem: " + ioex.getMessage());
throw new SVGConverterException("IOException: cannot find your file to download...");
}
MimeType mime = MimeType.valueOf(ext.toUpperCase());
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentLength(stream.size());
response.setContentType(mime.getType());
response.setStatus(HttpStatus.OK.value());
IOUtils.write(stream.toByteArray(), response.getOutputStream());
response.flushBuffer();
}
@ExceptionHandler(IOException.class)
public ModelAndView handleIOException(Exception ex, HttpServletResponse response) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
modelAndView.addObject("message", ex.getMessage());
response.setStatus(500);
return modelAndView;
}
@ExceptionHandler(TimeoutException.class)
public ModelAndView handleTimeoutException(Exception ex, HttpServletResponse response) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
modelAndView
.addObject(
"message",
"Timeout converting SVG, is your file this big, or maybe you have a syntax error in the javascript callback?");
response.setStatus(500);
return modelAndView;
}
@ExceptionHandler(PoolException.class)
public ModelAndView handleServerPoolException(Exception ex, HttpServletResponse response) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
modelAndView
.addObject(
"message",
"Sorry, the server is handling too many requests at the moment. Please try again.");
response.setStatus(500);
return modelAndView;
}
@ExceptionHandler(SVGConverterException.class)
public ModelAndView handleSVGRasterizeException(Exception ex, HttpServletResponse response) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
modelAndView
.addObject(
"message",
"Something went wrong while converting. " + ex.getMessage());
response.setStatus(500);
return modelAndView;
}
@ExceptionHandler(InterruptedException.class)
public ModelAndView handleInterruptedException(Exception ex, HttpServletResponse response) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
modelAndView
.addObject(
"message",
"It took too long time to process the options, no SVG is created. Make sure your javascript is correct");
response.setStatus(500);
return modelAndView;
}
@ExceptionHandler(ServletException.class)
public ModelAndView handleServletException(Excep
没有合适的资源?快使用搜索试试~ 我知道了~
fastpy-append函数
共331个文件
js:120个
htm:33个
gif:23个
需积分: 1 0 下载量 171 浏览量
2024-10-19
06:08:58
上传
评论
收藏 5.62MB ZIP 举报
温馨提示
python web http append函数 append函数 append函数 append函数 append函数
资源推荐
资源详情
资源评论
收起资源包目录
fastpy-append函数 (331个子文件)
index.html.bak 10KB
style.css.bak 7KB
publish.html.bak 3KB
ExportController.class 13KB
CorsFilter.class 2KB
jquery-ui.css 31KB
Default.css 9KB
style.css 6KB
style.css 6KB
User_Login.css 6KB
style.css 5KB
codemirror.css 5KB
xtree.css 5KB
report.css 3KB
jqtree.css 2KB
inspect.css 2KB
sankey.css 2KB
demo.css 2KB
dialog.css 449B
simple-hint.css 368B
astyle.css 49B
Thumbs.db 14KB
ecom 1KB
user_top_c.gif 7KB
wdlogo.gif 6KB
user_botton.gif 6KB
user_top_l.gif 6KB
loading.gif 6KB
user_bottom_c.gif 5KB
user_bottom_r.gif 4KB
user_bottom_l.gif 4KB
user_top_r.gif 4KB
user_main_l.gif 3KB
d.gif 3KB
user_main_r.gif 3KB
user_main_c.gif 2KB
throbber.gif 2KB
user_login_name.gif 2KB
user_login_password.gif 1KB
user_login_validatecode.gif 1KB
user_all_bg.gif 811B
baidu_jgylogo3.gif 705B
bg.gif 64B
bg.gif 64B
desc.gif 54B
asc.gif 54B
ecom.htm 26KB
ecom(1).htm 26KB
index.htm 3KB
index.htm 2KB
index.htm 2KB
index.htm 2KB
index.htm 2KB
index.htm 2KB
index.htm 2KB
index.htm 2KB
index.htm 2KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1KB
index.htm 1021B
index.htm 1016B
index.htm 1016B
index.htm 1000B
index.htm 982B
index.htm 982B
index.htm 929B
o.htm 907B
SaveAll.html 12KB
index.html 10KB
publish.html 8KB
SaveDiamond.html 7KB
chart_uu.html 7KB
gm_sys.html 6KB
chart_online.html 6KB
chart_eq.html 5KB
upload.html 5KB
gm.html 5KB
chart.html 5KB
tips.html 4KB
SelectAction.html 4KB
SelectArea.html 4KB
gm_main.html 4KB
index.html 3KB
login.html 2KB
index.html 2KB
typescript.html 1KB
upload_finish.html 257B
Chart.ico 92KB
共 331 条
- 1
- 2
- 3
- 4
资源评论
lly202406
- 粉丝: 2376
- 资源: 5389
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功