我正在使用 QTcpSocket 通过 HTTP 在本地提供一些文件。我的问题是只有 wget 正确下载文件,firefox 在末尾添加了四个额外的字节。这是我发送的标题:
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 实例)没有。
四个额外的字节总是相同的:4E E9 A5 F4
十六进制转储 http://www.freeimagehosting.net/uploads/a5711fd7af.gif
我的问题是我做错了什么,我应该改变什么才能让它正确?提前致谢。