POST的JavaScript是
file = document.getElementById("upfName").files[0];
xhrObj = new XMLHttpRequest();
xhrObj.open("POST", llm.serverExe + '?dataUpload', true);
xhrObj.setRequestHeader("Content-type", file.type);
xhrObj.setRequestHeader("X_FILE_NAME", file.name);
xhrObj.send(file);
C ++中的cgi是
int iLen = atoi(getenv("HTTP_CONTENT_LENGTH"));
char* pBuff = <<allocates iLen bytes>>
read(0, pBuff, iLen);
如果我发送大约100k的文本(大约10k短线),iLen是正确的但是只有大约10k的数据,并且它的最后一部分是乱码的(大约1000行之后它再次开始显示在900行左右,显示100行,然后显示90k没什么)
答案 0 :(得分:0)
这是一次愚蠢的攻击。</ p>
1)你需要在循环中读取以获取所有数据,读取时返回“部分”数据。
2)如果数据是文本,则需要在窗口上将stdin的文件模式更改为二进制,以使计数正确。否则,读取将删除carrage-returns,使数据大小更小。然后由于数据少于您的预期,读取最终将不会返回(stdin将不会返回EOF,它只是挂起)。
现在好多了。