文件上传的简单方法:(原理性的实验)
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();
}
}