QTcpSocketを使用してHTTP経由でローカルにいくつかのファイルを提供しています。私の問題は、wgetだけがファイルを正しくダウンロードし、firefoxが最後に4バイトを追加することです。これは私が送信するヘッダーです:
HTTP/1.0 200 Ok
Content-Length: 382917;
Content-Type: application/x-shockwave-flash;
Content-Disposition: attachment; filename=file.swf;
これは、応答を送信するために使用されるコードです。
QTextStream os(socket);
os.setAutoDetectUnicode(true);
QString name = tokens[1].right(tokens[1].length() - 1);
QString resname = ":/" + name; // the served file is a Qt resource
QFile f(resname); f.open(QIODevice::ReadOnly);
os << "HTTP/1.0 200 Ok\r\n" <<
"Content-Length: " << f.size() << ";\r\n" <<
"Content-Type: application/x-shockwave-flash;\r\n" <<
"Content-Disposition: attachment; filename=" << name <<
";\r\n\r\n";
os.flush();
QDataStream ds(socket);
ds << f.readAll();
socket->close();
if (socket->state() == QTcpSocket::UnconnectedState)
{
delete socket;
}
上で述べたように、wgetはそれを正しく取得し、ファイルを適切にダウンロードします。問題は、Firefox(および私のターゲットアプリケーションであるFlash ActiveXインスタンス)がそうではないことです。
余分な4バイトは常に同じです。4E E9 A5 F4
16進ダンプhttp://www.freeimagehosting.net/uploads/a5711fd7af.gif
私の質問は、私が間違っていること、そしてそれを正しくするために何を変えるべきかということです。前もって感謝します。