必须有上传文件包:commons-fileupload-1.2.jar和commons-io-1.3.2.jar,还有,把word转换为html的包jacob.jar。
把jacob.jar 拷贝到项目的lib目录下,把jacob.dll拷贝到jdk的jre/bin和jre/lib/ext下
这里的jacob是指jacob.dll文件,其解决办法是把jacob.dll文件拷贝到 jre/bin 目录和jre/lib/ext目录下 |
package com.javawrod;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.crypto.Data;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class FileUploadServler extends HttpServlet {
File temPathFile=null;
File savePathFile=null;
public void initFile(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
System.out.println("getScheme:"+request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/");
String savePath=request.getRealPath("/")+"FileUpload"; //上传路径
savePathFile=new File(savePath);
if(!savePathFile.isDirectory()){
savePathFile.mkdir();
}
}
//上传文件
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
initFile(request,response);
request.setCharacterEncoding("utf-8");
if(ServletFileUpload.isMultipartContent(request)){
try{
DiskFileItemFactory dff=new DiskFileItemFactory();
dff.setRepository(temPathFile); //临时存放文件夹
dff.setSizeThreshold(1024*1024*10); //指定在内存中缓冲数据大小,单位是byte
ServletFileUpload sfu=new ServletFileUpload(dff);
sfu.setFileSizeMax(1024*1024*100); //上传单个文件的大小
sfu.setSizeMax(1024*1024*1000); //上传总文件大小
FileItemIterator fii=sfu.getItemIterator(request);
while(fii.hasNext()){
FileItemStream fis=fii.next();
if(!fis.isFormField()&&fis.getName().length()>0){ //过滤Form表单
String fileName=fis.getName().substring(fis.getName().lastIndexOf("//"));
BufferedInputStream in=new BufferedInputStream(fis.openStream());
BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(new File(savePathFile+fileName)));
Streams.copy(in,out,true);
changeWord(fis.getName(),savePathFile.toString()+"//"+fileName.substring(0,fileName.lastIndexOf("."))+System.currentTimeMillis());
}
}
PrintWriter out=response.getWriter();
out.println("fileUpload success!!!");
}catch(Exception e){
e.printStackTrace();
}
}
}
//Word转换html
public void changeWord(String docFile,String htmlFile){
System.out.println(docFile+"/n"+htmlFile);
ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word
try {
app.setProperty("Visible", new Variant(false));
//设置word不可见
Dispatch docs = app.getProperty("Documents").toDispatch();
Dispatch doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] { docFile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();
// 打开word文件
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {htmlFile, new Variant(8) }, new int[1]);
// 作为html格式保存到临时文件
Variant f = new Variant(false);
Dispatch.call(doc, "Close", f);
} catch (Exception e) {
e.printStackTrace();
} finally {
app.invoke("Quit", new Variant[]{});
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}