//得到上传时生成的临时文件保存目录
String tempPath=this.getServletContext().getRealPath("文件地址");
//得到上传文件的保存目录
String savePath = this.getServletContext().getInitParameter("LunboPic");//在web.xml中的名称
File tmpFile=new File(tempPath);
//如果临时文件不存在,创建临时目录
if(!tmpFile.exists()){
tmpFile.mkdir();
}
// String message = "";
try{
//创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory=new DiskFileItemFactory();
//设置缓冲区的大小为100KB,如果不指定,那么缓冲区的大小默认是10KB
factory.setSizeThreshold(1024*100);
//设置上传时生成的临时文件的保存目录
factory.setRepository(tmpFile);
//创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
//监听文件上传进度
upload.setProgressListener(new ProgressListener(){
public void update(long pBytesRead, long pContentLength, int arg2) {
System.out.println("文件大小为:" + pContentLength + ",当前已处理:" + pBytesRead);
}
});
//设置上传单个文件的大小的最大值,目前是设置为1024*1024字节,也就是1MB
upload.setFileSizeMax(1024*1024);
//设置上传文件总量的最大值,最大值=同时上传的多个文件的大小的最大值的和,目前设置为10MB
upload.setSizeMax(1024*1024*10);
//4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
List<FileItem> list = upload.parseRequest(request);
for(FileItem item : list){
//如果fileitem中封装的是普通输入项的数据
if(item.isFormField()){
String name = item.getFieldName();
//解决普通输入项的数据的中文乱码问题
String value = item.getString("UTF-8");
//value = new String(value.getBytes("iso8859-1"),"UTF-8");
System.out.println(name + "=" + value);
}else{
//得到上传的文件名称,
String filename = item.getName();
System.out.println(filename);
if(filename==null || filename.trim().equals("")){
continue;
}
//解决上传文件名的中文乱码
upload.setHeaderEncoding("UTF-8");
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
//处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename = filename.substring(filename.lastIndexOf("\\")+1);
/**
* 将上传的文件保存到数据库
* @author baicai
* time上传时间
* filename文件名
* savePath文件路径
* */
Date date=new Date();
DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time=format.format(date);
LunboPicDao lu=new LunboPicDao();
LunboPic l=new LunboPic(savePath,filename,time);
lu.addPic(l);
//得到上传文件的扩展名
String fileExtName = filename.substring(filename.lastIndexOf(".")+1);
//如果需要限制上传的文件类型,那么可以通过文件的扩展名来判断上传的文件类型是否合法
System.out.println("上传的文件的扩展名是:"+fileExtName);
//获取item中的上传文件的输入流
InputStream in = item.getInputStream();
//得到文件保存的名称
String saveFilename = makeFileName(filename);
//得到文件的保存目录
String realSavePath = makePath(saveFilename, savePath);
//创建一个文件输出流
FileOutputStream out1 = new FileOutputStream(realSavePath + "\\" + saveFilename);
//创建一个缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = 0;
//循环将输入流读入到缓冲区当中
while((len=in.read(buffer))>0){
//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录
out1.write(buffer, 0, len);
}
//关闭输入流
in.close();
//关闭输出流
out1.close();
//删除处理文件上传时生成的临时文件
//item.delete();
response.getWriter().println("<script type='text/javascript'>location.href='lunbopic.jsp'</script>");
}
}
}catch (FileUploadBase.FileSizeLimitExceededException e) {
e.printStackTrace();
request.setAttribute("message", "单个文件超出最大值!!!");
request.getRequestDispatcher("/message.jsp").forward(request, response);
return;
}catch (FileUploadBase.SizeLimitExceededException e) {
e.printStackTrace();
response.getWriter().println("<script type='text/javascript'>alert('上传文件的总的大小超出限制的最大值!!!')</script>");
return;
}catch (Exception e) {
response.getWriter().println("<script type='text/javascript'>alert('上传失败!')</script>");
e.printStackTrace();
}
java+servlet如何实现对文件的上传
最新推荐文章于 2023-09-27 16:22:22 发布