我有一个JSP页面,其中有一个文件输入字段,我可以从中浏览csv文件,然后将其上传到服务器上。我在这个文件输入字段所在的表单中使用method = "POST“和ENCTYPE='multipart/ form -data‘。
在servlet端(在应用程序的servlet中),我使用apache的公共文件上传API-ServletFileUpload API。从该接口的parseRequest( FileItem )方法获取请求列表后,无法使用FileItem接口的getName(),getString()方法获取文件名及其内容。
我需要知道我做错了什么,或者我的方法中的任何修改将使我的应用程序工作。关于这一点的任何建议都会很有帮助。
提前感谢!!
我还在应用程序的主servlet的doPost方法中尝试了以下代码:
` `Enumeration = 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不知道请求参数也应该只返回this属性还是其他属性。
我还尝试了以下代码:
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());
}
}发布于 2011-01-12 22:45:18
是否确定正在调用您的doProcess方法?您是否在此代码块之前或其中放置了任何System.out消息?
另外,你是如何声明你的文件上传表单的?您需要将表单上的enctype设置为multipart/form-data
<form enctype="multipart/form-data" name="uploadForm" action="uploadFormAction">
</form>根据Apache documentation,您的代码看起来基本上是正确的
if (!item.isFormField()) {
System.out.println("ApplicationMainServlet: name = " + item.getFieldName() + ", val = " + item.getString() + ", file size = " + item.getSize());
}也许读起来更容易一些:
if (!item.isFormField()) {
String fieldName = item.getFieldName();
String fileName = item.getName();
long sizeInBytes = item.getSize();
System.out.println("ApplicationMainServlet: name = " + fieldName + ", val = " + fileName + ", file size = " + sizeInBytes);
}试一试,看看它是否有效。
https://stackoverflow.com/questions/4665415
复制相似问题