skg*_*skg 5 java servlets file-upload
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();
Run Code Online (Sandbox Code Playgroud)
剂量请求的getInputStream方法获取http头信息?
为什么上传的文件比原始文件大?
通常使用multipart/form-data编码来发送HTTP请求中的文件.这使得服务器能够在单个请求中区分多个表单数据部分(否则将无法在单个请求中发送多个文件和/或输入字段).每个部分由边界分隔,并在表单数据头之前.整个请求主体大致如下所示(以一个例子的形式与3个素<input type="text">字段具有名称name1,name2并且name3其具有的值value1,value2并value3填充的):
--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--
Run Code Online (Sandbox Code Playgroud)
使用<input type="file">名称file1的单个字段,整个请求正文如下所示:
--SOME_BOUNDARY
content-disposition: form-data;name="file1";filename="some.ext"
content-type: application/octet-stream
binary file content here
--SOME_BOUNDARY--
Run Code Online (Sandbox Code Playgroud)
因此,这基本上就是你所阅读的内容request.getInputStream().您应该从请求正文中解析二进制文件内容.这正是边界和表单数据标题,使您上传的文件看起来更大(实际上也已损坏).如果您使用的是servlet 3.0,则应该使用它request.getPart()来获取唯一的文件内容.
InputStream content = request.getPart("file1").getInputStream();
// ...
Run Code Online (Sandbox Code Playgroud)
如果您仍然使用2.5或更早的servlet,那么您可以使用Apache Commons FileUpload来解析它.
| 归档时间: |
|
| 查看次数: |
4656 次 |
| 最近记录: |