2010-04-21 2 views
7

В Qt Мне нужно отправить файл sqlite (двоичный файл) на сайт с помощью сообщения. Поэтому я открываю файл и пытаюсь прочитать его содержимое в QByteArray, который я с помощью QNetworkRequest может отправить на сервер. Я могу обработать запрос, когда файл отправляется на сервер, но файл просто пуст. Я читаю содержимое файла sqlite неправильно? (Я знаю, что файл excist). Вы видите что-то не так с моим кодом?Отправить двоичный файл на сервер с помощью сообщения с Qt

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 

ответ

3

Вам не нужен QDataStream. Просто сделайте

body += file.readAll() 
7

Не используйте QString для записи тела, вместо этого используйте QByteArray. Линия тело + = данные; в большинстве случаев не добавит весь файл.

данные являются QByteArray и при преобразовании в QString будут усечены при первом \ 0. Ваш загруженный файл не будет использоваться.

Используйте пример, указанный в ссылке, из одного из ответов.

+1

Принимаемый ответ неверен по причинам, указанным в вашем ответе. Спасибо, что разобрался. –

Смежные вопросы