WEB版一次选择多个文件进行批量上传,在线转PDF阅读

本文主要实现一次性批量上传文件,上传完成后页面读取,例如读取WORD、TXT文件在线转换成PDF

一.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传递到页面(后台数据库路径并未改变)。

WEB版一次选择多个文件进行批量上传,在线转PDF阅读_第1张图片

html:页面展示

打坐心得

效果图:

 

WEB版一次选择多个文件进行批量上传,在线转PDF阅读_第2张图片

你可能感兴趣的:(springboot,JAVA)