goAhead上实现文件上传到嵌入式Web服务器上
GoAhead WebServer的VxWorks实现与应用

a r g v ) ; e j i d参数作
G o A h e a d内核支 持使 用 S S L进行 数据 加
有线 通信 设 备是用 于远 距离 传输 的通 信 设备 ,不具有人机 交互 界面。实现有线通信设
备 的配置 只能通过 D c进 行 。 传 统 配 置 方 法 是
为J a v a S c i f p t 解释器句柄 ,用来调用 J a v a S c r i p t 相关 函数 。wp参数作 为浏览 器连接 的句柄 ,
密和认证 ,支持 摘要认 证机制 。同时用户管理
功 能 允许不 同 的用户 具有 不 同级别 的访 问权
限。
用来 调用 G o A h e a d 服 务器 函数 ,前 面这 两个
参 数 不 能 改 动 。a r g c和 a r g v包 含 传 递 给 a s p过 程 的 实 参 个 数 和 内容 。 3 . 2 配 置 系统 参 数
< / or f m >其 中 C C为 Go Ah e a d的 注 册 函 数 。 当
1 问题 的提 出及 分析
有 线 通 信 设 备 处 理 器 采 用 飞 思 卡 尔 出 品
用户提 交 f o r m时会 自动调用 C C对应 的系 统函 数并将用户 的配置参数传递进 函数 ,来达 到交
采用 基于 p c的上位 机软件 通过 网 口或者 串 口
G o A h e a d 的V x  ̄ k ) r k s 嵌入过程 来 进 行 。此 方 法 虽然 能 满 足配 置 需 求 ,但 是 存 2
在开发 、 调 试周期 长,不便于用户安装等不足 。
针 对 MP C8 6 0以 及 Vx Wo r k s 操作系统的特点 , 在 系 统 中 嵌 入 Go Ah e a dWe b S e r v e r , 可 以 在 Go A h e a d支 持 多 种 操 作 系 统 , 因 此 基 于V x Wo r k s的 应 用 也 比 较 简 单 。我 们 可 以在
基于GoAheadwebserver的应用开发

处理 G F r ; oo m 如果不包含 S I 仅要求 6K 的 内存; S, 0
w b 页面可 以存在 R M 或文件系统 中; 支持多种操 e O 作系统 ,并且移植非常方便 ;软件架构清晰 明了,只
效的交互 。要实现上述 B S架构 的管理 ,需要在设备 / 中 植 入嵌 入 式 w bevr e sre 。常 见 的 w bevr有 : es e r
置 的方法 。并 用实例详细说 明了 G Aha e sre 的开发步骤 ,以及动态数据和表单处理的实现过程 ,并 灵活 o e d bevr w
地与 jvsr t a aci 结合起来 ,有效地实现了 B S 的动态 数据交互 。 p /下 关键词 :嵌入式 w b 务器 ;G A edw bevr e服 o h a esre;动态 ;Esr t o o jci ;G F r p m
i e x ped nmi dt i eat nira zde et ey n / ci c r m i d i vsr tl il n h a l y a c a trco l e ci l o Sa ht t e o bn tj aci e b . t em , an i se i f v B r eu c e w ha pfx y
mii td p w b nh p 、ap e 。下面介绍 g aedw bevr t oh a e sre 的特
点及应用开发方法 。
l Go edwesre Aha bevr的特 点
G Aha esre o ed w bevr是一款 开放 源代码 的嵌入 式
Ke o d :m ed d e sre; o h a e s vrd nmi;jcitG F r yw rs e b d e bev rG A edw be e; y a cE sr ; o o w r p m
利用GoAhead构建嵌入式web应用

