cgi上传文件返回显示问题

yopper_ 2013-11-14 09:42:36
出现如下问题:当上传的文件小cgi代码中的 printf("<script type='text/javascript' language='javascript'>alert('上传成功!');</script>"); 客户端显示正常,稍微大一点客户端就显示不出来。
不知道是怎么回事???
...全文
9186 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
evi_7 2014-12-18
  • 打赏
  • 举报
回复
楼主能把您的完整代码撸给我么,第一次做这个还是新手 好烦躁327561990@qq.com万分感谢
evi_7 2014-12-18
  • 打赏
  • 举报
回复
楼主,这个代码确定能上传文件到服务器么 ,我也找了个差不多的 修改通过后,还是没法传呢 有什么需要注意的么
yopper_ 2013-11-18
  • 打赏
  • 举报
回复
yopper_ 2013-11-14
  • 打赏
  • 举报
回复
web代码:
<form name='upload_form' method='post' action='/cgi-bin/upload.cgi' enctype='multipart/form-data' target='hidden_frame'>"); // target='_blank'
<input type='file' id='upload_file' name='upload_file' maxlength='128' size='15'/>  
<input type='button' onclick='uploadClick(this.form);' align='center' name='upload_commit' maxlength='128' size='45'  value='升级' style = 'height:20px'/>
<iframe id='hidden_frame' name='hidden_frame' style='display:none'></iframe>
</form>
function uploadClick(obj) {
    var upload_file = Fid("upload_file").getAttribute("value").Trim();
    if (upload_file == "") {
        Fid("upload_file").focus();
        alert("升级文件不能为空!");
        return;
    }
obj.submit();
}
yopper_ 2013-11-14
  • 打赏
  • 举报
回复
代码楼
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdarg.h>
#include <sys/time.h>
#include <time.h>
#include "cgic.h"
#include "cmc_pub.h"



#define MAX_FILE_BUF_LEN    1024




int cgiMain(void)
{
    cgiFilePtr file;
    int    targetFile;
    mode_t    mode;
    char name[128] = {0};
    char fileNameOnServer[64] = {0};
    char contentType[1024] = {0};
    char buffer[MAX_FILE_BUF_LEN] = {0};
    char cmd[256] = {0};
    char *tmpStr = NULL;
    int size;
    int got,t;
    int ret = 0;
    char errBuffer[64] = {0};

    do
    {
        cgiHeaderContentType("text/html");
        printf("\n\n");
        
        // 取得html页面中file元素的值,应该是文件在客户机上的路径名
        if ((ret = cgiFormFileName("upload_file", name, sizeof(name))) != cgiFormSuccess) 
        {
            sprintf(errBuffer, "%s", "获取升级文件名失败!");
            cmc_write_log("could not retrieve filename, ret: %d", ret);
            break;
        } 

        if ((ret = cgiFormFileSize("upload_file", &size)) != cgiFormSuccess)
        {
            sprintf(errBuffer, "%s", "获取升级文件大小失败!");            
            cmc_write_log("could not get file[%s] size, ret: %d", name, ret);
            break;
        }

        cmc_write_log("file: %s, size: %d", name, size);
        
        // 取得文件类型,不过本例中并未使用
        cgiFormFileContentType("upload_file", contentType, sizeof(contentType));
        
        // 目前文件存在于系统临时文件夹中,通常为/tmp,通过该命令打开临时文件。临时文件的名字与用户文件的名字不同,所以不能通过路径/tmp/userfilename的方式获得文件
        if ((ret = cgiFormFileOpen("upload_file", &file)) != cgiFormSuccess) 
        {
            sprintf(errBuffer, "%s", "打开升级文件失败!");            
            cmc_write_log("could not open the file, ret: %d", ret);
            break;
        }
        
        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;
            }
        }

        // cmc_upgrade.tar: epon和web.tar.bz2
        strcpy(fileNameOnServer, "/var/tmp/");
        strcat(fileNameOnServer, name+t+1);

        cmc_write_log("fileNameOnServer: %s, t: %d", fileNameOnServer, t);
        
        mode = S_IRWXU|S_IRGRP|S_IROTH;    
        // 在当前目录下建立新的文件,第一个参数实际上是路径名,此处的含义是在cgi程序所在的目录(当前目录))建立新文件    
        targetFile = open(fileNameOnServer, O_RDWR|O_CREAT|O_TRUNC|O_APPEND, mode);
        if (targetFile < 0)
        {
            ret = -1;
            sprintf(errBuffer, "%s", "创建新文件失败!");            
            cmc_write_log("could not create the new file, %s",fileNameOnServer);
            break;
        }
        
        
        // 从系统临时文件中读出文件内容,并放到刚创建的目标文件中
        while (cgiFormFileRead(file, buffer, MAX_FILE_BUF_LEN, &got) == cgiFormSuccess)
        {
            if (got > 0)
            {
                write(targetFile, buffer, got);
            }        
        }
        cgiFormFileClose(file);
        close(targetFile);
        
        
        cmc_write_log("File \"%s\" has been uploaded",fileNameOnServer);
        
    }while(0);

    if(errBuffer[0] != '\0')
    {
        printf("<script type='text/javascript' language='javascript'>alert('上传失败,%s');</script>", errBuffer);
    }
    else
    {
        printf("<script type='text/javascript' language='javascript'>alert('上传成功!');</script>");
    }
    
    return ret;
}

2,204

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