[转载] java文件上传原理

原创 2005年05月20日 17:27:00

转自:http://blog.csdn.net/keepeye/archive/2005/05/20/376972.aspx

    网页表单是一个
web基础设施,提供了交互接口,作为使用web技术的开发人员,了解其工作原理,是必须的功课,本文描述表单域和二进制数据一同传输并被处理.

         有关表单资料,若需要可参考http://www.htmlhelp.com/reference/html40/forms/form.html.

         有关表单资料,若需要可参考http://www.htmlhelp.com/reference/html40/forms/form.html.

    在表单元素中 enctype 属性指定了传递给服务器的表单数据集编码的内容类型,它的默认值是“application/x-www-form-urlencoded”,用于通常的数据提交格式,enctype 属性有三个值: application/x-www-form-urlencoded, multipart/form-data, text/plain, 它们都属于MIME类型,关于该类型请参考http://www.ietf.org/rfc/rfc2045.txt .

上传二进制数据时需要multipart/form-data, 并必须把表单属性method设为post, ACCEPT-CHARSET属性是表单处理器能够处理的编码字符集,若没有指定该属性,表单默认是UNKNOWN,可根据需要指定为iso-8850-1 utf-8,关于已经认可的标准字符集,请参考http://www.iana.org/assignments/character-sets.

基于javaservlet演示一个上载过程,并把上载的数据向用户直接返回.其代码为:

基于javaservlet演示一个上载过程,并把上载的数据向用户直接返回.其代码为:

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.util.*" %>

<form name="frm" enctype="multipart/form-data" method="post" action="param1.jsp">

<input type="text" name="test" value="测试"><br>

<input type="file" name="image" value="this is a image"><br>

<input type="submit" name="sub" value="upload">

</form>

</body>

</html>

   在表单中没有指定ACCEPT-CHARSET属性,在使用us-ascii编码时,表单域被处理为gb2312编码, multipart/form-data类型使用7-bit US-ASCII编码表单数据.

param1.jsp代码:

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.util.*" %>

<%@ page import="org.common.servlet.*" %>

<html>

<body>

<%

ServletOutputStream sos=response.getOutputStream();

int length= Integer.parseInt(request.getHeader("Content-Length"));

String contenttype=request.getContentType();

String enc=request.getCharacterEncoding();

response.setContentType(contenttype);

ServletInputStream sis= request.getInputStream();

    int count=0;

    byte[] b=new byte[2048];

    while((count=sis.read(b))!=-1){

    sos.write(b,0,count);

    }

    sos.flush();

%>

</body>

<html>

   首先该代码会报告错误: getOutputStream调用已经由getWriter执行了.不过程序仍然可以运行,在真正的应用中,把它写成servlet.就可解决.出现这个问题原因是serlvet规范指出在request上调用getOutputStreamgetWriter必须是二选一.

弹出对话框后问你是否打开或者是保存,点保存,然后打开结果你会看到:

-----------------------------7d52e1f4065c

Content-Disposition: form-data; name="test"

 

 

 

简化

-----------------------------7d52e1f4065c

Content-Disposition: form-data; name="file1"

 

 

 

三季稻看法上

-----------------------------7d52e1f4065c

Content-Disposition: form-data; name="image"; filename=""

Content-Type: application/octet-stream

 

 

 

 

 

 

-----------------------------7d52e1f4065c

Content-Disposition: form-data; name="sub"

 

 

 

upload

-----------------------------7d52e1f4065c—

   当你看到这个格式文件后,应该就理解了原来文件上传的原理就这么简单.

格式规定:每一行都是以回车换行(0xd0xa 1310)界定,每一个数据实体都以类似于-----------------------------7d52e1f4065c界定,最后的用户数据终止是以实体界定符号后加了两个连字符(--).

该格式一目了然, 实体界定符之间是表单域实体,该实体的name指定的串就是表单ui组件的name.其值是 回车换行+ui组件的值.

二进制数据实体多出了filenameContent-Type以便处理.

以上格式是遵守  http://www.ietf.org/rfc/rfc1867.txt 规范的,根据这个格式,我们可以编写自己的分析器来处理上传过来的数据.

通过这个具体实例,可加深对通信程序设计的理解.尤其是通信中控制数据和用户数据的设计和处理上.

 参考资料:

 参考资料:

http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type

http://www.faqs.org/docs/htmltut/forms/index.html

http://www.htmlhelp.com/reference/html40/forms/form.html

multipart/form-data 参考http://www.faqs.org/rfcs/rfc2388.html

java文件上传原理

  网页表单是一个web基础设施,提供了交互接口,作为使用web技术的开发人员,了解其工作原理,是必须的功课,本文描述表单域和二进制数据一同传输并被处理.   有关表单资料,若需要可参考http://...
  • keepeye
  • keepeye
  • 2005年05月20日 16:59
  • 5162

javaweb实现上传功能

e安教育 2017-03-08 09:42 1.要实现上传功能要注意以下几点 ①对于表单的限制 ②对于servlet的限制 只要添加了enctype="multipart/form-data"...
  • u011277123
  • u011277123
  • 2017年03月20日 19:41
  • 1009

文件上传原理实现

文件上传原理,文件上传原理实现,多文件上传思路
  • ybygjy
  • ybygjy
  • 2010年09月07日 18:22
  • 21754

Java 文件上传(原理)

package com.svse.upload; import java.io.FileOutputStream; import java.io.IOException; import javax.s...
  • yhc13429826359
  • yhc13429826359
  • 2012年05月03日 13:17
  • 4877

文件上传原理及流程

感谢原博主: http://blog.sina.com.cn/s/blog_8f32dc250100wva8.html 一、HTTP文件上传 html   type:类型 na...
  • tuntun1120
  • tuntun1120
  • 2017年06月28日 11:00
  • 499

从原理角度解析Android (Java) http 文件上传

文件上传是我们项目中经常使用的功能,一般我们的服务器可能都是web服务器,当我们使用非浏览器客户端上传文件时,比如手机(Android)等上传,可能就需要对传输的数据进行规范化的拼接,说白了,就是我们...
  • lmj623565791
  • lmj623565791
  • 2014年04月15日 20:04
  • 58631

java servlet实现上传文件代码及其原理说明

java servlet实现上传文件代码及其原理说明 源代码下载地址:http://www.zuidaima.com/share/1796583443106816.htm...
  • yaerfeng
  • yaerfeng
  • 2016年06月04日 10:14
  • 1712

java文件的上传与下载原理(使用Servlet)

在TCP/IP中最早出现文件上传机制的是FTP。它是将文件由客户端发送到服务器的标准机制。但是在JSP编程中不能使用FTP方法上传文件,这是由于jsp运行机制所决定的。 文件的上传:通过为表单...
  • u010180738
  • u010180738
  • 2016年08月18日 23:13
  • 300

javaweb文件上传原理

解决上传中文乱码问题-上传文件安全问题-上传文件被覆盖的问题-UUID算法 注意: 在HTML页面 input  必须有 name 表单如果包含一个文件上传输入项的话,这个表单的enct...
  • ChuJiangKeDeJiuShu
  • ChuJiangKeDeJiuShu
  • 2013年09月11日 10:10
  • 903

Servlet实现文件上传的原理

本文转自:http://www.ibm.com/developerworks/cn/java/fileup/ Servlet 是用 Java 编写的、协议和平台都独立的服务器端组件,使用请求/响应...
  • lixiaoxiong55
  • lixiaoxiong55
  • 2016年06月15日 18:11
  • 4521
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[转载] java文件上传原理
举报原因:
原因补充:

(最多只允许输入30个字)