日期:2014-05-20  浏览次数:20816 次

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