网站程序上传到服务器方法汇总(2)
作者:行云止水 来源:网页教学网 发布时间:2008-01-26 19:52:00
大文件上传
以前也做过文件上传,但都是些小文件,不超过2M。 这次要求上传100M以上的东西。 没办法找来资料研究了一下。基于WEB的文件上传可以使用FTP和HTTP两种协议,用FTP的话虽然传输稳定,但安全性是个严重的问题,而且FTP服务器读用户库获取权限,这样对于用户使用来说还是不太方便。 剩下只有HTTP。在HTTP中有3种方式,PUT、WEBDAV、RFC1867,前2种方法不适合大文件上传,目前我们使用的web上传都是基于RFC1867标准的HTML中基于表单的文件上传。
一、先简要介绍一下RFC1867(Form-based File Upload in HTML)标准:
1.带有文件提交功能的HTML表单
现有的HTML规范为INPUT元素的TYPE属性定义了八种可能的值,分别是:CHECKBOX, HIDDEN,MAGE,PASSWORD,RADIO,RESET,SUBMIT,TEXT。 另外,当表单采用POST方式的时候,表单默认的具有“application/x-www-form-urlencoded”的ENCTYPE属性。
RFC1867标准对HTML做出了两处修改:
(1)为INPUT元素的TYPE属性增加了一个FILE选项。
(2)INPUT标记可以具有ACCEPT属性,该属性能够指定可被上传的文件类型或文件格式列表。
另外,本标准还定义了一种新的MIME类型:multipart/form-data,以及当处理一个带有ENCTYPE="multipart/form-data" 并且/或含有<INPUT type="file">的标记的表单时所应该采取的行为。
举例来说,当HTML表单作者想让用户能够上传一个或更多的文件时,他可以这么写:
<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
File to process:
<INPUT NAME="userfile1" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
HTML DTD里所需要做出的改动是为InputType实体增加一个选项。此外,我们也建议用一系列用逗号分隔的文件类型来作为INPUT标记的ACCEPT属性。
... (其他元素) ...
<!ENTITY % InputType "(TEXT | PASSWORD | CHECKBOX |
RADIO | SUBMIT | RESET |
IMAGE | HIDDEN | FILE )">
<!ELEMENT INPUT - 0 EMPTY>
<!ATTLIST INPUT
TYPE %InputType TEXT
NAME CDATA #IMPLIED -- required for all but submit and reset
VALUE CDATA #IMPLIED
SRC %URI #IMPLIED -- for image inputs --
CHECKED (CHECKED) #IMPLIED
SIZE CDATA #IMPLIED --like NUMBERS,
but delimited with comma, not space
MAXLENGTH NUMBER #IMPLIED
ALIGN (top|middle|bottom) #IMPLIED
ACCEPT CDATA #IMPLIED --list of content types
>
... (其他元素) ...
2.文件传输延迟
在某些情况下,在确实准备接受数据前,服务器先对表单数据中的某些元素(比如说用户名,账号等)进行验证是推荐的做法。但是,经过一定的考虑后,我们认为如果服务器想这样做的话,最好是采用一系列的表单,并将前面所验证过的数据元素作为“隐藏”字段传回给客户端,或者是通过安排表单使那些需要验证的元素先显示出来。这样的话,那些需要做复杂的应用的服务器可以自己维持事务处理的状态,而那些简单的应用的则可以实现得简单些。
HTTP协议可能需要知道整个事务处理中的内容总长度。即使没有明确要求,HTTP客户端也应该提供上传的所有文件的内容总长度,这样一个繁忙的服务器就能够判断文件的内容是否是过大以至于将不能完整地处理,从而返回一个错误代码并关闭该连接,而不用等到接受了所有的数据才进行判断。目前一些现有的CGI应用对所有的POST事务都需要知道内容总长度。
如果INPUT标记含有一个MAXLENGTH属性,客户端可以将这个属性值看作是服务器端所能够接受的传送文件的最大字节数。在这种情况下,服务器能够在上传开始前,提示客户端在服务器上有多少空间可以用来进行文件上传。但是应该引起注意的是,这仅仅是一个提示,在表单被创建后和文件上传前,服务器的实际需求可能会发生改变。
在任何情况下,如果接受的文件过大的话,任何一个HTTP服务器都有可能在文件传输的过程中中断传输。
3.传输二进制数据的其他解决办法
有些人曾经建议使用一种新的MIME类型"aggregate",比如说aggregate/mixed 或是content-transfer-encoding "包"来描述那些不确定长度的二进制数据,而不是靠分解为多个部分来表示。虽然我们并不反对这么做,但这需要增加额外的设计和标准化工作来让大家接受并理解"aggregate"。 从另一方面来说,"分解为多部分"的机制工作得很好,能够非常简单的在客户发送端和服务器接受端加以实现,而且能像其他一些综合处理二进制数据的方式一样高效率地工作。
4.例子
假设服务器段提供的是如下的HTML:
<FORM ACTION="http://server.dom/cgi/handle"
ENCTYPE="multipart/form-data"
METHOD=POST>
What is your name? <INPUT TYPE=TEXT NAME=submitter>
What files are you sending? <INPUT TYPE=FILE NAME=pics>
</FORM>
用户在“姓名”字段里面填写"Joe Blow",对问题'What files are you sending?',用户选择
了一个文本文件"file1.txt"。
客户段可能发送回如下的数据:
Content-type: multipart/form-data, boundary=AaB03x
--AaB03x
content-disposition: form-data; name="field1"
Joe Blow
--AaB03x
content-disposition: form-data; name="pics"; filename="file1.txt"
Content-Type: text/plain
... file1.txt 的内容...
--AaB03x--
如果用户同时还选择了另一个图片文件"file2.gif",那么客户端可能发送的数据将是:
Content-type: multipart/form-data, boundary=AaB03x
--AaB03x
content-disposition: form-data; name="field1"
Joe Blow
--AaB03x
content-disposition: form-data; name="pics"
Content-type: multipart/mixed, boundary=BbC04y
--BbC04y
Content-disposition: attachment; filename="file1.txt"
Content-Type: text/plain
... file1.txt 的内容...
--BbC04y
Content-disposition: attachment; filename="file2.gif"
Content-type: image/gif
Content-Transfer-Encoding: binary
... file2.gif的内容...
--BbC04y--
--AaB03x--
猜你喜欢
- 前面我们曾介绍过如何注册Godaddy中文域名,今天我们就介绍一 * 册Godaddy中文域名后,几种付款方式。第一步:填写帐户注册信息,如果
- 马云收购口碑网,互联网江湖重现当年淘宝的烧钱令:碑2008年必须花掉多少亿,同时淘宝网在二手房等频道也给予口碑网巨大的流量支持。胆识胆识:胆
- 近日,国际知名的信息安全厂商卡巴斯基在沪举行了“自信自强,勇往直前”新闻发布会,揭开了卡巴斯基企业级新品的神秘面纱。据悉,新推出的卡巴斯基开
- 前几日写了2010年可能会出现的一些常见的网络骗局,经过多日的思索,今天决定写剩下的那些骗局了。并不是因为不知道写什么,而且不知道要怎样写,
- 随着QQ的普及应用,利用QQ群进行网络推广越来越受到推广人员的喜爱,应该说这是一种便于操作、成本低廉的网络推广方法,今天就让江礼坤来和大家分
- 严格来说,我根本算不上是个站长,可我一直以站长自居。每当有人问起我的职业,我都是说自己是站长,引来不少朋友的羡慕。还引来不少MM的仰慕。其实
- 我们有一些想做网站的站长们还有刚步入站长行业的朋友们,你们是否经常会为一些能买到称心空间而在发愁呢?刚做网站肯定不能投资太多资金了,所以我们
- 在忙活了一段时间后,网站建成了,接下来作为一个新站站长的你首先想到要做的可能就是让自己的网站早点被搜索引擎收录,早点让访问者通过搜索引擎找到
- 网赚,诈骗是避不开的一个话题。如果你是一个新手,骗子网站对你可能就是一场灾难!不仅N久的努力白忙活了,对新手的信心也是一个很大的打击。那么,
- 10月14日消息,瑞士信贷周二表示,受惠于2010年上半年对于新款服务器芯片-Nehalem的强劲需求,将有助于提高英特尔的收入。瑞士信贷因
- 北京时间11月14日早间消息,据国外媒体今日报道,尽管两家公司是竞争对手,但微软创始人、董事长比尔·盖茨(Bill G
- 大学生卖肉让人佩服,当“破烂王”能否被市民接受?说起“破烂王”,很多人立刻就会联想到那些蹬着破旧的三轮车,在社区的街巷里弄大声吆喝 “收破烂
- 个人网站越来越多,据说现在中国个人站长已经超过了3200万。而且由于CN域名一元促销活动的推动,越来越多的网民走向了个人站长的道理。但是,网
- 业界加密 TCP/IP 网络产品的标准是 SSL ,对于 Internet 上普遍使用的超文本传输协议(HTTP)而言,其加密后的协议称为
- 良好的内链通过增加内链提高搜索引擎排名。例如,写一篇有价值的文章,在其中的关键词上标注一个指向你的网站的链接可以促进网站排名。简洁明了的标题
- 如何使用Godaddy主机拷贝Account Manager的文件到自己选择的目的地去呢?首先. 登陆你的Account Manager.第
- 内容优化仍是目前SEO活动最关注的,因为你会不断地为网站或是博客增加内容,因此总有新的机会可以改善搜索引擎的可视度。但要在任何网站找到正确的
- 这里提供的下载和安装步骤,一步步下来,由于家里机器是XP,终于到了添加扩展名那步,发现最后的确定总是disable的,难道XP的IIS不支持
- 我们知道WIN2K系统最大的突破性和成功之一就在于它全新引入“活动目录(Active Directory)服务”,使得WIN2K系统Inte
- 据CNNIC今年7月发布的统计数据显示,目前中国网民中女性比例已经上升到46.4%,比2007年12月42.8%的女性网民比例上升了3.6个