java web 文件上传和下载_javaweb之文件上传和下载

一、文件的上传 1.客户端上传文件:在web页面中添加上传输入项 1).file属性必须有name属性才能够提交 2).上传用的表单必须是POST提交,因为GET提交的参数将以URL编码后的方式提交,大小限制在1K 3).上传用的表单设置enctype为multipart/form-data 2.服务端接受和处理文件 通过Apache提供的Commons-fileupload实现文件上传 1).DiskFileItemFactory---文件上传工具类,用来生产文件上传核心类 public DiskFileItemFactory(int sizeThreshold,File repository); public DiskFileItemFactory(); public void setSizeThreshold(int sizeThreshold); 如果不设置内存缓冲区大小,则默认值为10K,临时文件夹的位置和具体的操作系统有关,可以通过 System.getProperty("java.io.tmpdir")获取当前系统的默认临时文件夹的位置 2).ServletFileUpload---文件上传的核心类,可以用来解析request对象,将每个字段项或文件上传项封装为FileItem对象 组成集合后返回 常用方法: 1'.判断上传表单是否为multipart/form-data类型 boolean isMultipartContent(HttpServletRequest request) 2'.解析request对象,并把表单中的每一个输入项包装成一个fileItem 对象,返回一个保存了所有FileItem的list集合 List parseRequest(HttpServletRequest request) 3'.设置单个上传文件的最大值 setFileSizeMax(long fileSizeMax) 4'.设置上传文件总量的最大值 setSizeMax(long sizeMax) 5'.设置编码格式,解决上传文件名乱码问题 setHeaderEncoding(java.lang.String encoding) 6'.实时监听文件上传状态 setProgressListener(ProgressListener pListener) 3).FileItem---文件上传表单中,每个数据部分 常用方法: 1'.判断FileItem是一个文件上传项还是一个普通字段项 boolean isFormField(); 2'.如果是普通字段项,获得普通字段项的name属性 String getFieldName(); 3'.如果是普通字段项,获得普通字段项的value属性,可以用encoding进行编码设置 String getString(String encoding); 4'.如果是一个文件上传项,获得上传文件的文件名(有些浏览器会携带客户端路径) String getName(); 5'.如果是一个文件上传项,获得上传文件的输入流 InputStream getInputStream(); 6'.如果是一个文件上传项,在关闭FileItem输入流后,删除临时文件 delete();   3.分目录存储 1).同一个文件夹下的文件不能重名,此时用UUID改造文件名,使文件名独一无二 String uuidname = UUID.randomUUID().toString()+"_"+filename; 注:在IE6中,上传文件时,文件名有错误,上传的是文件的硬盘路径,要进行单独处理 filename = filename.substring(filename.lastIndexOf("\\")+1); 2).如果文件上传的目录不保护起来,用户可以上传任意的jsp文件,调用jsp文件执行任意代码,非常危险,所以应该将文件的上传 目录和临时文件目录放置在WEB-INF目录下保护起来 3).如果一个文件下文件过多,会导致访问非常缓慢,应该将上传的文件分目录存储 使用hashcode来实现分目录存储,根据文件名生成hashcode值为8位16进制表示形式,由于文件名不同,算出的hashcode基本 可以保证不会重复,在遍历这8位16进制数,每一位都生成一级目录,这样最终会有8级目录,每一级都有16个子目录。 二、文件下载 1.以流的方式或转发的方式将资源打给浏览器 2.设置Content-Disposition头设置为:attachment;filename=xxx.xx通知浏览器以附件的形式打开发送的数据;此处可以结合Content-Type头 来使用,设置Content-Type头,值为当前发送的文件的MIME类型。文件MIME类型可以servletContext.getMimeType(filename)来获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值