文件上传

前台注意事项

  1. form表单中没有name属性的值不会被提交
  2. 文件上传时表单提交方法必须使用post提交,因为get提交对提交内容大小有限制
  3. form的enctype属性必须设置为multipart/form-data,默认不写的情况下不会上传文件内容,只会提交文件名

common-fileipload

  1. 构件工厂 DiskFileItemFactory factory = new DiskFileItemFactory();
  2. 获得解析器 ServletFileUpload upload = new ServletFileUpload(factory);
  3. 对请求体进行解析 List list = upload.parseRequest(request);
  4. ​遍历list,fileItem.isFormItem()为true,则为普通数据;为false为文件数据
    > - 普通数据:fileItem.getFieldName() 表单name值
    fileItem.getString() 对应value值
    > - 文件数据:fielItem.getName() 文件名
    fileItem.getInputStream()

注意事项

  1. 设置文件上传缓冲区,超过缓冲区大小将产生临时文件,factory.setSizeThreshold(1024*1024) //1M缓冲区
  2. 设置文件上传临时目录
    File tmp = new File(getServletContext().getRealPath("/WEB-INF/tmp/"));
    factory.setRepository(tmp);
  3. 解决文件中文乱码问题
    upload.setHeaderEncoding("utf-8");
  4. 删除上传的临时文件
    fileItem.delete();
  5. 保证上传文件名唯一防止覆盖
    fileName = UUID.randomUUID().toString() + fileName;

文件下载

  1. 将超链接指向将要下载的资源
    DefaultServlet将资源返回,如果浏览器对资源文件不识别,则会询问用户是否下载
    资源存放在WEB-INF外,不能实现问文件的权限控制
  2. 用程序实现文件下载,返回文件的流

发表评论

电子邮件地址不会被公开。 必填项已用*标注