您的位置:首页 > 编程语言 > Java开发

通过FileUpload实现文件的上传

2016-06-18 14:04 399 查看
闲话不多说,直接上代码:

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 上传 FileUpload