首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从请求中获取excel文件?

如何从请求中获取excel文件?
EN

Stack Overflow用户
提问于 2012-03-14 17:18:28
回答 3查看 8K关注 0票数 1

我从一个jsp页面上传一个excel文件。下面是代码。

代码语言:javascript
运行
复制
 <form action="Upload.jsp" enctype="MULTIPART/FORM-DATA" method=post >
       <input type="file" name="filename" />
       <input type="submit" value="Upload" />
  </form> 

但是如何在下一页(Upload.jsp)中获得excel文件呢?我正在使用,但在第二行得到了错误。

代码语言:javascript
运行
复制
InputStream file = request.getInputStream();
POIFSFileSystem myFileSystem = new POIFSFileSystem(file );

那么如何从请求中获取excel文件呢?

EN

回答 3

Stack Overflow用户

发布于 2012-03-14 17:35:35

您将根据请求获得一个Multipart/form-data,您需要从中提取包含您的文件字节的部分。

最简单的方法是使用Apache Commons Fileupload

http://commons.apache.org/fileupload/

票数 2
EN

Stack Overflow用户

发布于 2012-03-14 18:31:04

创建FileUploader

代码语言:javascript
运行
复制
import org.apache.commons.fileupload.disk.*;

导入org.apache.commons.fileupload.servlet。;导入java.io。

公共类FileUploader {私有静态ServletFileUpload上传器;

代码语言:javascript
运行
复制
private FileUploader()
{

}

public static synchronized ServletFileUpload getservletFileUploader(String tempDir, int maxSizeInMB) 
{
    if(uploader == null)
    {
        DiskFileItemFactory factory = new DiskFileItemFactory();

        factory.setSizeThreshold(1024 * 1024);
        factory.setRepository(new File(tempDir));

        uploader = new ServletFileUpload(factory);

        uploader.setFileSizeMax(maxSizeInMB * 1024 * 1024);
    }

    return uploader;
}

}

然后在处理请求时使用它

代码语言:javascript
运行
复制
    protected MultiPartFormData handleMultiPartRequest(HttpServletRequest request)
throws FileSizeLimitExceededException
{
    if(!isMultipartRequest(request))
        return null;

    ServletFileUpload upload = FileUploader.getservletFileUploader(tempDir, 50);
    MultiPartFormData data = new MultiPartFormData();
    try
    {
        List<FileItem> items = upload.parseRequest(request);

        for (FileItem item : items) 
        {
            if(item.isFormField())
            {
                data.getParameters().put(item.getFieldName(), item.getString());
            }
            else
            {
                String filename = item.getName();

                //Internet explorer and firefox will send the file name differently
                //Internet explorer will send the entire path to the file name including 
                //the backslash characters etc ... we should strip it down
                //THIS IS HACKY
                if(filename.indexOf("\\") != -1)
                {
                    int index = filename.lastIndexOf("\\");
                    filename = filename.substring(index + 1);
                }


                if(filename == null || filename.equals(""))
                {
                    //do nothing 
                }
                else
                {
                    String randomFileName = (new RandomGUID()).toString() + getFileExtension(filename);


                    File uploadFile = new File(uploadDir + File.separator + randomFileName);
                    item.write(uploadFile);

                }
            }
        }
    }
    catch(FileSizeLimitExceededException e)
    {
        throw e;
    }
    catch(Exception e)
    {
        e.printStackTrace();

    }


    return data;
}

供你参考。MultiPartForm数据如下所示

代码语言:javascript
运行
复制
import java.util.Hashtable;

导入java.util.ArrayList;

公共类MultiPartFormData {

代码语言:javascript
运行
复制
private ArrayList<Integer> fids;
private Hashtable<String, String> parameters;


public MultiPartFormData()
{
    this.fids = new ArrayList<Integer>();
    this.parameters = new Hashtable<String, String>();
}

public ArrayList<Integer> getFids() {
    return fids;
}
public void setFids(ArrayList<Integer> fids) {
    this.fids = fids;
}
public Hashtable<String, String> getParameters() {
    return parameters;
}
public void setParameters(Hashtable<String, String> parameters) {
    this.parameters = parameters;
}

}

票数 0
EN

Stack Overflow用户

发布于 2012-03-15 16:15:51

好了,伙计们,谢谢你们的回复。但是我已经用下面的流程解决了这个问题。

JSP内部:

代码语言:javascript
运行
复制
 <form action="/upload.do" enctype="MULTIPART/FORM-DATA" method=post >
      <input type="file" name="file" id="file" size=25/>
      <input type="submit" value="Upload" /> 
    </form>

创建了一个表单bean:

代码语言:javascript
运行
复制
private FormFile file;
    public void setFile(FormFile file) {
        this.file = file;
    }
    public FormFile getFile() {
        return file;
    }

在操作类上载中:

代码语言:javascript
运行
复制
FileUploadForm uploadForm = (FileUploadForm) form;
FormFile file = uploadForm.getFile();
InputStream stream = file.getInputStream();
POIFSFileSystem fsFileSystem = new POIFSFileSystem(stream);
//
  rest of code for reading the excel
//

现在它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9698928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档