一.WEB端实现一次性选择多个文件批量上传主要有两个思路:
1.在页面读取多个文件后,直接通过"MultipartHttpServletRequest"在后台循环获取保存;
2.利用ajax在页面将获取的每个文件作为参数传递到后台。
说明:框架使用springboot+thymeleaf+easyUI,目前测试的转PDF格式为:DOCX、DOC、TXT
先介绍第一种MultipartHttpServletRequest获取文件做法
html: 属性multiple="multiple" 为选择多个文件
后台处理:
@ResponseBody
@RequestMapping("/saveExpers")
public Map saveExpers(Meditation exper, MultipartHttpServletRequest request)
throws IllegalStateException, IOException {
Map resultMap = new HashMap();
Iterator fileNames = request.getFileNames();
while (fileNames.hasNext()) {
String fileName = fileNames.next();
List fileList = request.getFiles(fileName);
if (fileList.size() > 0) {
// 遍历文件列表
Iterator fileIte = fileList.iterator();
while (fileIte.hasNext()) {
// 获得每一个文件
MultipartFile multipartFile = fileIte.next();
meditationService.insertFileUpload(multipartFile, resultMap);//自己定义 的保存文件方法
}
}
}
return resultMap;
}
后台request拿到前天传递的文件后,通过Iterator迭代出来,保存完毕即可
第二种利用ajax后台循环读取文件存放到data中传递到后台。
html:
后台获取,因为页面已经封装完,相对于第一种方法,后台只需遍历即可,MultipartFile[ ]接收页面传递的文件
@ResponseBody
@RequestMapping("/saveExper")
public Map saveExper(Meditation exper, @RequestParam MultipartFile[] files) {
Map resultMap = new HashMap();
if (files.length != 0) {
for (int i = 0; i < files.length; i++) {
meditationService.insertFileUpload(files[i], resultMap);//自己定义的保存文件的方法,其中files[i]即可循环获取页面传递文件
}
}
return resultMap;
}
到上面两种一次性批量上传文件的方法介绍完了,其实从本质上讲,方法是大同小异的,至于自己创建文件夹保存路径的这些问题就不做介绍了
二.获取后台上传文件,页面在线转PDF
首先导入必须的jar包,jacob包也可以在pom文件中引入,但是我在引入过程中一直失败,所以自己手动导入,下面提供下载链接,链接中提供使用说明。最基础的步骤完成后,下面介绍主要写法:
链接:https://pan.baidu.com/s/12lym9Tv4o8Ce13xf9NKhHw
提取码:8uoy
操作界面:
html:
阅读
后台处理:
private static final int wdFormatPDF = 17;// PDF 格式
@RequestMapping("/viewcontent")
public ModelAndView viewcontent(Meditation exper) {
ModelAndView mv = new ModelAndView("meditation/view_meditation");
exper = meditationService.selectExperByID(exper);//查询存放路径对象
ActiveXComponent app = null;
Dispatch doc = null;
try {
app = new ActiveXComponent("Word.Application");
app.setProperty("Visible", new Variant(false));
Dispatch docs = app.getProperty("Documents").toDispatch();
String startFile = exper.getFilePath();// 转换前的文件路径(后台存放的路径)
int pdf = startFile.indexOf(".");
String pdfPath = startFile.substring(0, pdf);
String overFile = pdfPath + ".pdf";// 转换PDF路径
doc = Dispatch.call(docs, "Open", startFile).toDispatch();
File tofile = new File(overFile);
if (tofile.exists()) {
tofile.delete();
}
Dispatch.call(doc, "SaveAs", overFile, wdFormatPDF);
exper.setFilePath(this.editImgPath(overFile));
} catch (Exception e) {
e.getMessage();
} finally {
Dispatch.call(doc, "Close", false);
if (app != null)
app.invoke("Quit", new Variant[] {});
} // 结束后关闭进程
ComThread.Release();
mv.addObject("exper", exper);
return mv;
}
我的主要做法是将生成的PDF和原文档名称一致,保存到同一文件夹下,因为是不同格式文件,所以名称可以相同
例如:D:/file/20200327/HFILE2020032700066.docx路径,exper.setFilePath(this.editImgPath(overFile));处理后,将原来的路径替换成D:/file/20200327/HFILE2020032700066.pdf传递到页面(后台数据库路径并未改变)。
html:页面展示
打坐心得
效果图: