环境:1个小路由器,1个电脑的IE浏览器
状态:用浏览器连接192.168.0.1 到路由器上,看到路由器的web 配置界面(此界面是我编写的,开发用)。路由器上有http协议。 问题:如何通过这个web界面上传2进制文件到,路由器?
web 的html代码如下:<tbody>
<TR>
<TD class=option_td style="TEXT-ALIGN: left" width="30%">Select file
<INPUT class=browseinput type=file name=System <INPUT class=buttoninput type=submit value="Update" name=WebUpdatename></TD>
</TR>
</tbody
我有几个不明白的地方:
1、通过浏览器的web界面(客户端)选择上传文件:F:\777.txt ,然后点击update(上传按键),此时这个浏览器会以什么形式向我的路由器(服务器)发送777.txt数据?---Socket?http的tcp方式?
2、这个发送的过程是浏览器自动上传?还是由我的html里边写PHP程序来上传的? 我的理解是:在web界面里写相应的PHP上传程序,选择文件并按上传按键(update),然后web就通过socket向路由器发送数据包,路由器端监听到响应后,接收数据。
请大家帮忙分析一下,多谢各位!!
路由器页面开发: 就是你用html写几个简单的网页,存到路由器的Flash上,然后通过访问路由器的ip,路由器里的程序会把前编写的网页的html程序发出来给浏览器,这时候你就看到了配置界面。
感谢楼上各位,
3楼说:"只需要发送 Multi-Part Content 数据就行了. "。 请问 :这句话是不是这样理解---上传100M的文件 和发1K的文件 ,都是发送同样格式的、相同大小的、只是内容不同的一个数据包??Multi-Part Content :是什么内容,我在去搜索了解一下。
还想多问几个问题 1:通过浏览器 点击上传按键以后,上传的工作是由浏览器自己完成的????不需要我写代码来实现吧? 2:假如文件比较大--100M,点击上传后,是不是浏览器自动去多次往 action指定的地址上传??(action="http://192.168.0.2:10080/">) 假如多次上传的话,我的服务器端应该通过socket多次接收到消息,但是我就接受到了一次消息,通过网络抓包也就发现了一次http协议的 从客户端到服务器端的发包。 有截图,但是不知道怎么发到里边来。
大致如下:
Frame 925(686 bytes on write,686 bytes capured)
Ethernet II ,Src:
Internet prtocol,src:192.168.0.104,Dst 192.168.0.50
Transmission Control Protocol,src Port:ott
Hypertext Transter protocol
POST /192.168.0.2:10080 HTTP/1.1\r\n
Accept: image/git
Referer:
Accept language:zh-cn\r\n
Content-Type:
Accept-Encoding:gzip,deflate\r\n
user-agent: mozilla/4.0
Host: 192.168.0.50\r\n
Content-length:46------------------这个指什么长度?????connection:keep_Alive\r\n
catch-control_no catch
authorization:basic YWRtaw46YWRaw4=\r\n
Credentials:admin
Line-base text data:application/x-www-form-urlencoded
System=F%3A%5cexample.txt&Webupdataname=update
这以上部分是算发送的数据包的包头么?那发数据是应该什么时候发?在下一个数据包么》?
还是每次点击完上传后,就仅仅发送这么一个数据包?文件内容就不发送了? 麻烦各位继续指点迷津!! 多谢
2 如果上传大文件. 服务器一般会发送 HTTP 100 的头回应客户端.也就是说.你的HTTP数据包还是 130M 多些. HTTP头+HTTP 数据(包含 130M 左右的 上传文件 base64 数据), 上传的时候. socket 这一层面暂时不讲. tcp/ip 自动会分包发送的. 单 HTTP 这一层面. 发送一定量的数据后,服务器会返回 HTTP 100 的头. 然后这个头里会返回接收的数据位置. 你下次再 完成剩下的数据发送. 服务器再返回 HTTP 100, 如些反复....直到服务器返回 HTTP 200 成功的头.具体过程. 你抓取一个大文件上传的HTTP数据包,然后分析就明白了.关于 Multipart Content 请参阅 RFC2387 文档.
http://www.faqs.org/rfcs/rfc2387.html
<form method="POST" enctype="multipart/form-data" action="192.168.0.50/net">
<div id="label"><font class="font2">Web Update</font></div>
<div id="OptionDiv" align="center">
<table cellpadding="1" cellspacing="1" class="option" width="100%">
<tr>
<td class="option_td" width="30%" style="text-align:center">Select file
<input type=file size="20" name="System" value="Put Filename Here" class="browseinput">(*.z,*.txt,*.au)<INPUT TYPE=SUBMIT VALUE="Update" name="WebUpdate" class="buttoninput"></td>
</tr></table>
</div>
</form> enctype="multipart/form-data" --->这个东西刚开始没写,点击上传后,抓包发现没有上传数据。 现在加了这句话,抓包能抓到浏览器上传数据的部分了, 但是问题同时出来了,不加enctype="multipart/form-data"之前,点击上传之后没有上传数据,板子没死机;但是自从加上enctype="multipart/form-data"这句话后,能通过抓包发现,浏览器已经上传了文件,但是板子立马就死机了,没征兆,是不是因为板子不能解析发过来的东西??
我仅仅需要上传二进制文件,那么enctype="" 属性应该等于什么呢?》??
上传时 一定要写<form method="POST" enctype="multipart/form-data" action=""> 不写的话 浏览器不往板子里传数据。 接收时,要找到分隔符的头和尾 就能分出上传的数据的内容了。
要多抓包来尝试。