一、需求描述
java web項目從前臺上傳word格式文件,後臺接收文件並提取word內容保存至數據庫。
二、依賴jar包
這裏操作的是maven項目,所有依賴jar包均可到maven倉庫進行免費下載。具體如下:
三、後臺代碼
這裏的java_web項目採用SpringMVC的內置文件上傳方式進行接收解析,具體如下:
/**
* 提取word文件內容
* @param file
* @param request
* @return
* @throws IOException
* @throws IllegalStateException
*/
@RequestMapping(value = "/getPapers", method = RequestMethod.POST, produces = { "text/html;charset=utf-8" })
@ResponseBody
private Object getPapers(@RequestParam("file") MultipartFile multfile,HttpServletRequest request) throws IllegalStateException, IOException {
// 獲取文件名
String fileName = multfile.getOriginalFilename();
//判斷是否爲word類型文件
if (!fileName.endsWith(".doc") && !fileName.endsWith(".docx")) {
System.out.println("此文件不是word文件!");
}
//當前系統的臨時文件地址
String realPath = request.getSession().getServletContext().getRealPath("/static/app/appkmbgszh/uploadFile");
// 用uuid作爲文件名,防止生成的臨時文件重複
String fileAdd = UUID.randomUUID().toString() + ".docx";
// 構建一個臨時文件
File uploadFile = new File(realPath, fileAdd);
//將上傳的MultipartFile格式文件轉換爲創建的新文件
multfile.transferTo(uploadFile);
//獲取新文件的絕對路徑
String filePath = uploadFile.getAbsolutePath();
String buffer = "";
JSONObject msg = new JSONObject();
try {
InputStream inIo = new FileInputStream(uploadFile);
//提取文本內容
if (fileName.endsWith(".doc")) {
WordExtractor ex = new WordExtractor(inIo);
buffer = ex.getText();
ex.close();
} else if (fileName.endsWith(".docx")) {
OPCPackage opcPackage = POIXMLDocument.openPackage(filePath);
POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);
buffer = extractor.getText();
extractor.close();
}
//刪除上傳存放的臨時文件
uploadFile.delete();
msg.put("status", true);
msg.put("msg", buffer);
} catch (Exception e) {
e.printStackTrace();
msg.put("status", false);
msg.put("msg", "文件內容提取失敗");
}
return retString(msg);
}
/**
* json格式化;
* @param ret
* @return
*/
private String retString(JSONObject ret) {
String jsoStr = "";
try {
jsoStr = JSON.json(ret);
} catch (IOException e) {
e.printStackTrace();
return jsoStr;
}
return jsoStr;
}