0

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の何もない)

4

1 に答える 1

0

愚かな攻撃でした。

1)すべてのデータを取得するには、ループで読み取る必要があります。読み取りは、「部分的な」データで戻ります。

2) データがテキストの場合、カウントを正しくするには、Windows で stdin のファイル モードをバイナリに変更する必要があります。それ以外の場合は、読み取りによって carrage-returns が削除され、データ サイズが小さくなります。次に、予想よりもデータが少ないため、読み取りは最終的に返されません (stdin は EOF を返さず、ハングするだけです)。

すべてが良くなりました。

于 2012-08-04T17:03:00.167 に答える