Java原生服务器接收上传文件 不使用MultipartFile类
由于工作中使用 MultipartFile与现有的一些上传文件组件冲突
所以使用其他的接收上传文件的方法.
首先我把 MultipartFile类的配置文件注释掉.
然后把原有的文件接收方法,改为此代码,
注释详细,就不多废话了:
/** *从request中获取上传的文件 *@warn后续需要删除处理文件上传时 *生成的临时文件,使用item.delete(); *@paramrequesthttp请求 *@paramencoding解码方式,传null默认utf-8 *@return返回的是一个FileItem集合 */ publicListgetUploadInputSteam(HttpServletRequestrequest,Stringencoding){ if(encoding==null||"".equals(encoding)){ encoding="UTF-8"; } List items=newArrayList (); //初始化需要解析文件的几个类 DiskFileItemFactoryfactory=newDiskFileItemFactory(); ServletFileUploadupload=newServletFileUpload(factory); upload.setHeaderEncoding(encoding); if(!ServletFileUpload.isMultipartContent(request)){ returnitems; } try{ //使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List 集合 //每一个FileItem对应一个Form表单的输入项 List list=upload.parseRequest(request); for(FileItemitem:list){ //如果fileitem中封装的是普通输入项的数据 if(item.isFormField()){ //Stringname=item.getFieldName(); ////解决普通输入项的数据的中文乱码问题 //Stringvalue=item.getString(encoding); //System.out.println(name+"="+value); }else{ StringfileName=item.getName(); if(fileName==null||fileName.trim().equals("")){ continue; } //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的, //如:c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt //处理获取到的上传文件的文件名的路径部分,只保留文件名部分 //fileName=fileName.substring(fileName.lastIndexOf("\\")+1); items.add(item); } } }catch(Exceptione){ e.printStackTrace(); returnitems; } returnitems; } @RequestMapping("/testUpload") @ResponseBody publicStringtestUpload(HttpServletRequestrequest)throwsException{ //获取文件集合 List items=getUploadInputSteam(request,"utf-8"); //取第一个做实验 FileItemitem=items.get(0); //上传的文件名 StringfileName=item.getName(); fileName=fileName.substring(fileName.lastIndexOf("\\")+1); //数据流获取,获得数据流你可以自由解析,保存等操作 InputStreamin=item.getInputStream(); //关闭流 in.close(); //最后一定要删除,item的临时文件 item.delete(); return"success!"; }
注意:
1.解析文件的类都来自 org.apache.commons的这个包
2.前端传来一定要写好表单的,action的url,enctype="multipart/form-data",post请求
3.input按钮指明type="file"name="xxx"然后还有 提交按钮 (使用ajax异步提交也行)
例如:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。