文件上传的简单方法:(原理性的实验)
1. <body>
<form action="upload" name="newForm" enctype="multipart/form-data" method="post">
(必须这么写。必须用Post方式提交。
application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。
multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
text/plain:窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。)
(设定文件域名和名字)
附件:<input type="file" name="file1"/>
<input type="submit" name="submit" value="submit"/>
</form>
</body>
2. public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
InputStream is = request.getInputStream(); //获得request的输入流
FileOutputStream fos = new FileOutputStream(new File("d:/testUpload.jpg"));
(输入流和输出流内容copy)
byte[] b = new byte[1024];
while(is.read(b)!=-1){
fos.write(b);
}
(一定要记得关闭打开的流资源。)
is.close();
fos.close();
}
使用commons-fileupload组件实现的基本上传:
1. 加jar包:commons-fileupload.jar, commons-io.jar
2. JSP页面中增加form:
<form enctype="multipart/form-data" method="post" action="uploadVideo">//必须!
<input type="file" name="file1"/>
<input type="submit" name="submit1" value="提交"/>
</form>
3. 增加servlet:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String tempDirectory = "d:/temp/"; //要在最后加上斜杠:temp/ 临时文件夹 上传成功之前存放缓存的位置
String fileDirectory = "d:/video/"; //要在最后加上斜杠:temp/ 上传成功后的文件所放的目录
try {
int sizeThreshold = 1024 * 64; //写满该大小的缓存后,存入硬盘中。
File repositoryFile = new File(tempDirectory);//将未完全上传成功的信息放到指定的临时文件夹
FileItemFactory factory = new DiskFileItemFactory(sizeThreshold, repositoryFile);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(500 * 1024 * 1024); // set every upload file'size less than 500M
List items = upload.parseRequest(request); //这里开始执行上传
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next(); //FileItem就是表示一个表单域。
if(item.isFormField()){ //isFormField方法用于判断FileItem是否代表一个普通表单域(即非file表单域)
System.out.println("***"+item.getFieldName());
}else {
// String fieldName = item.getFieldName(); //获取表单域name属性的值
// String fileName = item.getName(); //返回该文件在客户机上的文件名。e.g: e:\dianying\\video\1.wmv
// System.out.println("*****"+fieldName);
// System.out.println("*****"+fileName);
// String lastpath = item.getName();
// lastpath = lastpath.substring(lastpath.lastIndexOf(“.”));
File uploadedFile = new File(fileDirectory +new Date().getTime()+lastpath);
// String filename = UUID.randomUUID().tostring().replace(“-”,””) + lastpath;
// File uploadedFile = new File(fileDirectory + filename);
item.write(uploadedFile);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}