• 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中,供服务器接收解析。

  • 相关阅读:
    【六道无鱼】ExifTool编辑修改图片GPS
    【Elastic】Filebeat+ELK日志收集分析方案
    【Cesium】鹰眼地图功能
    【Cesium】3dtiles模型单体化
    【PHP】Version 7.2.13 报错 Fatal error: Call to undefined function curl_init()解决方案
    【ODM】win10 安装 webODM
    【数据库】mysql 删除多个关联的表
    【ElasticSearch】win10 安装elasticSearch 6.6.1
    【Cesium】视域分析 基于3dtiles做的视域分析
    缕清思路,继续前行
  • 原文地址:https://www.cnblogs.com/Dhouse/p/3396749.html
Copyright © 2020-2023  润新知