Qt二进制文件上传

时间:2016-01-12 03:57:54

标签: qt

我使用Zendesk API上传文件。我可以毫无问题地上传文件,但是当我上传像word文档这样的二进制文件并在收到此错误后下载它时:

enter image description here

但如果我点击" OK"并选择"是"在下一个对话框中,word文档正确打开:

enter image description here

如果我上传普通文本文件然后下载它。它打开没有任何问题。

这是我用来发布二进制文件的代码片段。我已经尝试过遵循RFC 1867,看看我是否做得对。有什么想法或想法吗?

QString boundNumber = QString::number(qrand(), 10);
QString bound = QString("---------------------------" + boundNumber);


QByteArray data(QString("--" + bound + "\r\n").toLatin1());
data.append("Content-Disposition: form-data; name=\"action\"\r\n\r\n");

data.append("\r\n");
data.append(QString("--" + bound + "\r\n").toLatin1());
data.append("Content-Disposition: form-data; name=\"file\"; filename=\"");
data.append(finfo.fileName());
data.append("\"\r\n");
data.append("Content-Type:  application/octet-stream\r\n\r\n"); //data type

fileUpload.open(QIODevice::ReadOnly);
data.append(fileUpload.readAll());
data.append("\r\n");
data.append("--" + bound + "--\r\n");  //closing boundary according to rfc 1867
data += "Content-Disposition: form-data; name=\"desc\"\r\n\r\n";
data += "file upload\r\n";
data += "\r\n";

data.append(QString(bound + "--\r\n").toLatin1());

fileUpload.close();
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/binary");
request.setRawHeader(QString("Content-Length").toLatin1(), QString::number(data.length()).toLatin1());

更新

我修改它以便通过使用toLatin1()将其全部返回为QByteArray:

QByteArray data(QString("--" + bound + "\r\n").toLatin1());
data.append(QString("Content-Disposition: form-data; name=\"action\"\r\n\r\n").toLatin1());

data.append(QString("\r\n").toLatin1());
data.append(QString("--" + bound + "\r\n").toLatin1());
data.append(QString("Content-Disposition: form-data; name=\"file\"; filename=\"").toLatin1());
data.append(finfo.fileName().toLatin1());
data.append(QString("\"\r\n").toLatin1());
data.append(QString("Content-Type:  application/octet-stream\r\n\r\n").toLatin1()); //data type

fileUpload.open(QIODevice::ReadOnly);
data.append(fileUpload.readAll());
data.append(QString("\r\n").toLatin1());
data.append(QString("--" + bound + "--\r\n").toLatin1());  //closing boundary according to rfc 1867
data.append(QString("Content-Disposition: form-data; name=\"desc\"\r\n\r\n").toLatin1());
data.append(QString("file upload\r\n").toLatin1());
data.append(QString("\r\n").toLatin1());


data.append(QString(bound + "--\r\n").toLatin1());

但二进制文件的错误仍然相同

0 个答案:

没有答案