使用post和Qt将二进制文件发送到服务器

使用post和Qt将二进制文件发送到服务器,qt,file,post,binary,Qt,File,Post,Binary,在Qt中,我需要使用post向网站发送一个sqlite文件(二进制文件)。因此,我要做的是打开文件并尝试将其内容读入QByteArray,在QNetworkRequest的帮助下,我可以将其发送到服务器。我可以在文件发送到服务器时处理请求,但文件只是空的。我读取sqlite文件的内容是否有误?(我知道档案管理员)你能看到我的代码有什么问题吗 QByteArray data; QFile file("database.sqlite"); if (!file.open(QIODevice::Read

在Qt中,我需要使用post向网站发送一个sqlite文件(二进制文件)。因此,我要做的是打开文件并尝试将其内容读入QByteArray,在QNetworkRequest的帮助下,我可以将其发送到服务器。我可以在文件发送到服务器时处理请求,但文件只是空的。我读取sqlite文件的内容是否有误?(我知道档案管理员)你能看到我的代码有什么问题吗

QByteArray data;
QFile file("database.sqlite");
if (!file.open(QIODevice::ReadWrite))
    return;

QDataStream in(&file);
in.setVersion(QDataStream::Qt_4_6);
in >> data ;

QString boundary;
QByteArray dataToSend; // byte array to be sent in POST

boundary="-----------------------------7d935033608e2";

QString body = "\r\n--" + boundary + "\r\n";
body += "Content-Disposition: form-data; name=\"database\"; filename=\"database.sqlite\"\r\n";
body += "Content-Type: application/octet-stream\r\n\r\n";
body += data;
body += "\r\n--" + boundary + "--\r\n";
dataToSend = body.toAscii();

QNetworkAccessManager *networkAccessManager = new QNetworkAccessManager(this);
QNetworkRequest request(QUrl("http://www.mydomain.com/upload.aspx"));
request.setRawHeader("Content-Type","multipart/form-data; boundary=-----------------------------7d935033608e2");
request.setHeader(QNetworkRequest::ContentLengthHeader,dataToSend.size());
connect(networkAccessManager, SIGNAL(finished(QNetworkReply*)),this, SLOT(sendReportToServerReply(QNetworkReply*)));
QNetworkReply *reply = networkAccessManager->post(request,dataToSend); // perform POST request

您不需要QDataStream。照办

body += file.readAll()

不要使用QString来写入正文,而是使用QByteArray。 线路 body+=数据; 在大多数情况下不会附加整个文件

数据是QByteArray,当转换为QString时,将在第一个\0处截断。 您上载的文件将不可用


使用其中一个答案的链接中提供的示例。

由于您的答案中解释的原因,接受的答案是错误的。谢谢你把它清理干净。