java上传文件代码问题
package web;
import java.io.File;
import
java.io.IOException;
import java.util.List;
import javax.servlet.ServletContext;
import
javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadProcess extends HttpServlet {
@SuppressWarnings("unchecked")
public void service(HttpServletRequest request, HttpServletResponse response)
throws
ServletException,
IOException {
// DiskFileItemFactory实例为解析对象提供
// 解析时的一些缺省配置
DiskFileItemFactory factory = new DiskFileItemFactory();
// 创建解析对象
ServletFileUpload sfu = new ServletFileUpload(factory);
sfu.setFileSizeMax(1024 * 50);
// 使用解析对象,分析InputStream
try {
// 解析对象,将解析的结果封装成
// FileItem对象的一个集合。每一个
// FileItem对象与一个表单域对应。
List<FileItem> items = sfu.parseRequest(request);
for (int i = 0; i < items.size(); i++) {
FileItem item = items.get(i);
if (item.isFormField()) {
// 如果是一个普通的表单域
// getFieldName:返回表单域的名称
String name = item.getFieldName();
// getString:返回表单域的值
String value = item.getString();
System.out.println(name + " " + value);
} else {
// 如果是上传文件表单域,
// 将该文件存放到服务器上面的某个文件夹下面
// 可以使用Servlet上下文提供的
// getRealPath()获得一个与实际部署相关的路径。
// 获得Servlet上下文对象
ServletContext sctx = getServletContext();
// 获得upload的实际的物理路径
String path = sctx.getRealPath("upload");
System.out.println("path:" + path);
// 获得文件名
String fileName = item.getName();
//获得文件的类型
String type = item.getContentType();
System.out.println("type:" + type);
// 在某些操作系统上,运行时,getName方法
// 会返回路径+文件名
fileName = fileName
.substring(fileName.lastIndexOf("\\") + 1);
System.out.println("fileName:" + fileName);
File file = new File(path + "\\" + fileName);
file.mkdir();
item.write(file);
}
}
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("upload_err", "上传的文件不能超过50k");
request.getRequestDispatcher("form.jsp").forward(request, response);
}
}
}
不知道哪里改,下面是报错!
username 3443
path:G:\tomcat\apache-tomcat-5.5.28\webapps\FileUpLoad-teacher\upload
type:text/html
fileName:index.html
//--------------------------------------------
java.io.FileNotFoundException: G:\tomcat\apache-tomcat-5.5.28\webapps\FileUpLoad-teacher\upload\index.html (系统找不到指定的路径。)
------解决方案--------------------
用下面的代码,主要是你没有建立那个upload目录
Java code
package com.my;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadOther extends HttpServlet {
@SuppressWarnings("unchecked")
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// DiskFileItemFactory实例为解析对象提供
// 解析时的一些缺省配置
DiskFileItemFactory factory = new DiskFileItemFactory();
// 创建解析对象
ServletFileUpload sfu = new ServletFileUpload(factory);
sfu.setSizeMax(1024 * 500);
// 使用解析对象,分析InputStream
try {
// 解析对象,将解析的结果封装成
// FileItem对象的一个集合。每一个
// FileItem对象与一个表单域对应。
List<FileItem> items = sfu.parseRequest(request);
for (int i = 0; i < items.size(); i++) {
FileItem item = items.get(i);
if (item.isFormField()) {
// 如果是一个普通的表单域
// getFieldName:返回表单域的名称
String name = item.getFieldName();
// getString:返回表单域的值
String value = item.getString();
System.out.println(name + " " + value);
} else {
// 如果是上传文件表单域,
// 将该文件存放到服务器上面的某个文件夹下面
// 可以使用Servlet上下文提供的
// getRealPath()获得一个与实际部署相关的路径。
// 获得Servlet上下文对象
ServletContext sctx = getServletContext();
// 获得upload的实际的物理路径
String path = sctx.getRealPath("upload");// 这个目录并不存在,需要建
new File(path).mkdir();
System.out.println("path:" + path);
// 获得文件名
String fileName = item.getName();
// 获得文件的类型
String type = item.getContentType();
System.out.println("type:" + type);
// 在某些操作系统上,运行时,getName方法
// 会返回路径+文件名
fileName = fileName
.substring(fileName.lastIndexOf("\\") + 1);
System.out.println("fileName:" + fileName);
File file = new File(path + "\\" + fileName);
//file.mkdir();
item.write(file);
}
}
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("upload_err", "上传的文件不能超过50k");
request.getRequestDispatcher("form.jsp").forward(request, response);
}
}
}