文件上传之路
来源:互联网 发布:上海电脑数据恢复 编辑:程序博客网 时间:2024/06/04 20:11
之后我就尝试自己写,想使用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() ; } } }
- 文件上传之路
- struts之上传文件
- 文件上传之jspSmartUpload
- JAVA之"文件上传"
- ZendFramework之文件上传
- php之文件上传
- java之上传文件
- java之上传文件
- JavaWeb之文件上传
- servlet之上传文件
- android之文件上传
- JavaWeb之文件上传
- struts之文件上传
- 文件上传之 MultipartFile
- struts2之文件上传
- struts2之文件上传
- springMVC之文件上传
- 文件上传之smartupload
- android颜色对应的xml配置值
- 电脑花屏不一定是显卡问题
- Linux 下 Hadoop 安装准则
- QString 类的使用
- 自定义map比较规则及函数调用
- 文件上传之路
- Swift中文教程(十一) 方法
- MSP430学习笔记:UART
- powerdesigner导出表到word,不是正常的表格格式
- 【性能观察室】 android Trace view 工具使用
- 控制台的二叉树树形显示
- java的大数据
- Android电源管理
- 虚拟机中Linux系统不识别U盘问题的解决方案