2016-05-06 9 views
1

Ich verwende QT, um eine Datei auf einen Webserver hochzuladen. Der Web-Server akzeptiert Dateien mit der folgenden Anforderung:QT hochladen (PUT) eine Datei

curl -X POST -H 'Content-Type:multipart/form-data' 
-H 'Authorization: Token <token>' 
-F '[email protected]_to_upload.txt' 
https://some.web.site/api/v2/files/contents/ 

verwende ich etwa so aus QT, das gleiche zu erreichen, um zu versuchen ruft:

QHttpMultiPart multiPart(QHttpMultiPart::FormDataType); 
QHttpPart filePart; 

file.open(QIODevice::ReadOnly) 

filePart.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data"); 
filePart.setBodyDevice(file); 
multiPart.append(filePart); 

QNetworkAccessManager mgr; 
QNetworkRequest req(url); 
req.setRawHeader("Authorization", ("Token <token>").data()); 

QNetworkReply * reply(mgr.put(req, &multiPart)); 

Gerade jetzt ist das, was ich von dem Server erhalten:

Kann jemand aufhören, was der QT Teil im Vergleich zum Curl Befehl fehlt? Ich würde raten, dass qt einen Schritt hinter den Kulissen fehlt. Ich bevorzuge eine Lösung, bei der ich die gesamte Anfrage nicht manuell zusammenstellen muss.

Antwort

2

Sie sollten einige Code-Änderungen vornehmen:

file.open(QIODevice::ReadOnly); 

//add next lines 
filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/zip")); //or whatever type of your file. 
filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\"")); 
filePart.setHeader(QNetworkRequest::ContentLengthHeader, file.size()); 

//and your other code 
filePart.setBodyDevice(file); 
multiPart.append(filePart); 

Und auch die Aufmerksamkeit nehmen, dass mit curl Sie POST Anfrage machen, aber mit Qt-put. Also auch die letzte Zeile mit dieser ersetzen:

QNetworkReply * reply = mgr.post(req, &multiPart); 
+0

Ich fügte hinzu die neuen Teile, aber immer noch nicht gehen. Ideen? – Mac

+0

@Mac Uhr auf meine bearbeitete Antwort. – Evgeny

+0

geändert, um immer noch das gleiche zu schreiben ... Ich werde versuchen, morgen den vollen Code zu posten – Mac