小弟没分了,我现在需要将一个excel文件传到服务器上,再将其存入数据库。请大牛指点!

解决方案 »

  1. package com.zgm.servlet;import java.io.IOException;
    import java.io.PrintWriter;import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.*;
    import java.util.*;
    import java.util.regex.*;
    import java.io.*;
    import org.apache.commons.fileupload.servlet.*;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;public class FileUpload extends HttpServlet {

    private String uploadPath = "";

    @Override
    public void init(ServletConfig config) throws ServletException {
    uploadPath = config.getInitParameter("uploadPath");
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
    res.setContentType("text/html; charset=GB2312");
    PrintWriter out = res.getWriter();

    System.out.println("req.getContentLength() = " + req.getContentLength());
    System.out.println("req.getContentType() = " + req.getContentType());

    DiskFileItemFactory factory = new DiskFileItemFactory();
    // maximum size that will be stored in memory
    factory.setSizeThreshold(4096);
    // the location for saving data that is larger than getSizeThreshold()
    factory.setRepository(new File("d:\\temp")); ServletFileUpload upload = new ServletFileUpload(factory);
    // maximum size before a FileUploadException will be thrown
    upload.setSizeMax(1000000);
    try {
    List fileItems = upload.parseRequest(req);
    Iterator iter = fileItems.iterator(); // 正则匹配,过滤路径取文件名
    String regExp = ".+\\\\(.+)$"; // 过滤掉的文件类型
    String[] errorType = { ".exe", ".com", ".cgi", ".asp" };
    Pattern p = Pattern.compile(regExp);
    while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();
    // 忽略其他不是文件域的所有表单信息
    if (!item.isFormField()) {
    String name = item.getName(); // name 文件的名字
    long size = item.getSize(); // size 文件的大小
    if ((name == null || name.equals("")) && size == 0)
    continue;
    Matcher m = p.matcher(name);
    boolean result = m.find();
    if (result) {
    for (int temp = 0; temp < errorType.length; temp++) {
    if (m.group(1).endsWith(errorType[temp])) {
    throw new IOException(name + ": wrong type");
    }
    }
    try {
    // 保存上传的文件到指定的目录
    // 在下文中上传文件至数据库时,将对这里改写
    item.write(new File(uploadPath + m.group(1)));
    out.print(name + "&nbsp;&nbsp;" + size + "<br>");
    } catch (Exception e) {
    out.println(e);
    }
    } else {
    throw new IOException("fail to upload");
    }
    }
    }
    } catch (IOException e) {
    out.println(e);
    } catch (FileUploadException e) {
    out.println(e);
    } // 保存上传的文件到指定的目录 // 在下文中上传文件至数据库时,将对这里改写 }}注意两点:
    1  web.xml 中配置
       <servlet>
        <servlet-name>FileUpload</servlet-name>
        <servlet-class>com.zgm.servlet.FileUpload</servlet-class>
        <init-param>
    <param-name>uploadPath</param-name>
    <param-value>D:\temp\image\</param-value>    
        </init-param>
      </servlet>
    2 导入org.apache.commons.fileupload包
      

  2. <form action="/workflowAction" enctype="multipart/form-data">
    <INPUT TYPE=FILE SIZE=60 NAME="FILE">上述中form表达一定要加enctype="multipart/form-data"这个属性后台java代码缩略是:在DocumentForm中定义私有成员
    private FormFile contextFile;FormFile是struts的下载类import org.apache.struts.upload.FormFileDocumentForm df = (DocumentForm)form;

    FormFile formFile = df.getContextFile(); byte[] bytes = formFile.getFileData();document.setContent(bytes);
      

  3. 前台页面form  的 enctype 属性为 "multipart/form-data"
    后台处理程序如下:
    SmartUpload mySmartUpload = new SmartUpload();
    mySmartUpload.initialize(pageContext);
    mySmartUpload.setTotalMaxFileSize(10485760);//设置最大10M
    mySmartUpload.setAllowedFilesList("xls");
    mySmartUpload.upload();
    byte PublicImageByte[] = mySmartUpload.getFiles( ).getFile( 0 ).getBytesOfImage( );
    将PublicImageByte存入数据库的BLOB类型字段里。
    注:这用到了SmartUpload jar包
      

类似问题 »