1 需求背景
• 廉价的硬件,功能强大的32操作系统,以及无处不在的因特网, 它们一起促成了网络应用和设备的飞速增长。大量的设备连接到 网络上,于是人们希望通过一种通用、熟悉、快捷的方式来访问 和控制它们。嵌入式web服务器正好迎合了这种需求,它们嵌入 在网络设备之中,使用标准的浏览器就可以远程访问和控制它们。
为了方便的创建具有高度交互性的动态网页goahead提供了asp过程和goforms函数绑定在一起只是分工不同asp过程用来生成显示在页面中的动态数据而goforms过程则用来处理用户输入和修改设置它们一起构成了goahead的核心
利用GoAhead构建嵌入 式web应用
培训的目的和要求
• 1、能够使用goahead构建嵌入式web服 务器 • 2、掌握和网页通信的方法 • 3、能把goahead的使用封装成一个类
• //清单1:home.asp(省略了其它无关的部分,细节请参考附带 源代码) • <html> • <head> • <% WriteMetaElement(); %> • </head> • … • <form action="/goform/UpdateConfig" method="post"> • <input type="text" name="interval" value="" size="7" /> • <input type="submit" name="ok" value="Update" /> • <input type="reset" name="cancel" value="Reset" /> • </form> • <% UpdateProcInfo(); %> • </html>
嵌入式WebServer GOAHEAD移植实验

实验十五嵌入式WebServer GoAhead 移植实验一,实验目的完成这个实验后,您将具有以下能力:⏹ 了解GoAhead webserver 的移植方法。
⏹ 学习如何使用GoAhead web 服务器。
二,基础知识进行本实验前,您应具有:⏹ C 语言基础⏹ Linux 环境下vi 编译器的使用⏹ Makefile 的编写和使用⏹ Linux 下的程序编译与交叉编译过程三,实验环境准备为了完成本实验,以下硬件条件是必需的:⏹ UP-NETARM2410-S 嵌入式实验平台⏹ PC 机Pentium500 以上,硬盘40G 以上,内存128M 以上为了完成本实验,以下软件条件是必需的:⏹ PC 机操作系统RedHat Linux 9.0⏹ ARM-LINUX 开发环境⏹ webs218.tar.gz 压缩包四,情景描述下载webs218.tar.gz 压缩包并且解压,之后对LINUX 目录下的main.c 程序和Makefile 进行改造,并且通过交叉编译器进行编译。
将生成的webs 程序在开发板上执行并测试。
五,实验基本原理1,GoAhead Webserver 介绍GoAhead Webserver是为了嵌入式设备的需要而设计的。
该Webserver软件很有特色且开源,它具有各种各样的特性,包括支持活动服务页,嵌入Java描述语言,in-process CGI 形式,SSL,文摘访问认证,用户管理和标准CGI等等,这些全部在一个60K大小的存储脚本中。
这对于那些需要在基于浏览管理模式的设备上传递动态信息的系统管理开发人员来说,是非常有用和高效的。
GoAhead Webserver支持多种开发平台和操作系统,包括Windows NT/98/95、Windows CE、Embedded Linux、Linux、VxWorks、QNX、Lynx等等,因此具有很强大的移植特性。
GoAhead 网络服务器的发展同时也促进了嵌入式网络服务器的源代码的进化。
嵌入式设备中上传文件方法总结

