JSP入门 文件上传

commons-fileupload

public void save(HttpServletRequest request,HttpServletResponse response)     throws Exception { 

    String temp = getServletContext().getRealPath("/temp"); // 上传时存放临时文件的目录
   String uploadDir = getServletContext().getRealPath("/upload"); // 上传文件存放的目录

DiskFileUpload diskFileUpload = new DiskFileUpload(); 

    diskFileUpload.setSizeMax(1*1024*1024); // 设置允许用户上传文件大小,单位:字节
    diskFileUpload.setSizeThreshold(4096);  // 设置最多只允许在内存中存储的数据,单位:字节
 
    diskFileUpload.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

//开始读取上传信息
 
    List fileItems = diskFileUpload.parseRequest(request); 

    Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件


   while (iter.hasNext()) { 

        FileItem item = (FileItem) iter.next(); // 忽略其他不是文件域的所有表单信息
if(!item.isFormField()) { 

            String name = item.getName(); // 获取上传文件名,包括路径

            name = name.substring(name.lastIndexOf("\\") + 1); // 从全路径中提取文件名

           long size = item.getSize(); 

            if (name != null && !name.equals("") && size != 0) { 
           String filePath = System.currentTimeMillis() + "_" + name; 

                item.write(new File(uploadDir, filePath));

                Upload upload = new Upload(); 
                upload.setFileName(name); 
                upload.setFilePath("upload/" + filePath); 
                upload.setFileSize(size); 
                upload.setAddDate(new Date()); 

 

                list.add(upload); 

            } 

        } 

    }

 

处理文件上传的第一步是创建一个DiskFileUpload,为它设置临时目录,文件大小限制,内存缓存的大小。

得到DiskFileUpload实例后,调用parseRequest(request)解析请求,解析的结果是一个列表,因为我们可能上传多个文件。

现在可以循环得到的列表处理每一个FileItem,如果isFormField()返回false,表示当前FileItem对应一个上传的文件,下面就能从FileItem中获得文件名和文件大小,最后调用write()方法写入upload目录下。

 

 

文件上传时 浏览器端注意事项:

1.使用method="POST"。

 

 表单默认使用method="GET"提交请求,GET方式的请求是没有请求体(body)的,所有参数都将附加到url后传递给服务器。

 文件上传需要将二进制数据放到请求体(body)中,所以我们必须指定表单使用method="POST"。

 

2.为表单设置enctype="multipart/form-data"。

 

不设置enctype的情况表单只会把文件名传递到服务器,enctype的效果是把本地文件以二进制的形式附加到请求的body中,供服务器接收解析。

 

posted @ 2013-10-30 15:00  Mr.Ming2  阅读(270)  评论(0编辑  收藏  举报