html 使用post方法,linux本地只需要往标准输出中写数据,数据会通过apache自动发送给html。
上传代码cgicupload.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEAL_BUF_LEN 1024
#define SIGN_CODE_LEN 100
#define FILE_NAME_LEN 64
#define FILE_SAVE_DIR "/home/liu/apache/http/cgi-bin/"
enum
{
STATE_START,
STATE_GET_SIGN_CODE,
STATE_GET_FILE_NAME,
STATE_GET_FILE_START,
STATE_GET_FILE_CONTENT,
STATE_CHECK_END,
STATE_END
};
/***************************************************************************
ShowErrorInfo
****************************************************************************/
static void ShowErrorInfo(char * error)
{
printf("Content-Type:text/html;charset=UTF-8\n\n");
printf("<center><font color='red'>%s</font></center>" , error );
}
/* 主体从这里开始 */
int main(void)
{
FILE *fp; /* 文件指针,保存我们要获得的文件 */
int getState = STATE_START;
int contentLength;/*标准输入内容长度*/
int nowReadLen;
int signCodeLen;
int tmpLen;
char *nowReadP;
char *nowWriteP;
char dealBuf[DEAL_BUF_LEN];
char signCode[SIGN_CODE_LEN]; /*存储本次的特征码*/
char tmpSignCode[SIGN_CODE_LEN];
char fileName[FILE_NAME_LEN];
memset(dealBuf,0,DEAL_BUF_LEN);
memset(signCode,0,SIGN_CODE_LEN);
memset(fileName,0,FILE_NAME_LEN);
nowReadLen = 0;
if((char *)getenv("CONTENT_LENGTH")!=NULL)
{
contentLength = atoi((char *)getenv("CONTENT_LENGTH"));
}
else
{
ShowErrorInfo("没有恢复数据!");
exit(1);
}
while(contentLength > 0)
{
if(contentLength >= DEAL_BUF_LEN)