注意:
在阅读此问题及其答案之前,请检查您的输入元素是否具有name属性.
我正在尝试使用servlet上传文件.Eclipse控制台显示没有错误.但是文件没有上传.对我来说,似乎一切都很好.但我在某个地方犯了错误.
在控制台我得到了
Inside Servlet //Printed by code
Items: [] // Printed by Cdoe
Run Code Online (Sandbox Code Playgroud)
Html代码:
<form action="ImageUploadServlet" method="post" enctype="multipart/form-data">
<table>
<tr>
<td><label>Select Image: </label></td>
<td><input type="file" id="sourceImage" /></td>
<tr>
<td colspan="3">
<input type="submit" value="Upload"/><span id="result"></span>
</td>
</tr>
</table>
</form>
Run Code Online (Sandbox Code Playgroud)
Servlet代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean isMultiPart = ServletFileUpload.isMultipartContent(request);
System.out.println("Inside Servlet");
if(!isMultiPart){
System.out.println("Form type is not multipart/form-data");
System.out.println("File Not Uploaded");
}
else
{
FileItemFactory dfit = new DiskFileItemFactory();
ServletFileUpload sfu = new ServletFileUpload(dfit);
List aList = null;
try {
aList = sfu.parseRequest(request);
System.out.println("Items: "+aList);
}
catch (FileUploadException fue)
{
fue.printStackTrace();
}
Iterator itr = aList.iterator();
while(itr.hasNext())
{
FileItem fi = (FileItem) itr.next();
if(fi.isFormField())
{
System.out.println("File Name: "+fi.getFieldName());
System.out.println("File Size: "+fi.getSize());
try
{
File f = new File("D:/MyUploads/", fi.getName());
fi.write(f);
}
catch (Exception e)
{
e.printStackTrace();
}
}
else
{
System.out.println("It's Not Form Item;");
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何建议,将不胜感激.
谢谢!
有两个问题:
首先,你需要给这个领域一个name.然后它成为请求参数名称.
<input type="file" id="sourceImage" name="sourceImage" />
Run Code Online (Sandbox Code Playgroud)
其次,你需要处理的文件上传中else的情况下,FileItem#isFormField()如按照通用FileUpload指南.您的代码当前忽略它们并仅执行sysout.
if (item.isFormField()) {
// Process regular form field (input type="text|radio|checkbox|etc", select, etc).
String fieldname = item.getFieldName();
String fieldvalue = item.getString();
// ... (do your regular form field processing job here)
} else {
// Process form file field (input type="file").
String fieldname = item.getFieldName();
String filename = FilenameUtils.getName(item.getName());
// ... (do your uploaded file job here)
File file = new File("D:/MyUploads/", filename);
item.write(file);
}
Run Code Online (Sandbox Code Playgroud)
请注意,您需要使用FilenameUtils#getName()提取文件名,因为MSIE浏览器错误地沿文件名发送完整的客户端文件路径.另请参阅Commons FileUpload FAQ.
您还需要记住,此方法将覆盖任何以前上传的具有相同名称的文件.您可能希望为文件名添加自动生成的后缀.
| 归档时间: |
|
| 查看次数: |
4225 次 |
| 最近记录: |