通过FileUpload实现文件的上传
2016-06-18 14:04
399 查看
闲话不多说,直接上代码:
当我们使用上传时,需要通过form表单的post提交,并且设置表单属性enctype="multipart/form-data",该属性的表示表单向服务器发送的是二进制数据,这样就能够实现文件内容传输到后台服务器,同时表单的其他属性也会用二进制传输,那么request.getParameter()是不能获取表单内的数据的,那么该怎么获取上传的文件和其他属性呢?请继续向下阅读。
或许阅读的你会说,FileUpload的上传方式网上一抓一大把,博主的这篇有何特别之处?那么关键点来了,
items =upload.parseRequest(new ServletRequestContext(request));
网上大部分都使用的upload.parseRequest(request)当然我相信聪明的小伙伴们早就发现了此处的问题,我也是在此处查阅的大多数资料才发现,好了,FileUpload的上传已经搞定了,是不是很简单啊!
1.前台代码:
<form id="formobj" action="excel" name="formobj" method="post" enctype="multipart/form-data"> <span style="white-space:pre"> </span><input type="text" name="normal"/> <input type="file" name="uploadFile" id="uploadFile" /> <inpu type="submit" /> </form>
当我们使用上传时,需要通过form表单的post提交,并且设置表单属性enctype="multipart/form-data",该属性的表示表单向服务器发送的是二进制数据,这样就能够实现文件内容传输到后台服务器,同时表单的其他属性也会用二进制传输,那么request.getParameter()是不能获取表单内的数据的,那么该怎么获取上传的文件和其他属性呢?请继续向下阅读。
2.后台获取:
<span style="white-space:pre"> </span>// 判断表单提交方式是不是multipart/form-data boolean isMultipart = ServletFileUpload.isMultipartContent(request); //设置编码方式,防止中文乱码 request.setCharacterEncoding("utf-8"); /** * DiskFileItemFactory用户创建缓存文件的类 * 1.当上传的文件项目比较小时,直接保存在内存中(速度比较快)。 * 2.当上传的文件项目比较大时,以临时文件的形式,保存在磁盘临时文件夹(虽然速度慢些,但是内存资源是有限的)。 */ DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置存放缓存的文件夹 factory.setRepository(new File("D:\\cache")); // 设置缓存临界值,当上传文件大于该值,文件将缓存只缓存文件夹中,此处临界值为4kb factory.setSizeThreshold(1024 * 4); // 创建用于获取上传文件的操作类 ServletFileUpload upload = new ServletFileUpload(factory); // 设置最大文件尺寸,这里是4MB upload.setSizeMax(4*1024*1024); List<FileItem> items = null; boolean writeToFile = true; try { //关键所在,解析request获取表单内所有项,网上大多数是parseRequest(request),这样是不行的,要向下面这样 items =upload.parseRequest(new ServletRequestContext(request)); for(FileItem item : items){ //item代表请求正文中的一个表单输入项 if (item.isFormField()) { //如果是普通表单字段 String name = item.getFieldName(); String value = item.getString(); System.out.println("name:" + name + ", value:" + value); } else { //如果是文件字段 String fileName = item.getName(); if (writeToFile) { item.write(new File("D:\\upload\\" + fileName)); //此方法可删除临时缓存对象 item.delete(); } else { <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>InputStream uploadedStream = item.getInputStream(); <span style="white-space:pre"> </span>byte[] b = new byte[1024]; <span style="white-space:pre"> </span>String result = ""; <span style="white-space:pre"> </span>ByteArrayOutputStream out = new ByteArrayOutputStream(); <span style="white-space:pre"> </span>int length = 0; <span style="white-space:pre"> </span>while((length = uploadedStream.read(b)) != -1){ <span style="white-space:pre"> </span>out.write(b, 0, length); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>result = new String(out.toByteArray()); <span style="white-space:pre"> </span>System.out.println(result); <span style="white-space:pre"> </span> } } } } catch (FileUploadException e1) { e1.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }
或许阅读的你会说,FileUpload的上传方式网上一抓一大把,博主的这篇有何特别之处?那么关键点来了,
items =upload.parseRequest(new ServletRequestContext(request));
网上大部分都使用的upload.parseRequest(request)当然我相信聪明的小伙伴们早就发现了此处的问题,我也是在此处查阅的大多数资料才发现,好了,FileUpload的上传已经搞定了,是不是很简单啊!
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 自动共享和上传文件到兼容的托管站点
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序