之后我就尝试自己写,想使用servlet去完成这个问题,是写在action中的
//1. 创建工厂类 DiskFileItemFactory factory = new DiskFileItemFactory() ; factory.setSizeThreshold(4096) ;//设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile) ;//设置缓冲区目录 //2. 创建fileUpload对象 ServletFileUpload upload = new ServletFileUpload(factory) ; upload.setSizeMax(4*1024*1024) ;//设置最大文件尺寸,这里是4MB //3. 判断是否是上传表单 // boolean flag = upload.isMultipartContent(request) ; // if (!flag) { // //不是文件上传 // request.setAttribute("message", "对不起,不是文件上传表单!") ; // return ;//直接退出 // } //4. 解析request,获得FileItem项 List<FileItem> fileItems = new ArrayList<FileItem>(); try { fileItems = upload.parseRequest(request) ; //5. 遍历集合 for (FileItem item:fileItems) { //判断是不是普通字段 if (item.isFormField()) { String name = item.getFieldName() ; String value = item.getString() ; //手工转换 value = new String(value.getBytes("iso-8859-1"),"utf-8") ; System.out.println(name+" = "+value); }else{ //文件上传字段 //获得文件名 String fileName = item.getName() ; System.out.println("文件名称:"+fileName); fileName = fileName.substring(fileName.lastIndexOf("\\")+1) ; System.out.println("文件名称:"+fileName); //创建文件 ServletContext context = ((HttpServlet)request).getServletContext() ; String dir = context.getRealPath("/WEB-INF/upload") ; File file = new File(dir,fileName) ; file.createNewFile() ; //获得流,读取数据写入文件 InputStream ins = item.getInputStream() ; FileOutputStream fos = new FileOutputStream(file) ; int len ; byte[] buffer = new byte[BUFFER_SIZE] ; while ((len = ins.read(buffer))>0) { fos.write(buffer,0,len) ; } //关闭 fos.close() ; ins.close(); item.delete() ;//删除临时文件 request.setAttribute("message", "success") ; } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }但是 upload.parseRequest(request) ;获取的结果总是empty,一直想不明白了。。
String uploadTo = ""; try { request.setCharacterEncoding("utf-8") ; uploadTo = ServletActionContext.getServletContext().getRealPath("\\")+"upload\\" ; // uploadTo = request.getSession().getServletContext().getRealPath("\\")+"upload\\" ; initTemp();//初始化缓冲区 } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //1. 创建工厂类 DiskFileItemFactory factory = new DiskFileItemFactory() ; factory.setSizeThreshold(4096) ;//设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile) ;//设置缓冲区目录 //2. 创建fileUpload对象 ServletFileUpload upload = new ServletFileUpload(factory) ; upload.setSizeMax(4*1024*1024) ;//设置最大文件尺寸,这里是4MB //3. 判断是否是上传表单 // boolean flag = upload.isMultipartContent(request) ; // if (!flag) { // //不是文件上传 // request.setAttribute("message", "对不起,不是文件上传表单!") ; // return ;//直接退出 // } //是文件上传表单 MultipartHttpServletRequest multiPartRequest = (MultipartHttpServletRequest)request ; Iterator iterator = multiPartRequest.getFileNames() ; if(iterator.hasNext()) { String fileName = iterator.next().toString() ; System.out.println("******fileName*****"+fileName); MultipartFile multipartFile = multiPartRequest.getFile(fileName) ; System.out.println("********file.size():**********"+multipartFile); }
但是一直报一个错误,说的是MultiPartRequestWrapper cannot be cast to MultipartHttpServletRequest,要不然就重新写一个servlet,更繁琐,就再次看之前的
代码,这次看下去了。原来是使用的struts2的上传,我说呢,为什么老报莫名其妙的错误,原来是都是struts2的封装引起的。
html:
<%-- 记住这里需要设置enctype="multipart/form-data"--%> <s:form action="userInfo" method="post" enctype="multipart/form-data"> 导入Excel文件:<s:file name="uploadFile"></s:file> <br/> <s:submit value="导入"></s:submit> </s:form>Action:
private File uploadFile ;//上传的文件 private String uploadFileFileName ;//保存原始文件名 public void userinfo(){ String uploadTo = ServletActionContext.getServletContext().getRealPath("\\")+ "upload\\" + new SimpleDateFormat("yyyMMddHHmmssSS").format(new Date())+".xls" ; File toFile = new File(uploadTo) ; copyTo(srcFile,toFile) ;//上传 } public void copyTo(File srcFile,File toFile){ FileInputStream in = null ; FileOutputStream out = null ; try { in = new FileInputStream(srcFile) ; out = new FileOutputStream(toFile) ; byte[] buffer = new byte[BUFFER_SIZE] ; while (in.read(buffer) > 0) { out.write(buffer) ; } } catch (Exception e) { e.printStackTrace() ; }finally { try { if(null!=in){ in.close() ; } if(null!=out){ out.close() ; } } catch (Exception e) { e.printStackTrace() ; } } }

480

被折叠的 条评论
为什么被折叠?



