文件上传之FileItem使用
一、介绍
FileItem类的常用方法:
1.boolean isFormField()。isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段(true),还是一个文件表单字段(false)。因此可以用该方法判断是否是普通表单域还是文件上传表单域。
2.String getName()。getName方法用来获得文件上传字段中的文件名。
3.String getFieldName()。getFieldName方法用来返回表单标签的name属性的值。
4.void write(File file)。write方法将FileItem对象中的内容保存到某个指定的文件中。如果FileItem对象中的内容是保存在某个临时文件中,该方法完成后,临时文件可以会被删除。该方法也可以将普通表单字段保存在一个文件中,但最主要的用途是把上传的文件内容保存在本地文件系统中。
5.String getString()。getString()方法将FileItem对象中保存的数据流内容以一个字符串返回。它有两个重载形式。public Java.lang.String getString()和public java.lang.String getString(java.lang.String encodeing) throws java.io.UnsupportedEncodingException。前者使用缺省的字符集编码将主体内容转换成字符串,后者使用参数指定的字符集编码。如果在读取普通表单字段元素的内容时,出现了乱码现象,可以调用第二个方法,并传入正确的字符集编码名称。
6.String getContentType()。此方法用来获得上传文件的类型,即标段字段元素描述头属性“content-type”的值,如image/jpeg。如果FileItem对象对应的是普通的表单字段,将返回null。
7.boolean isInMemory()。判断FileItem对象封装的数据是保存在内存中还是硬盘中。
8.void delete()。此方法用来清空FileItem对象中封装的主体内容,如果内容是被保存在临时文件中,该方法会把临时文件删除。
9.InputStream getInputStream()。以流的形式返回上传文件的主体内容。
10.long getSize()。返回上传文件的大小。
二、使用例子
@POST @Consumes(MediaType.MULTIPART_FORM_DATA) @Path("/uploadFile") public void uploadFile(@Context HttpServletRequest request) { boolean isMultipart = ServletFileUpload.isMultipartContent(request); if(isMultipart){ FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); List<FileItem> list = null; try { list = upload.parseRequest(request); for(FileItem file : list){ if(file.isFormField()){ //普通的表单值 }else{ //获取文件名(带后缀名) String fileName = file.getName(); //获取文件输入流 InputStream input = file.getInputStream(); /* * 处理逻辑 */ } } } catch (Exception e) { // TODO: handle exception } } }