jsp中的form表单:
<form action="servlet/ServUpload" method="post" enctype="multipart/form-data">
<input type="file" />
<input type = "submit" value="提交" />
</form>在ServUpload这个servlet中, 接受上传的文件, 并保存到指定目录, 如下代码:
DataInputStream in = new DataInputStream(request.getInputStream());
DataOutputStream os = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("path")));
byte[] bs = new byte[in.available()];
in.read(bs);
in.close();
os.write(bs);
os.flush();
os.close();我的疑问是, 为什么通过这种方式, 保存出去的文件都缺少内容呢(比如:图片无内容. 压缩包损坏. exe提示不是有效的win32程序). 我知道这个问题, 可以使用jspSmart 或者 FileUpload等解决. 但我只是疑问, 为什么request获取的HTTP正文类型, 正文长度都正确, 可是通过输出流输出成文件就是不能用呢?在此先多谢诸位!!

解决方案 »

  1.   

    那你要在write之前先查一下bs数组内容齐全了没有,或有可能的话,正确了没有
      

  2.   

    你要这样做的话,你必须先了解 HTTP 协议中关于 multipart/formdata 的数据结构!
      

  3.   

    int len;
    while ((len = in.read(bs)) != -1) {
     os.write(bs, 0, len);
     os.flush();
    }
      

  4.   

    还有很重的一点,你必须要给file起名字
      

  5.   

    因为通过request.getInputStream() 获取到的流里面不只你上传文件的数据,还有一些其他信息,比如你上传文件的名称,文件类型等,还有一些区分多个form 字段的信息。
      

  6.   

    楼上说的有道理,必须对request.getInputStream()这个流进行分析,提取出文件内容才行.