欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

文件的上传和下载学习小结

程序员文章站 2022-04-24 16:07:00
文件的上传和下载学习小结 ......

文件的上传和下载学习小结

一、文件上传
客户端通过浏览器将文件上传至服务器。 对于我们写代码来说,就是IO操作。 二、实现文件上传 对表单有什么要求? 1. 提交方式必须为post 2. enctype="multipart/form-data" 3. <input type="file" name="photo"/> 对于服务器的servlet有什么要求? request.getParameter("name"); 不能用该方式获取表单数据了,若非要用,则返回null。 request.getInputStream(); 使用字节输入流获取数据了。 数据能够获取到了,但是需要解析。大神可以自己解析(就是一顿切割、取值)! 对于小小牛的我,使用 Apache 开源组织提供了一个用来处理表单文件上传的一个开源组件( Commons-fileupload ),它最主要的工作就是帮我们解析request.getInputStream()。 该组件性能优异,并且其API使用极其简单,可以让开发人员轻松实现web文件上传功能,因此在web开发中实现文件上传功能,通常使用Commons-fileupload组件实现。 Commons-fileupload commons-fileupload.jar commons-io.jar

        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload sfu = new ServletFileUpload();
        List<FileItem> fileItems = sfu.parseRequest(request);
        
        FileItem接口的方法:
            isFormFiled();        判断当前字段是否是普通文本字段,如果返回false,则说明是文件字段。
            getFileName();        获取字段名,例如:< input type="text" name="username" />,返回的是username。
            getString("UTF-8");   获取字段值,并解决上传普通文本表单出的乱码问题,如果是文件字段,那么获取的是文件内容,当然上传的文件必须是文本文件。
            
            getInputStream();     获取上传文件对应的输入流。
            getName();            获取文件字段的文件名称(如:a.txt)。
            getContentType();     获取上传的文件的MIME类型,例如:text/plain、image/pjpeg。
            getSize();            获取上传文件的大小。
            
            write(File file)      把上传的文件保存到指定文件中。
            delete();

三、文件上传需要考虑的几个问题
a、保证服务器的安全 把保存上传文件的目录放在用户直接访问不到的地方。 b、避免文件被覆盖 让文件名唯一即可。 c、避免同一个文件夹中的文件过多 方案一:按照日期进行打散存储目录 方案二:用文件名的hashCode计算打散的存储目录:二级目录 d、限制文件的大小:web方式不适合上传大的文件 设置单个文件大小 设置总文件大小 e、上传字段用户没有上传的问题 通过判断文件名是否为空即可。 f、临时文件的问题 如果上传文件过大,就会有临时文件。 FileItem.delete(); 如果自己用IO流实现的文件上传,则要在流关闭后,清理临时文件。 FileItem.write(File file); 把上传的文件保存到指定文件,该方式会自动删除临时文件,注意:实际操作不能够自动删除临时文件,所以需要手动删除(即:使用 FileItem自带的方法上传文件)。