【发布时间】:2011-06-07 14:47:04
【问题描述】:
我有一个 JSP 页面,其中有一个文件输入字段,我从中浏览一个 csv 文件,然后将其上传到服务器上。我在此文件输入字段所在的表单中使用 method = "POST" 和 ENCTYPE='multipart/form-data'。
在 servlet 方面(在应用程序的 servlet 中),我正在使用 apache 的通用文件上传 API-ServletFileUpload API。从该 API 的方法 parseRequest(request) 获取 FileItem 列表后,我无法使用 FileItem API 的 getName()、getString() 方法获取文件名及其内容。
需要知道我做错了什么或对我的方法进行任何修改以使我的应用程序正常工作。任何有关这方面的指示都会有所帮助。
提前致谢!!
还在应用程序主servlet的doPost方法中尝试了以下代码:-
`枚举 enumAttrib = request.getAttributeNames();
while(enumAttrib.hasMoreElements()) {
String attribName = (String)(enumAttrib.nextElement());
System.out.println("DEBUG:---------AttribName = " + attribName);
System.out.println("DEBUG:---------AttribValue=" + request.getAttribute(attribName));
}`
打印出来的输出是:
DEBUG:---------AttribName = weblogic.servlet.network_channel.port
DEBUG:---------AttribValue=9703
不知道请求参数是否应该只返回这个或其他属性。
还尝试了以下代码:
if (ServletFileUpload.isMultipartContent(request)) {
System.out.println("Inside ApplicationMainServlet request is multipart ");
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
try
{
// Parse the request
List /* FileItem */items = upload.parseReques(request);
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext())
{
FileItem item = (FileItem) iter.next();
String name = item.getFieldName();
System.out.println("ApplicationMainServlet name: "+item.getFieldName() + ", val: "+item.getString() );
if (!item.isFormField())
{
//Item is a file
try{
InputStream is = item.getInputStream();
InputStreamReader ir = new InputStreamReader(is);
BufferedReader br = new BufferedReader(ir);
System.out.println("br : " + br);
String fileContent = "";
String strLine;
while((strLine = br.readLine()) != null){
System.out.println("strLine : " + strLine);
if(fileContent != null)
{
fileContent = fileContent+ strLine + "\n";
}
else
{
fileContent = strLine + "\n";
}
}
System.out.println("fileContent : " + fileContent);
} catch(Exception e){
e.printStackTrace();
}
System.out.println("ApplicationMainServlet file name " + item.getName()+",size "+item.getSize());
}
}
【问题讨论】:
-
可以发一下文件上传代码吗?
-
public void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload 上传 = new ServletFileUpload(factory);列表项 = upload.parseRequest(request);迭代器 iter = items.iterator(); while (iter.hasNext()){ FileItem item = (FileItem) iter.next(); if (!item.isFormField()) { //在日志中打印的输出是 Val=(blank) and size=0 System.out.println("ApplicationMainServlet: name = "+item.getFieldName() + ", val = "+item.getString() + ", 文件大小 = " + item.getSize() ); request.setAttribute(name, item); //更多代码要遵循..
-
请使用代码更新您的原始问题。它作为评论是不可读的。并且请使用编辑框上的代码格式化按钮来格式化代码。