CGI上传文件 file fp fopen

upload.html

<HTML>

<HEAD>

<TITLE>上传数据文件</TITLE>

<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML;CHARSER=UTF-8">

<link rel="stylesheet" type="text/css" href="css/main.css">

<script type="text/javascript">

function upload_file(){

if( document.getElementById('FILE1').value == '' ){

alert("请选择文件!");

return false;

}

document.getElementById('uploadInfo').innerHTML = '' ;

document.getElementById('uploadInfo').innerHTML = '<img src="images/wait.gif"><br>数据上传中,请稍候……' ;

document.getElementById('form1').submit();

}

</script>

</HEAD>

<BODY BGCOLOR="#FFFFFF">

<FORM METHOD="POST" id="form1" name="form1" ENCTYPE="multipart/form-data" ACTION="cgi-bin/uploadcgi.cgi">

选择文件:<INPUT TYPE="FILE" NAME="FILE1" id="FILE1"><INPUT TYPE="button" onclick="upload_file()" VALUE="上传"><br>

<center>

<div id="uploadInfo"></div>

</center>

</FORM>

</BODY>

</HTML>

#############################

uploadcgi.c

/**************************************************************************

2007-1-5 11:42 establish by lzh.A cgi program.

get a file from user's explorer.

***************************************************************************/

#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 "/var/landog/db_upload/"

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-8nn");

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)

{

nowReadLen = DEAL_BUF_LEN;

}

else

{

nowReadLen = contentLength;

}

contentLength -= nowReadLen;

if(fread(dealBuf,sizeof(char),nowReadLen,stdin) != nowReadLen)

{

ShowErrorInfo("读取恢复数据失败,请重试!");

exit(1);

}

nowReadP = dealBuf;

while(nowReadLen > 0)

{

switch (getState)

{

case STATE_START:

nowWriteP = signCode;

getState = STATE_GET_SIGN_CODE;

case STATE_GET_SIGN_CODE:

if(strncmp(nowReadP,"rn",2) == 0)

{

signCodeLen = nowWriteP - signCode;

nowReadP++;

nowReadLen--;

*nowWriteP = 0;

getState = STATE_GET_FILE_NAME;

//ShowErrorInfo(signCode);

}

else

{

*nowWriteP = *nowReadP;

nowWriteP++;

}

break;

case STATE_GET_FILE_NAME:

if(strncmp(nowReadP,"filename=",strlen("filename=")) == 0)

{

nowReadP += strlen("filename=");

nowReadLen -= strlen("filename=");

nowWriteP = fileName + strlen(FILE_SAVE_DIR);

while(*nowReadP != 'r')

{

if(*nowReadP == '\' || *nowReadP == '/')

{

nowWriteP = fileName + strlen(FILE_SAVE_DIR);

}

else if(*nowReadP != '"')

{

*nowWriteP = *nowReadP;

nowWriteP++;

}

nowReadP++;

nowReadLen--;

}

*nowWriteP = 0;

nowReadP++;

nowReadLen--;

getState = STATE_GET_FILE_START;

memcpy(fileName,FILE_SAVE_DIR,strlen(FILE_SAVE_DIR));

if((fp=fopen(fileName,"w"))==NULL)

{

fprintf(stderr,"open file errorn");

exit(1);

}

//ShowErrorInfo(fileName);

}

CGI上传文件 file fp fopen
break;

case STATE_GET_FILE_START:

if(strncmp(nowReadP,"rnrn",4) == 0)

{

nowReadP += 3;

nowReadLen -= 3;

getState = STATE_GET_FILE_CONTENT;

//ShowErrorInfo("get");

}

break;

case STATE_GET_FILE_CONTENT:

if(*nowReadP != 'r')

{

fputc(*nowReadP,fp);

}

else

{

if(nowReadLen >= (signCodeLen + 2))

{

if(strncmp(nowReadP + 2,signCode,signCodeLen) == 0)

{

getState = STATE_END;

nowReadLen = 1;

ShowErrorInfo("数据上传成功");

/* if( system( "/var/landog/app/sniff/db_recover.sh" ) == 0 ){

ShowErrorInfo( "数据库恢复完成,请重新启动landog" );

}else{

ShowErrorInfo( "数据库恢复过程中出现错误,错误原因:恢复的文件已经损坏" );

}

*/

}

else

{

fputc(*nowReadP,fp);

}

}

else

{

getState = STATE_CHECK_END;

nowWriteP = tmpSignCode;

*nowWriteP = *nowReadP;

nowWriteP++;

tmpLen = 1;

}

}

break;

case STATE_CHECK_END:

if(*nowReadP != 'r')

{

if(tmpLen < signCodeLen + 2)

{

*nowWriteP = *nowReadP;

nowWriteP++;

tmpLen++;

if(tmpLen == signCodeLen + 2)

{

*nowWriteP = 0;

if((tmpSignCode[1] == 'n')&&(strncmp(tmpSignCode + 2,signCode,signCodeLen) == 0))

{

getState = STATE_END;

nowReadLen = 1;

ShowErrorInfo("数据上传成功");

/* if( system( "/var/landog/app/sniff/db_recover.sh" ) == 0 ){

ShowErrorInfo( "数据库恢复完成,请重新启动landog" );

}else{

ShowErrorInfo( "数据库恢复过程中出现错误,错误原因:恢复的文件已经损坏" );

}

*/

}

else

{

//fprintf(fp,tmpSignCode);

fwrite(tmpSignCode,sizeof(char),tmpLen,fp);

getState = STATE_GET_FILE_CONTENT;

}

}

}

}

else

{

*nowWriteP = 0;

//fprintf(fp,tmpSignCode);

fwrite(tmpSignCode,sizeof(char),tmpLen,fp);

nowWriteP = tmpSignCode;

*nowWriteP = *nowReadP;

nowWriteP++;

tmpLen = 1;

}

break;

case STATE_END:

nowReadLen = 1;

break;

default:break;

}

nowReadLen--;

nowReadP++;

}

}

