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目录
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); } }}