一、文件上传 
        1.提供表单允许用户通过表单选择文件进行上传 
                表单必须是POST提交 
                文件输入框必须有name属性,只有有name属性的输入项浏览器才会进行提交 
                需要设置enctype属性值为multipart/form-data 
 
                POST /Day15/upload.jsp HTTP/1.1 
                Accept: text/html, application/xhtml+xml, */* 
                Referer: http://localhost/Day15/upload.jsp 
                Accept-Language: zh-CN 
                User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) 
                Content-Type: multipart/form-data; boundary=---------------------------7de1e62806e0 
                Accept-Encoding: gzip, deflate 
                Host: localhost 
                Content-Length: 394 
                Connection: Keep-Alive 
                Cache-Control: no-cache 
                Cookie: JSESSIONID=818C14110CA7BFD1FC90610866A220E8 
 
                -----------------------------7de1e62806e0 
                Content-Disposition: form-data; name="description1" 
 
                xxxx 
                -----------------------------7de1e62806e0 
                Content-Disposition: form-data; name="description2" 
 
                zzzz 
                -----------------------------7de1e62806e0 
                Content-Disposition: form-data; name="file1"; filename="ip.txt" 
                Content-Type: text/plain 
 
                192 
                -----------------------------7de1e62806e0-- 
 
        2.在Servlet中将上传的文件保存在服务器的硬盘中 
                DiskFileItemFactory  
                        public DiskFileItemFactory(int sizeThreshold, java.io.File repository)  
                         
                        public DiskFileItemFactory() 
                        public void setSizeThreshold(int sizeThreshold) --用来设定内存缓冲区的大小,默认是10k 
                        public void setRepository(java.io.File repository) --设定临时文件夹的大小 
 
                ServletFileUpload 
                        boolean isMultipartContent(HttpServletRequest request) 判断上传表单是否为multipart/form-data类型 
                        List parseRequest(HttpServletRequest request) 解析request对象,并把表单中的每一个输入项包装成一个fileItem 对象,并返回一个保存了所有FileItem的list集合。  
                        setFileSizeMax(long fileSizeMax) 设置单个上传文件的最大值 
                        setSizeMax(long sizeMax) 设置上传文件总量的最大值 
                        setHeaderEncoding(java.lang.String encoding) 设置编码格式,解决上传文件名乱码问题 
                        setProgressListener(ProgressListener pListener) 实时监听文件上传状态 
                         
                FileItem 
                        boolean isFormField() 判断FileItem是一个文件上传对象还是普通表单对象 
                         
                        如果是一个普通字段项可以调用: 
                                String   getFieldName()  获得普通表单对象的name属性 
                                String  getString(String encoding) 获得普通表单对象的value属性,可以用encoding进行编码设置 
                         
                        如果是一个文件上传项: 
                                String  getName() 获得上传文件的文件名(有些浏览器会携带客户端路径) 
                                InputStream getInputStream()  获得上传文件的输入流 
                                delete()  在关闭FileItem输入流后,删除临时文件 
 
 
                 
                文件存放应该注意的问题: 
                        1.upload文件夹和temp文件夹都要放在web-inf目录下保护起来,防止上传入侵和访问其他用户上传资源的问题 
                        2.文件名要拼接uuid保证唯一 
                        3.文件要分目录存储保证同一目录下不要有过多的文件,分目录的算法有很多,介绍了一种根据hash值分目录算法 
         
         
二、文件下载 
        response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename,"utf-8")); 
        response.setContentType(this.getServletContext().getMimeType(filename));//MIME类型 
                 
 
 
三、综合网盘 
         
        create database day15; 
        use day15; 
        create table netdisk( 
                id int primary key auto_increment, 
                uuidname varchar(255), 
                realname varchar(255), 
                savepath varchar(255), 
                ip varchar(100), 
                uploadtime timestamp, 
                description varchar(255) 
        ); 
 
 
        index.jsp --- 提供 上传 下载列表 
        upload.jsp --- 提供上传表单,允许用户选择文件进行上传 
        UploadServlet --- 保存上传的文件到服务器/在数据库中保存文件相关的信息 
        DownListServlet --- 查询数据库表找到所有可供下载的资源信息,存入request域后带到页面显示 
        downlist.jsp --- 遍历request中所有资源信息,提供下载连接 
        DownServlet --- 下载指定id的资源 
 
 
 
 
 
 
 |   
        
 
    
    
    
     
 
 |