工作需要必须用C/C++写一个通过IE浏览器上传文件的CGI。页面端这样写:
<form enctype="multipart/form-data" action="/cgi-bin/loadfile.exe" method="post">
<input type="file" Name="FileName" size="40">
...(省略其它代码)
CGI
程序
那边,先用getenv("CONTENT_LENGTH")取到上传数据的长度,然后malloc一个buf,接着用一个wile循环调fread从stdin中读数据,但无论如何都读不够getenv("CONTENT_LENGTH")返回的长度。我在IIS和IBM HTTP SERVER(用的是Apache的核心)上都试过,都不行。
答案:
那是因为你没有把文件读模式改为二进制读, 这可是我摸索了好多天的成果, 现在吐血相告, 如果不给分, 哼哼! 记住啊...
-----------------------------------------
C++ 用法
// 设置读模式为二进制
_setmode(_fileno(stdin), _O_BINARY);
// 从
标准
输入读入数据
std::cin.read(buf, len);
// 恢复标准控制台读数据模式为文本模式
_setmode(_fileno(stdin), _O_TEXT);
C 的用法类似