标签:load throw 数据流 单元素 image field com doctype 循环
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="servlet/upload" method="post" enctype= "multipart/form-data">
文件描述:<input type="text" name="desc" /><br/>
<input type="file" name="file" /><br/>
<input type="submit" value="上传" />
</form>
</body>
</html>
解析:enctype= "multipart/form-data" 是实现文件上传必不可缺少的属性,但是加了此属性之后,就不能以 request.getParameter(arg0); 来获取表单值,只能通过getFieldName()获取表单名,getString()获取表单值。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
fileUpload(request);
}
/*
*文件上传
*/
public void fileUpload(HttpServletRequest request) {
//磁盘文件工厂类DiskFileItemFactory主要是设置临时文件目录
DiskFileItemFactory diff=new DiskFileItemFactory();
diff.setSizeThreshold(10*1024*1024); //设置上传文件大小的临界值,大于这个值就先存在临时目录,然后在上传到服务器。小于这个值直接上传到服务器。10M
diff.setRepository(new File(this.getServletContext().getRealPath("tmp"))); //设置临时文件目录
//临时文件设置好之后,就可以处理上传的文件了。
ServletFileUpload upload=new ServletFileUpload(diff); //文件上传对象upload按照文件工厂diff的配置
/*接下来可以对request进行解析了,
*request的数据分为普通表单数据和文件,需要区别对待处理。
* 对request解析出来的是List<FileItem>类型的,一个表单值就是一个对象。
*/
List<FileItem> items=null;
try {
items=upload.parseRequest(request); //对request进行解析,解析出来的是List<FileItem>类型的
for(FileItem item:items){ //对表单里所有数据进行循环,然后对表单数据和文件数据区分处理
if(item.isFormField()){ //如果为表单数据
if("desc".equals(item.getFieldName())) { //如果表单元素的元素名是desc,
System.out.println("文件的描述为:"+item.getString("UTF-8")); //item.getString("UTF-8")解决乱码问题
}
}else{ //否则为文件数据
String path=this.getServletContext().getRealPath("upload"); //获取存放上传文件的文件夹真实路径(即在硬盘上的路径,而不是在项目中的相对路径)
OutputStream os=new FileOutputStream(new File(path+"/"+item.getName())); //用户上传文件的路径为path文件夹里,名字是item.getName()即上传时候的文件名
if(item.isInMemory()){ // 如果文件是直接存放在内存的,即小于临时文件的临界值,小于10M,可以直接将用户上传的文件直接拷贝到upload文件里。
os.write(item.get()); //item.get()得到用户上传的文件的数据流
}else{ //如果上传文件大小大于临界值,这个文件会现在临时文件夹tmp里,然后再上传到upload文件夹里。
IOUtils.copy(item.getInputStream(), os); //直接将用户文件的数据流拷贝到输出流即可
}
os.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
右击项目名,选择“properties”, 如图

打开图中的path:“C:\Users\Administrator\workspace” ,选择第一个文件夹


找到这个文件夹



找到项目名,点击进去:
即可找到upload或者tmp文件夹。
标签:load throw 数据流 单元素 image field com doctype 循环
原文地址:http://www.cnblogs.com/shyroke/p/6486668.html