goahead 版本: goahead-3.1.3-0
文件上传
所谓文件上传,就是把文件从PC传送到http服务器上。
-
websFormDefine("http_upload", get_http_upload_file);
-
void get_http_upload_file(webs_t wp, char_t *path, char_t *query)
-
{
-
WebsKey *s;
-
WebsUpload *up;
-
char *upfile;
-
char cmd_buf[64] = {0};
-
pid_t pid;
-
int rtn;
-
-
if (scaselessmatch(wp->method, "POST")) {
-
for (s = hashFirst(wp->files); s; s = hashNext(wp->files, s)) {
-
up = s->content.value.symbol;
-
if (!strcmp(up->clientFilename, "")) {
-
websReportError(wp, "Please select file!", NULL);
-
break;
-
}
-
-
upfile = sfmt("/tmp/%s", up->clientFilename);
-
rename(up->filename, upfile);
-
-
/*if value of up->clientFilename is 123.rar , now, we got a file /tmp/123.ara already */
-
}
-
}
-
-
return;
-
}
也就是说,执行了rename操作后,我们就得到了从浏览器传到服务器的文件.
文件下载
这里所说的下载,是指从HTTP服务器把文件传到浏览器所在PC上。
要实现下载,以流媒体为例,主要的是下面两行:
-
Contentp-type: application/octet-stream;
-
Content-Disposition: attachment; filename=config.gz
估计这两行之后的,都被认为是文件的内容。
假设抓包发现服务器发给浏览器的内容如下:
-
HTTP/1.1 200 OK
-
Server: GoAhead-http
-
Date: Wed Sep 4 02:02:58 2013
-
Transfer-Encoding: chunked
-
Connection: keep-alive
-
Contentp-type: application/octet-stream;
-
Content-Disposition: attachment; filename=config.gz
-
-
<html>
-
<script>location.href='../backup.htm'</script></html>
那么浏览器会谈出一个框让你选择保存路径,文件名默认是config.gz,而config.gz的内容就是:
-
<html>
-
<script>location.href='../backup.htm'</script></html>
注意
在projects/goahead-xxxx-xxxx-bit.h中对goahead需要用的各种资源做了限制,如POST的文件最大为16384字节
-
#ifndef BIT_GOAHEAD_LIMIT_POST
-
#define BIT_GOAHEAD_LIMIT_POST 16384
-
#endif
所以如果你要POST给goahead的文件大小超过了16384,那么你就得把这个限制放大点。
阅读(3014) | 评论(0) | 转发(1) |