使用fileupload,上传文件时,获取的文件名都正常,只有上传后的文件里面保存的是表单中的文本域,而不是原文件了,求解啊!!
这是我的servlet
response.setContentType("text/html; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
//从请求对象上获取session
HttpSession session = request.getSession();
// 使用Apache Common组件中的fileupload进行文件上传
//创建文件项工厂
DiskFileItemFactory df=new DiskFileItemFactory();
//极限、临界值,即硬盘缓存 1M
df.setSizeThreshold(1024*1024);
//贮藏室,即临时文件目录
df.setRepository(new File("D:/testFileUp"));
//负责上传文件的对象
//a.负责处理上传的文件数据 b.将每部分数据封装到FileItem对象中 c.将数据写入到临时文件目录中
ServletFileUpload upload=new ServletFileUpload(df);
//设置上传单个文件的最大容量50M
upload.setFileSizeMax(50*1024*1024);
Date date=new Date();
dirFormatter=new SimpleDateFormat("yyyyMM");
//定义表单文件名,表单中文件说明
String fileNameLong=null;
String fileState=null;
try
{
//解析请求对象
List<FileItem> items = upload.parseRequest(request);
//map集合用于存储文件项中的数据
Map<String, Object> fields=new HashMap<String, Object>();
FileItem item=null;
for (int i = 0; i <items.size(); i++) {
item=(FileItem) items.get(i);
//对文件项做判断
if(item.isFormField()){
//表单中的普通字段
fields.put(item.getFieldName(), item.getString("UTF-8"));
fileState=item.getString("UTF-8");//保存文件说明
}else{
fields.put(item.getName(), item);
fileNameLong=item.getName();//保存文件名
}
}
//获取文件后缀名
String ext=getExtension(fileNameLong);
//设置上传文件名(保存后的文件名)
String newfilename=date.getTime()+"."+ext;
//设置上传路径
String filePath="/XgxzUploadFile/"+dirFormatter.format(date);
// 判断文件夹是否存在,不存在则创建
File dirTest = new File(filePath);
if (!dirTest.exists())
{
dirTest.mkdirs();
}
//文件路径+生成后文件名
String newPathName=filePath+"/"+newfilename;
//写入文件(上传文件)
// item.write(new File(newPathName));
//获取item中的上传文件的输入流
InputStream input = item.getInputStream();
//创建一个文件输出流
FileOutputStream output = new FileOutputStream(newPathName);
//创建一个缓冲区
byte[]b=new byte[1024];
//判断输入流中的数据是否已经读完的标示
int len=0;
//循环将输入流读入到缓冲区当中,(len=input.read(b))>0就表示in里面还有数据
while((len=input.read(b))>0){
//使用outputStream输出流将缓冲区的数据写入到指定的目录(newPathName)当中
output.write(b, 0, len);
}
output.flush();
input.close();
output.close();
item.delete();