1
2
3
4
5
6
7
8
9
10
11
|
void
Hungry()
{
if
(cgiFormCheckboxSingle(
"hungry"
) == cgiFormSuccess)
{
fprintf
(cgiOut,
"I'm Hungry!
);
}
else
{
fprintf
(cgiOut,
"I'm Not Hungry!
);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
char
*votes[] = {
"A"
,
"B"
,
"C"
,
"D"
};
void
NonExButtons()
{
int
voteChoices[4];
int
i;
int
result;
int
invalid;
char
**responses;
fprintf
(cgiOut,
"Votes (method 1):
);
result = cgiFormCheckboxMultiple(
"vote"
, votes, 4, voteChoices, &invalid);
if
(result == cgiFormNotFound)
{
fprintf
(cgiOut,
"I hate them all!
);
}
else
{
fprintf
(cgiOut,
"My preferred candidates are:\n"
);
fprintf
(cgiOut,
"
);
for
(i=0; (i < 4); i++)
{
if
(voteChoices[i])
{
fprintf
(cgiOut,
"
, votes[i]);
}
}
fprintf
(cgiOut,
"\n"
);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
"http://www.w3.org/TR/html4/strict.dtd">
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=utf-8"
>
<
title
>Test Upload
title
>
<
meta
name
=
"author"
content
=
"scorpio"
>
head
>
<
body
>
<
form
action
=
"cgi-bin/upload.cgi"
method
=
"post"
enctype
=
"multipart/form-data"
target
=
"_blank"
>
<
input
type
=
"file"
name
=
"file"
value
=
""
/>
<
input
type
=
"submit"
name
=
"submit"
value
=
"OK"
>
form
>
body
>
html
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#include
#include
#include
#include
#include
#include "cgic.h"
#define BufferLen 1024
int
cgiMain(
void
)
{
cgiFilePtr file;
int
targetFile;
mode_t mode;
char
name[128];
char
fileNameOnServer[64];
char
contentType[1024];
char
buffer[BufferLen];
char
*tmpStr=NULL;
int
size;
int
got,t;
cgiHeaderContentType(
"text/html"
);
//取得html页面中file元素的值,应该是文件在客户机上的路径名
if
(cgiFormFileName(
"file"
, name,
sizeof
(name)) !=cgiFormSuccess)
{
fprintf
(stderr,
"could not retrieve filename/n"
);
goto
FAIL;
}
cgiFormFileSize(
"file"
, &size);
//取得文件类型,不过本例中并未使用
cgiFormFileContentType(
"file"
, contentType,
sizeof
(contentType));
//目前文件存在于系统临时文件夹中,通常为/tmp,通过该命令打开临时文件。临时文件的名字与用户文件的名字不同,所以不能通过路径/tmp/userfilename的方式获得文件
if
(cgiFormFileOpen(
"file"
, &file) != cgiFormSuccess)
{
fprintf
(stderr,
"could not open the file/n"
);
goto
FAIL;
}
t=-1;
//从路径名解析出用户文件名
while
(1)
{
tmpStr=
strstr
(name+t+1,
"//"
);
if
(NULL==tmpStr)
tmpStr=
strstr
(name+t+1,
"/"
);
//if "//" is not path separator, try "/"
if
(NULL!=tmpStr)
t=(
int
)(tmpStr-name);
else
break
;
}
strcpy
(fileNameOnServer,name+t+1);
mode=S_IRWXU|S_IRGRP|S_IROTH;
//在当前目录下建立新的文件,第一个参数实际上是路径名,此处的含义是在cgi程序所在的目录(当前目录))建立新文件
targetFile=open(fileNameOnServer,O_RDWR|O_CREAT|O_TRUNC|O_APPEND,mode);
if
(targetFile<0)
{
fprintf
(stderr,
"could not create the new file,%s/n"
,fileNameOnServer);
goto
FAIL;
}
//从系统临时文件中读出文件内容,并放到刚创建的目标文件中
while
(cgiFormFileRead(file, buffer, BufferLen, &got) ==cgiFormSuccess)
{
if
(got>0)
write(targetFile,buffer,got);
}
cgiFormFileClose(file);
close(targetFile);
goto
END;
FAIL:
fprintf
(stderr,
"Failed to upload"
);
return
1;
END:
printf
(
"File %s has been uploaded"
,fileNameOnServer);
return
0;
}
|