嵌⼊式设备中上传⽂件⽅法总结前⾔在研究嵌⼊式设备的过程中经常需要向设备中上传⼆进制⽂件,这⾥总结⼀下上传⽂件的⽅法。
ftpd服务busybox上⾃带ftpd服务,⽆⾝份验证,可以进⾏⽂件传输操作。
ftpd可通过设定inetd.conf由inetd启动,或者是使⽤tcpsvd作为单独的守护进程。
ftpd使⽤参数:Usage: ftpd [-wvS] [-t N] [-T N] [DIR]-w 允许上传-v 打印错误信息-S 错误信息写⼊SYSLOG-t 多长时间⽆操作算作空闲(默认2分钟, 2 * 60)-T 多长时间空闲后⾃动断开与客户端的连接(默认1⼩时,1 * 60 * 60)DIR FTP根⽬录tcpsvd可以建⽴TCP Socket,并将其绑定到某个程序上,命令格式如下:Usage: tcpsvd [选项] IP PORT PROG [PROG ARGS]IP: 要监听的IP地址PORT: 要监听的端⼝PROG: 要绑定的程序PROG ARGS: 绑定应⽤的参数选项:-l NAME, 本地主机名-u USER[:GRP], 绑定后切换到USER/GROUP-c N, 最⼤连接数-C N[:MSG] 同⼀个IP的最⼤连接数(MSG为超过时的响应信息)-v 打印详细输出使⽤tcpsvd启动ftpd:tcpsvd 0 21 ftpd -w /ftp_dir或者配置/etc/inetd.conf:21 stream tcp nowait root ftpd ftpd -w /ftp_dir启动inetd服务:/usr/sbin/inetd &busybox内置tftpd服务器服务端配置:mkdir /tftp_dircp /bin/busybox /tftp_dirudpsvd -vE 0 69 tftpd -c /tftp_dir & #0表⽰对所有ip地址都进⾏侦听客户端上传⽂件:busybox tftp -l test.txt -r test.txt -p 192.168.1.100客户端下载⽂件:busybox tftp -l test.txt -r test.txt -g 192.168.1.100利⽤python创建临时服务器如果设备中安装了python的话就可以使⽤python脚本搭建⼀个临时服务器,供telnet访问:import socketimport base64port = 55555filename = 'test.bin'sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind(('0.0.0.0', port))sock.listen(5)while True:connection,address = sock.accept()try:content = 'hello'f = file(filename)content = base64.b64encode(f.read())connection.sendall(content.strip())connection.close()except socket.timeout:print 'time out'connection.close()将⼆进制⽂件编码成⽂本⽂件,输出到telnet,再写⼊⽂件通过python解码成⼆进制⽂件:telnet 127.0.0.1 55555 | tee > temp.txttail -n +4 temp.txt > temp2.txtbase64 -d < temp2.txt | tee > test.bin另外还有通过ssh服务来上传⽂件的⽅法,这⾥不赘述了利⽤openssl实现⼆进制⽂件上传之前需要往⼀个只拿到了telnet权限但没有ftp、ssh服务的设备上上传⼆进制⽂件。
goAhead webServer应用开发文档

} return( null ) ; }
function clickedSetButton(form) {
var date; var year; var mon; var day; var hour; var min; var sec; year = js_getObjectByNameFromForm(form, "year");
字样时,Goahead 搜索名称为 name_cgientry 的函数,即请求的名称增加后缀_cgientry, 在保证请求完整时需要注意此点;另外需要注意的时 Cgi 任务的退出要使用 return,而不 是使用任务删除,return 退出后,系统会重新定位 stdin、stdout 等,否则由 Cgi 重定位的 输入输出会保持,会影响后续的其他类型的 web 请求。
内部资料
GoAhead webServer 应用开发文档
6、 参数传递,原则上参数可利用函数直接传递,但要注意函数参数的次序及已经 应用的缺省参数等问题,简单的方式是全局变量,目前作者是利用全局变量来 完成项目的。
下面已一个终端时间设置页面来说明上面的内容。 完成后的时间设置页面 web 视图:
文件上传的几种方法
⽂件上传的⼏种⽅法当我们想把⽂件上传到web服务器上时,通常有如下⼏种⽅法:⽅法1、html(form)+nginx(⽂件上传模块)+php:这种⽅式最复杂。
⼀般不⽤。
实现过程说明如下:步骤⼀:form中,action=“/upload”. 指定⼀个⽬录,⽽不是⼀个⽂件。
method都是POST.步骤⼆:在nginx中,安装⽂件上传模块进⾏编译安装。
然后配置⽂件中,对/upload访问⽬录进⾏配置。
指定相关参数。
并指定后端处理⽂件上传的php⽂件。
经过nginx转⼿,后端php获取的参数就是nginx传递的,不是前端form过来的。
步骤三:后端php⽂件对传递过来的⽂件信息进⾏处理。
需要配置php.ini,允许上传⽂件。
以上实现的⽅法,在之前的html备份⽂件中存在。
可以找到(html201908221746)。
nginx的备份⽂件:nginx.conf201908242138。
⽅法2、html(form)+nginx+php:这种⽅式常见,配置⽐较简单。
步骤⼀:form中,action=“/test.php”. 指定后端php⽂件,method都是POST.步骤⼆:nginx只做为web服务存在步骤三:php.ini中启⽤⽂件上传,指定⽂件临时存储路径等等。
步骤四:php⽂件处理前端传递过来的上传⽂件。
⽐如:html:<form enctype="multipart/form-data" action="test.php" method="post">选择⽂件:<input type="file" name="file" > <br><input type="submit" value="上传">php:$uploaddir = '/tmp/test/' ;$uploadfile = $uploaddir.basename ( $_FILES [ 'file' ][ 'name' ]);if ( move_uploaded_file ( $_FILES [ 'file' ][ 'tmp_name' ], $uploadfile )) {echo "File is valid, and was successfully uploaded.\n" ;} else {echo "Possible file upload attack!\n" ;}echo 'Here is some more debugging info:' ;注意:curl的file关键字和php中的$_FILES [ 'file' ][ 'tmp_name' ]中的file关键字对应。
GoAhead Web Server在嵌入式远程监控系统中的应用
GoAhead Web Server在嵌入式远程监控系统中的应用朱志刚;肖大薇;王颖【期刊名称】《软件》【年(卷),期】2014(000)007【摘要】This paper introduces the basic characteristics and running environment of GoAhead Web Server,combines with the status of embedded remote monitoring system,integrates embedded development platform,Linux operation system, GoAhead Web Server andInternet,designes a embedded remote monitoring system by which the user can monitor voltage transformation.The application results show that GoAhead Web Server reacts rapidly, reliable and stable. Its feasible to put into place, to achieve satisfied effect for the management and control of the embedded product.%文章对GoAhead Web Server的基本特点和运行环境进行了介绍,结合嵌入式远程监控系统的现状,将嵌入式开发平台、Linux操作系统、GoAhead Web Server和Internet融合在一起,设计了一个控制电压转换的嵌入式远程监控系统。
应用结果表明,GoAhead Web Server反应迅速,可靠稳定,在实际应用中具有可行性,对嵌入式产品的管理和控制可以得到满意的效果。
Web应用中的文件上传及其实现
Web应用中的文件上传及其实现文件上传是Web应用中常见的功能之一,在用户上传图片、文档、视频或其他文件的过程中,需要实现简单且高效的文件上传功能。
本文将从文件上传的基本原理入手,介绍文件上传的实现过程,以及文件上传过程中需要考虑的安全性、性能和用户体验等方面。
一、文件上传的基本原理在Web应用中,文件上传的基本原理是通过浏览器将文件传输到Web服务器上。
用户通过填写表单或者拖放文件的形式选择要上传的文件,然后点击上传按钮,浏览器会将文件发送到服务器端,服务器端接收到文件后进行处理。
在文件上传的过程中,可能需要对文件进行验证、存储、处理等操作。
下面将介绍文件上传的具体实现过程。
二、文件上传的实现过程1. HTML表单文件上传最常见的文件上传方式是通过HTML表单实现,用户通过<input type="file">标签在表单中选择要上传的文件,然后用户提交表单,浏览器会将文件上传到服务器端。
需要注意的是,表单的enctype属性必须设置为"multipart/form-data",同时还需要确保表单的method 属性为"post"。
示例代码如下:```<form action="/upload" method="post"enctype="multipart/form-data"><input type="file" name="file"><input type="submit" value="Upload"></form>```2. Ajax文件上传除了通过表单提交文件外,还可以使用Ajax技术实现文件上传。
通过JavaScript代码监听文件选择事件,将文件通过Ajax方式发送到服务器端。
移植goahead
1. GoAhead Web服务器介绍goAhead Web服务器,小巧、精致,提供了值得称道的性能,特别适合于嵌入式系统,因此,在很多嵌入式产品如路由器中都用到了goAhead作为嵌入式web 服务器。
goAhead Web服务器,具有如下特点:∙支持ASP;∙嵌入式的JavaScript,即Ejscript;∙支持内存中的CGI处理;∙快速响应,每秒中可处理超过65个请求;∙符合HTTP1.0/HTTP1.1标准;∙拥有众多扩展API,方便用户开发;∙支持SSL3.0(Secure Sockets Layer),如MatrixSSL(最新版本为:MatrixSSL 3-2);∙支持用户群组管理;∙支持DAA访问认证;∙占用很小内存,如果不包含SSL,仅要求60K内存;包含SSL,要求500K 内存;∙Web页面可存在于ROM或文件系统中;∙支持多种操作系统,如linux、wince、vxworks等等;当前最新版本为:WebServer 2.5,本次移植即是这个版本。
2. 获取Goahead源码包地址为:goAhead源码包,当前最新版本为:WebServer 2.5下载后,解压压缩包:#tar -xzvf webs-2-5.tar.gz#cd webs-2-5/3. goAhead源码结构进入goAhead的源码目录webs-2-5/,很容易了解其源码结构。
webs-2-5/| 各种OS移植子目录,分别有:CE、ECOS、LINUX、LYNX、MACOSX、NW、QNX4、VXWORKS、WIN| utils:当前只有webcomp.c,即网页编译器| www:存放web网页| wwwdemo:goAhead带的demo网页,里面包含了goAhead的一些文档| goAhead服务器源程序文件(C程序文件)从上面可以看到,goAhead支持window系统的,有兴趣的可以在PC机上移植试试。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
goAhead上实现文件上传到嵌入式Web服务器上本文内容概要:详细描述了在goAhead 2.5上如何实现文件上传(上传文件)到服务器端的功能。
开发环境:宿主机:Windows XP;虚拟机:Ubuntu 9.10;交叉编译器:arm-uclibc-gcc(arm-linux-gcc-4.3.2可以顺利编译通过)———————————————————————————————————1. 说明最近调试web文件上传到服务器功能,但在调试时,处理函数总是获取不到文件路径,百思不得其解,查了网上许多文章,但大多提到的是前端文件上传的原理、实现方式等,而未提供服务器端处理的实现(利用C函数实现)。
此外,由于对web不了解,花了些时间研究web程序。
2. goAhead实现文件上传的方法总得来说,goAhead上实现文件上传功能是比较容易的。
因为有现成的代码可用,稍微移植下即可。
2.1 实现原理使用html form即表单提交文件上传请求,web服务器核心处理接收客户端Post过来的文件数据(注意post的是二进制数据),最后,web服务器把接收到文件数据以二进制格式写到服务器本端存储系统。
2.2 前端设计前端设计比较简单,就是设计一个form,type属性为file,本人是在goAhead-2.5附带的wwwdemo的asptest.asp网页上增加了一个这样的form。
1.<html>2.<!- Copyright (c) Go Ahead Software Inc., 1999-2010. All Rights Reserved. ->3.<head>4.5.<!-- del by gyr 2011.10.156.<title>ASP Test Page</title>7.-->8.<title> new document </title><!-- add by gyr 2011.10.15 -->9.10.<link rel="stylesheet"href="/style/normal_ws.css"type="text/css">11.<% language=javascript %>12.13.function uploadFileSubmit()14.{15.// alert(document.getElementById("document.softupdate"));16. return;17.}18.19.</head>20.21.<body>22.23.<h1>ASP / JavaScript? Test</h1>24.<h2>Expanded ASP data: <% aspTest("Peter Smith", "112 Merry Way"); %></h2>25.26.<P>27.<% var z; \28. for (z=0; z<5; z z=z+1) \29. { \30. if (z<=2) \31. write(z+" is less than 3<br>"); \32. else if (z==3) \33. write(z+" is equal to 3<br>"); \34. else \35. write(z+" is greater than 3<br>"); \36. } \37.%>38.</P>39.40.41.42.43.<span style="color:#3333ff;"><!-- added start for test upload file by gyr 2011.10.15 -->44.<h1>GoForm upload file test</h1>45.<form id="softupdate"action=/goform/formUploadFileTest method=POST enctype="multipart/form-data">46.<table>47. Select file: <td><input id="fileupload"type="file"name="fileupload"size=60value=""></td>48.<td><input id="fileuploadsubmit"type="submit"name="update"value="update"onClick="uploadFileSubmit()"></td>49.</table>50.</form>51.<!-- added end for test upload file by gyr 2011.10.15 -->52.53.</span>54.55.</body>56.</html>其中,enctype参数用来设置表单的MIME编码方式,在进行文件(或同时包含文本框)上传时,必须将其属性设置为"multipart/form-data";formUploadFileTest 是web服务器定义的一个处理函数,用于把web服务器接收到的上传文件数据写到存储系统。
2.3 goAhead增加文件上传功能goAhead-2.5的源码中,是没有包含文件上传功能的,因此需要对goAhead-2.5增加文件上传功能。
本人使用v2.1.1版本的补丁,可从下载:免费下载地址在/用户名与密码都是具体下载目录在 /pub/2011/10/17/goAhead上实现文件上传到嵌入式Web服务器上/打补丁的时候不是很方便,需要利用对比工具,把文件上传功能的源码增加到goAhead-2.5中。
2.4 把上传文件写到存储系统在goAhead-2.5的源码main.c中增加文件上传form的处理函数:formUploadFileTest (),代码如下:1./******************************************************************************/2./*3. * for test html upload file to web server4. * add by gyr 2011.10.155. */6.7.static void formUploadFileTest(webs_t wp, char_t *path, char_t *query)8.{9.FILE * fp;10. char_t * fn;11. char_t * bn = NULL;12.int locWrite;13.int numLeft;14.int numWrite;15.16. printf("\n...................formUploadFileTest...................\n\n");17.18. a_assert(websValid(wp));19. websHeader(wp);20.21. fn = websGetVar(wp, T("filename"), T(""));22.if (fn != NULL && *fn != '\0') {23.if ((int)(bn = gstrrchr(fn, '/') + 1) == 1) {24.if ((int)(bn = gstrrchr(fn, '\\') + 1) == 1) {25. bn = fn;26. }27. }28. }29.30. printf("fn=%s, bn=%s .......\n", fn, bn);31.32. websWrite(wp, T("Filename = %s<br>Size = %d bytes<br>"), bn, wp->lenPostData);33.34.if ((fp = fopen((bn == NULL ? "upldForm.bin" : bn), "w+b")) == NULL) {35. websWrite(wp, T("File open failed!<br>"));36. } else {37. locWrite = 0;38. numLeft = wp->lenPostData;39.while (numLeft > 0) {40. numWrite = fwrite(&(wp->postData[locWrite]), sizeof(*(wp->postData)), numLeft, fp);41.if (numWrite < numLeft) {42. websWrite(wp, T("File write failed.<br> ferror=%d locWrite=%d numLeft=%d numWrite=%d Size=%d bytes<br>"), ferror(fp), locWrite, numLeft, n umWrite, wp->lenPostData);43.break;44. }45. locWrite += numWrite;46. numLeft -= numWrite;47. }48.49.if (numLeft == 0) {50.if (fclose(fp) != 0) {51. websWrite(wp, T("File close failed.<br> errno=%d locWrite=%d numLeft=%d numWrite=%d Size=%d bytes<br>"), errno, locWrite, numLeft, num Write, wp->lenPostData);52. } else {53. websWrite(wp, T("File Size Written = %d bytes<br>"), wp->lenPostData);54. }55. } else {56. websWrite(wp, T("numLeft=%d locWrite=%d Size=%d bytes<br>"), numLeft, locWrite, wp->lenPostData);57. }58. }59.60. websFooter(wp);61. websDone(wp, 200);62.63.}。