文件上传和下载

文件上传和下载

1.文件上传

1.1文件上传表单的三个要素

  1. 表单的提交的方式需要是POST
  2. 表单中需要有<input type=”file”素,需要有name属性和值。
  3. 表单enctype=”multipart/form-data”

1.2文件上传的步骤

  1. 创建磁盘文件项工厂

    DiskFileItemFactory df = new DiskFileItemFactory();

  2. 创建核心文件解析类

    ServletFileUpload sf = new ServletFileUpload(df);

  3. 解析请求

    list list = sf.parseRequest(request);

  4. 遍历集合,判断请求项 for(FileItem f:list)

    1. 若不是普通项 ! f.isFormItem()

      获取文件名, f.getName()

      获取文件内容(输入流)f.getInputStream()

      创建输出流 getServletContext.getRealPath(“存储路径”) ; OutPutStream os = new fileOutPutStream(realPath+”\“+filename);

      IO流写入文件

    2. 普通项

      获取参数名 f.getFileName()

      获取内容 f.getString();//可传入编码格式解决中文乱码问题

1.3 文件上传的Servlet

//1.创建磁盘文件项工厂DiskFileItemFactory

//创建一个核心的解析类ServletFileUpload

//利用核心类解析Request,解析后会得到多个部分,返回一个list集合 parseRequest

//遍历list集合,得到代表每个部分的文件项的对象.根据文件项判断是否为文件上传项

isFormItem()

文件上传的API

1.4 DiskFileItemFactory:磁盘文件项工厂

sizeThreshold 设置文件上传的缓冲区大小,默认10kb

Repository 临时文件存放路径

1.5 ServletFileUpload:核心解析类

FileItemFactory

isMutipartContent:判断恩仇type属性是否为multipart/form-data

parseRequest:解析request对象,返回一个list集合(每个部分的文件对象)

setFileSizeMax:设置单个文件的大小

setSizeMax:设置上传文件的总大小

setHeaderEncoding :设置中文文件名乱码的问题

setProgressListener:设置监听文件上传的进度

1.6 FileItem

isFormField:是否为普通项

getFieldName:获得普通项名字

getString:获得普通项内容

getName获得文件上传项名称

getInputStream:获得上传项内容

1.7 getSize获得上传文件大小

getContentType:获得上传文件格式

delete删除临时文件

//相同文件名文件上传解决办法

UUID.randomUUID().toString().relplace(“-“,””)+fliename.substring(filename.lastIndexOf(“.”));

//同一文件夹文件过多解决

2.文件下载

2.1 文件下载流程

  1. 获取数据

    String filename = request.getParameter(“filename”);

  2. 设置两个头和一个输入流

    1. 设置两个头

      设置Content-Type

      response.setContentType(“getServletContext().getMimeType(filename)”);

      设置Content-Disposition

      response.setHeader(“Content-Disposition”,”attachment;filename=”+filename)

    2. 设置输入流

      String path=getServletContext().getRealPath(“/download”);

      InputStream is = new FileInputStream(path+”/“+filename);

  3. 获取输出流

    OutPutStream os = response.getOutputStream();

日历对象 Calendar

1
Calendar cal = Calendar.getInstance();

Calendar cal = Calendar.getInstance();