文章添加(使用模板article.ftl,然后进行封装,保存至本地)
注:上传至ftp服务器另外文章说明
@RequestMapping("/addarticle")
public ModelAndView addArticle(HttpServletRequest request,
HttpServletResponse response,@ModelAttribute ArticleEntity article) throws Exception{
ModelAndView view = new ModelAndView();
String fileName=null;
FreeMarkerUtil freeMarkerUtil = FreeMarkerUtil.getFreeMarkerUtil();
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
//1、整体包含内容rootMap
Map<String, String> rootMap = new HashMap<String, String>();
rootMap.put("content", article.getContent());
rootMap.put("imageurl", article.getIMAGE_URL());
rootMap.put("title", article.getTITLE());
rootMap.put("summary", article.getSUMMARY());
rootMap.put("time", time);
rootMap.put("image_urls", article.getIMAGE_URL());
//2、html命名
long timenow = System.currentTimeMillis();
fileName = fileRename(timenow+".html");
//3、设置本地保存地址
String projroot = request.getSession().getServletContext().getRealPath("/");
String directory = new File(projroot).getParent()+"/ROOT/html/";
//4、封装 保存到本地
boolean isok = freeMarkerUtil.genHtmlFile(directory,"article.ftl", rootMap, fileName);
//5、封装成功--- 数据库文章url 图片url
if(isok){
article.setCONTENT_URL(fileName);
}
//数据插入数据库
boolean ok = articleService.saveEntity(article);
if (ok){
view.setViewName("redirect:/article/articlelist");
}else{
view.setViewName("/jsp/error/error_404");
}
return view;
}
调用部分的方法(fileRename()和FreeMarkerUtil 的genHtmlFile()):
public static String fileRename(String fileName){
String formatDate = new SimpleDateFormat("yyyyMMddHHmmss")
.format(new Date());
String rename;
int i = (int) (Math.random() * fileName.length());
if(fileName!=null&&fileName.contains(".")){
rename = formatDate +i+fileName.substring(fileName.lastIndexOf("."));
}else{
rename = formatDate +i;
}
return rename;
}
public boolean genHtmlFile(String sRootDir, String templateFileName, Map<?, ?> propMap,
String htmlFileName) throws Exception
{
File file = null;
try
{
Template t = getFreeMarkerConfig().getTemplate(templateFileName);
t.setEncoding("UTF-8");
createDirs(sRootDir);
file = new File(sRootDir + "/" + htmlFileName);
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
t.process(propMap, out);
out.flush();
out.close();
}
catch (TemplateException e)
{
if(file != null) {
file.delete();
}
logger.error("Error while processing FreeMarker Template" + templateFileName, e);
throw new Exception();
}
catch (IOException e)
{
if(file != null) {
file.delete();
}
logger.error("Error while generate static html file" + htmlFileName, e);
throw new Exception();
}
return true;
}