上传,为什么比原来大?

Servlet doPost处理文件上传,

    InputStream in = req.getInputStream();

    File file = new File("c:/8.dat");
    OutputStream out = new FileOutputStream(file);
    byte[] buffer = new byte[1024];

    int len =0;
    while((len=in.read(buffer))!=-1){
        out.write(buffer, 0, len);
    }
    bao.close();
    out.close();
    in.close();

剂量请求的getInputStream方法获取http头信息?

为什么上传的文件比原文件大?


在HTTP请求中发送文件通常使用multipart/form-data编码完成。 这使得服务器能够在单个请求中区分多个表单数据部分(否则将无法在单个请求中发送多个文件和/或输入字段)。 每个部分都由边界分开,并以表单数据标题开头。 整个请求体大致如下所示(以3个普通<input type="text">字段的名称为name1name2name3的值填充值为value1value2value3的示例表单):

--SOME_BOUNDARY
content-disposition: form-data;name="name1"
content-type: text/plain;charset=UTF-8

value1
--SOME_BOUNDARY
content-disposition: form-data;name="name2"
content-type: text/plain;charset=UTF-8

value2
--SOME_BOUNDARY
content-disposition: form-data;name="name3"
content-type: text/plain;charset=UTF-8

value3
--SOME_BOUNDARY--

通过名称为file1的单个<input type="file">字段,整个请求主体看起来像这样:

--SOME_BOUNDARY
content-disposition: form-data;name="file1";filename="some.ext"
content-type: application/octet-stream

binary file content here
--SOME_BOUNDARY--

这基本上就是你通过request.getInputStream()读取的内容。 您应该将二进制文件内容解析出请求主体。 正是这个边界和表单数据头让你上传的文件看起来更大(实际上也损坏了)。 如果您使用的是servlet 3.0,则应该使用request.getPart()来获取唯一的文件内容。

InputStream content = request.getPart("file1").getInputStream();
// ...

如果您仍然使用servlet 2.5或更高版本,则可以使用其他Apache Commons FileUpload来解析它。

也可以看看:

  • 如何使用JSP / Servlet将文件上传到服务器?
  • 链接地址: http://www.djcxy.com/p/46205.html

    上一篇: upload, Why bigger than the original?

    下一篇: Having a html form take sql statements and outputting them