A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cxc0603 中级黑马   /  2016-6-16 00:37  /  346 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、文件上传
        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的资源






0 个回复

您需要登录后才可以回帖 登录 | 加入黑马