zoukankan      html  css  js  c++  java
  • 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中,供服务器接收解析。

  • 相关阅读:
    使用Ant自动化发布web工程
    分页过滤SQL求总条数SQL正则
    Spark-Java版本WordCount示例
    Apache-Tika解析Word文档
    Apache-Tika解析JPEG文档
    Apache-Tika解析HTML文档
    Apache-Tika解析XML文档
    Apache-Tika解析Excell文档
    @RestController注解的使用
    @ResponseBody注解的使用
  • 原文地址:https://www.cnblogs.com/Dhouse/p/3396749.html
Copyright © 2011-2022 走看看