日期:2014-05-18  浏览次数:20693 次

为什么用request.getInputStream()
public   void   doPost(HttpServletRequest   request,   HttpServletResponse   response)
throws   IOException,   ServletException   {
int   n,total=0;
Calendar   date   =   Calendar.getInstance(); //创建一个日历类
String   path   =   config.getServletContext().getRealPath( "/ ")   +   "uploadImages/ "   +   date.getTimeInMillis()   +   ".jpg "; //设置上传图片的路径
ServletInputStream   in   =   request.getInputStream(); //获得文件输入流
BufferedInputStream   fileIn   =   new   BufferedInputStream(in);
File   file   =   new   File(path);
FileOutputStream   out   =   new   FileOutputStream(file);
byte[]   b=new   byte[10240];

PrintWriter   writer   =   response.getWriter();
writer.println(request.getContentLength()+ " <p> ");
  while((n=fileIn.read(b))> 0){
total   =   total   +   n; //文件大小
out.write(b,   0,   n);
}
out.close();
fileIn.close();
in.close();
writer.println(path+ " <p> ");
writer.println(total);
writer.close();
}

上面servlet图片上传的代码,但是我的图片原来大小38000字节,传上去后就变成38450字节了,而writer.println(request.getContentLength()+ " <p> ");打印的也是38450字节,我把上传的文件名改长一点而大小还是38000字节,但是上传时打印出的是38700字节!!是不是在request.getInputStream()时,把表单里的文件路径和名称都读到输入流中了,然后写出来的时候,就有多的那些字节了?弄了一天都没搞清楚,高手指点下,在下感激不尽:)

------解决方案--------------------
文件在上载过程中,会在文件头和文件尾加一些数据
------解决方案--------------------
mark
------解决方案--------------------
你上传图片的时候会在文件头和尾加一下数据,并且在你的页面中的其他输入项也会包含在内,所以肯定要大于你的图片的大小了。