2016-05-06 103 views
1

我正在使用QT將文件上傳到Web服務器。QT上傳(PUT)文件

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/ 

我使用大致是這樣的QT調用嘗試來完成相同的:

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)); 

現在這是我從服務器獲取:Web服務器使用下面的請求接受文件

File object is missing or invalid. 

與捲曲命令相比,有人可以停止QT部件丟失嗎?我想qt是錯過幕後捲曲的一些步驟。我寧願選擇不涉及手動將整個請求放在一起的解決方案。

回答

2

你應該做一些修改代碼:

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); 

,並採取重視與curl你讓POST請求,但與Qt - put。所以也用這個替換最後一行:

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

我補充了新的部分,但仍然沒有去。想法? – Mac

+0

@Mac在我編輯的答案上觀看。 – Evgeny

+0

更改爲帖子仍然是同樣的事情...我會盡力明天發佈完整的代碼 – Mac