本文使用Apache提供的第三方文件上传控件进行文件上传
1.导入第三方commons-fileupload-1.3.2.jar和commons-io-2.5.jar包
2.页面form标签需添加enctype="multipart/form-data"属性(文件提交)并将methed
属性改为methed="post";
<form action="addService.jsp" method="post" enctype="multipart/form-data">
<p>
<lable>标题</lable>
<input type="text" name="titile"/>
</p>
<p>
<lable>图片</lable>
<input type="file" name="picPath"/>
</p>
<input type="submit" />
<input type="button" id="text">
</form>
3.后台接收
//判断是普通表单上传还是带文件上传的表单
if(!ServletFileUpload.isMultipartContent(request)){
//是普通表单上传则直接返回,因为普通表单和带文件上传的值获取方式不一样
return;
}
//new数据库实体类
News news=new News();
//创建工厂类
FileItemFactory factory=new DiskFileItemFactory();
//创建解析器
ServletFileUpload fileUpload=new ServletFileUpload(factory);
//使用解析器解析request对象,保存在FileItem集合中
List<FileItem> fileItemlist=fileUpload.parseRequest(request);
//循环遍历FileItem对象
for(FileItem fileItem:fileItemlist){
//判断是否是文件对象
if(fileItem.isFormField()){
//普通表单对象
//判断表单的name属性名
if(fileItem.getFieldName().equals("titile")){
//获取表单值并进行转码
news.setNtitle(fileItem.getString("UTF-8"));
}
}else{
//文件流对象操作
//获取文件名
String oldName=fileItem.getName();
//进行文件的重命名,以免名字相同覆盖(FilenameUtils是操作文件的常用库,)
String newName=UUID.randomUUID().toString()+"."+FilenameUtils.getExtension(oldName);
//获取保存文件的虚拟路径
//request.getServletContext()获取servlet容器对象,这里使用tomcat服务器,获取的tamcat对象
//getRealPath("images")获取实际路径,是在容器中的路径
String filePath=request.getServletContext().getRealPath("images");
//判断是否有该文件夹
File file=new File(filePath);
//判断这个抽象路径名的文件是否存在
if(!file.exists()){
//如果不存在,创建这个抽象路径命名的文件
file.mkdir();
}
//保存文件到该路径
fileItem.write(new File(filePath,newName));
}
}
扩展:FilenameUtils类方法
String getFieldName():获取表单项的name的属性值。
String getName():获取文件字段的文件名。如果是普通字段,则返回null
String getString():获取字段的内容。如果是普通字段,则是它的value值;如果是文件字段,则是文件内容。
String getContentType():获取上传的文件类型,例如text/plain、image。如果是普通字段,则返回null。
long getSize():获取字段内容的大小,单位是字节。
boolean isFormField():判断是否是普通表单字段,若是,返回true,否则返回false。
InputStream getInputStream():获得文件内容的输入流。如果是普通字段,则返回value值的输入流