一般都是流没有刷新关闭的问题
// 判断上传表单是否为multipart/form-data类型
//创建请求上下文
RequestContext reqCtx=new ServletRequestContext(req);
if(ServletFileUpload.isMultipartContent(reqCtx)) {
try {
//1.创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录
DiskFileItemFactory factory=new DiskFileItemFactory();
//2.创建ServletFileUpload对象,并设置上传文件的大小限制
ServletFileUpload sfu=new ServletFileUpload(factory);
sfu.setSizeMax(10*1024*1024);//以byte为单位,不超过10m
sfu.setHeaderEncoding("utf-8");
//3.调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的list对象
List<FileItem> fileItemList=sfu.parseRequest(reqCtx);
Iterator<FileItem> fileItems=fileItemList.iterator();
//4.遍历list,每迭代一个FileItem对象,调用其isFormField方法判断是否是上传文件
while(fileItems.hasNext()) {
FileItem fileItem=fileItems.next();
if(fileItem.isFormField()) {
//普通表单元素
String name=fileItem.getFieldName();
String value=fileItem.getString("utf-8");//name对应的value值
System.out.println(name+"="+value);
if(name.equals("traveller")){
userId=value;
System.out.println(userId);
}else{
content=value;
System.out.println(content);
}
}else {
//<input type="file">上传文件的元素
String fileName=fileItem.getName();//文件名称
System.out.println("原文件名:"+fileName);//xxx.jpg
picName.add(fileName);
String suffix=fileName.substring(fileName.lastIndexOf('.'));
System.out.println("扩展名:"+suffix);//.jpg
//新文件名(唯一)
int num=(int)(Math.random()*900)+100;//100-999随机数
String newFileName=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+num+suffix;
System.out.println("新文件名:"+newFileName);//image/1478509873038.jpg
picPath.add(""+userId+"/"+newFileName);
System.out.println(picPath);
//5.调用FileItem的write()方法,写入文件
//
File file=new File("E:\\workspace\\Journey\\WebContent\\traveller\\message\\images\\"+userId+"\\"+newFileName);
System.out.println(file.getAbsolutePath());
//之前用FIleItem写入,但它没有刷新关闭的方法,还是采用流的方式好点
**InputStream in=fileItem.getInputStream();
@SuppressWarnings("resource")
FileOutputStream fos=new FileOutputStream(file);
int len=0;
byte[] buff=new byte[1024];
while((len=in.read(buff))!=-1){
fos.write(buff,0,len);
}
fos.flush();**
if(file.exists()){
System.out.println("文件已存在");
}else{
System.out.println("文件不存在");
}
//调用FileItem的delete方法,删除临时文件
// fileItem.delete();
//存储到数据库时注意1、保存源文件名称2、保存相对路径
// fileItem.
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
}