场景:公司需要使用cgi实现文件上传,上传结果的信息直接显示到web面。

其中涉及文件上传和保存的代码有:

    //保存文件上传文件到/tmp/test.tar.gz 
    std::ofstream ofs("/tmp/test.tar.gz");
    if(!ofs.is_open()){
        response(-1,"Failed to open the template file.");
    }
    
    // 获取要被上传的文件列表
    const_file_iterator file = cgi.getFile("userfile");
    if(file != cgi.getFiles().end()) {
        // 在 cout 中发送数据类型
        cout << HTTPContentHeader(file->getDataType());
        // 在 cout 中写入内容
        file->writeToStream(ofs);
    }

    ofs.close();
    cout<<"Result:Success."<<endl;

使用上面代码上传文件后,"Result:Success"的信息无法显示到页面上,而是保存到一个文件中:如下图

CGI返回信息无法打印到web页面的问题 

upgrade.cgi文件的内容如下:

CGI返回信息无法打印到web页面的问题

遇到这样子的问题,一直百度,google都没有类似的解决方案。

没有先例,只好自己一行一行代码注释,然后编译测试。

直到把 cout << HTTPContentHeader(file->getDataType()); 注释掉,"Result:Success"的信息才显示到web页面。

原来,在cgi中打开了文件流时,就不能使用标准输出流(cout)输出信息到页面,如果要使用标准输出流输出信息到页面,必须先关闭打开的文件流,否则使用cout输出的信息,都会重定向到与cgi可执行性文件同名的文件中。如:上图的upgrade.cgi为上传文件的可执行文件。





相关文章:

  • 2022-12-23
  • 2021-05-31
  • 2022-12-23
  • 2021-07-19
  • 2021-08-07
  • 2021-06-13
  • 2022-12-23
  • 2021-11-18
猜你喜欢
  • 2022-12-23
  • 2021-08-29
  • 2021-12-25
  • 2022-12-23
  • 2021-11-10
  • 2022-12-23
  • 2022-02-20
相关资源
相似解决方案