if(fp != NULL)

{

fclose(fp);

}

return 0;

}

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/100262.html

更多阅读

怎样使用LeapFTP上传文件 leapftp使用教程

本例用 LeapFTP v2.75 说明如何上传。怎样使用LeapFTP上传文件——工具/原料LeapFTP v2.75 怎样使用LeapFTP上传文件——步骤/方法怎样使用LeapFTP上传文件 1、下载安装leapftp。然后启动LeapFTP怎样使用LeapFTP上传文件 2、点 "Ad

FlashFXP使用方法 flashfxp自动上传文件

FlashFXP使用方法——简介软件介绍功能强大的FXP/FTP软件,融合了一些其他优秀FTP软件的优点,如:像CuteFTP一样可以比较文件夹,支持彩色文字显示;像BpFTP支持多文件夹选择文件,能够缓存文件夹;像LeapFTP一样的外观界面,甚至设计思路也差

最完整的ftp命令大全 ftp上传文件不完整

ftp有很多命令,熟悉这些命令你能大大的提高工作效率:FTP命令行格式为: ftp -v -d -i -n -g [主机名] ,下面是ftp命令的参数的解释其中 -v 显示远程服务器的所有响应信息;-n 限制ftp的自动登录,即不使用;、n etrc文件;-d 使用调试方式;-g

关于FTP命令小记 ftp命令上传文件

1,ftp 连接命令open 192.168.2.1002,ftp 连接服务器 获取文件命令get ra.tgz3,ftp 显示上传下载 速率binhash4,ftp 获取服务器上一个文件下所有文件。mget 文件夹名称注意:只能获得该文件夹下所有文件

支持图片外链的免费相册上传图片 台湾免费外链相册

六间房快捷贴图 – 免费图片上传空间+支持外链六 间房快捷贴提供无限免费图片上传空间,是六房间旗下的网站,不用注册也能上传文件,单张图片上传大小限制在6M以内,目前只支持的上传图片类 型:jpeg,jpg。支持多张图片同时上传,上传的图片将

声明:《CGI上传文件 file fp fopen》为网友忽然長大了分享!如侵犯到您的合法权益请联系我们删除