2010-04-21 8 views
7

के साथ पोस्ट का उपयोग कर सर्वर पर बाइनरी फ़ाइल भेजें क्यूटी में मुझे पोस्ट का उपयोग कर वेबसाइट पर एक स्क्लाइट फ़ाइल (बाइनरी फ़ाइल) भेजने की आवश्यकता है। तो मैं क्या करता हूं कि मैं फ़ाइल खोलता हूं और इसकी सामग्री को 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 

उत्तर

3

आपको QDataStream की आवश्यकता नहीं है। बस

body += file.readAll() 
7

शरीर को लिखने के लिए क्यूस्ट्रिंग का उपयोग न करें, इसके बजाय एक QByteArray का उपयोग करें। लाइन शरीर + = डेटा; ज्यादातर मामलों में पूरी फ़ाइल को शामिल नहीं करेगा।

डेटा एक QByteArray है और जब QString में परिवर्तित किया जाता है तो पहले \ 0 पर छोटा कर दिया जाएगा। आपकी अपलोड की गई फ़ाइल उपयोग योग्य नहीं होगी।

उत्तर में से किसी एक लिंक से दिए गए उदाहरण का उपयोग करें।

+1

स्वीकृत उत्तर आपके उत्तर में बताए गए कारणों के लिए गलत है। इसे क्लीयर करने के लिए शुक्रिया। –