框架搭建:jsp+springMVC+mybitis。
问题描述:编辑器Ueditor中可以上传附件,内容编辑完以后,阅读内容时,显示附件,但是附件是使用标签a来显示。无法下载。
解决办法:监控内容中所有的a标签,被点击以后,出发点击事件,获取href附件地址,请求下载接口下载附件。
jsp:
<!-- 资源下载隐藏form --> <form action="" id="sourceUploadForm" method="post" style="display: none;"> <input type="hidden" name="sourceUrl" id="sourceUrl"/> </form>
<!-- 内容显示div --><div id="content"> </div>
js:
//监控内容文档中所有a标签的点击事件
$('#content').on('click','a',function(){
var sourceUrl = $(this).attr("href");
//下载资源
$("#sourceUploadForm").attr('action',sourceUploadURL);
$("#sourceUrl").val(sourceUrl);
$("#sourceUploadForm").submit();
return false;
})
监控div id=content下所有a标签的点击。然后以form形式请求下载接口。该click事件必须以返回false,不然a标签执行完click内容以后会执行href连接跳转。返回false以后将不会执行后面的跳转。
java:
/**
* ueditor编辑器附件下载
* @param request
* @param respnose
* @param source
* @return
*/
@RequestMapping("/sourceUpload")
@ResponseBody
public ResponseEntity<byte[]> sourceUpload(HttpServletRequest request, HttpServletResponse respnose, @ModelAttribute Source source) throws IOException {
//获取系统间隔符
String sepStr = System.getProperty("file.separator");
String sourceUrl = source.getSourceUrl();
String sourceUrlUpload = sourceUrl.replace("/",sepStr);
String path = request.getSession().getServletContext().getRealPath(sourceUrlUpload);
File file = new File(path);
InputStream is = new FileInputStream(file);
byte[] body = new byte[is.available()];
is.read(body);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attchement;filename=" + file.getName());
HttpStatus statusCode = HttpStatus.OK;
ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);
return entity;
}
对于下载比较大的附件,该方法可能会出现内存溢出的异常,因为我附件都不大,所以没有做特别处理。
String sourceUrl = source.getSourceUrl();
String sourceUrlUpload = sourceUrl.replace("/",sepStr);
这一块处理是为了适应linux和windows不同环境下路径的问题。
本文介绍了一种在使用Ueditor编辑器时,解决附件显示但无法下载问题的方法。通过监听a标签点击事件,利用隐藏的form元素请求下载接口,实现了附件的正常下载。并提供了前端JS监听代码和后端Java下载实现。

1352

被折叠的 条评论
为什么被折叠?



