2010-04-21 32 views
7

Trong Qt, tôi cần gửi tệp sqlite (tệp nhị phân) đến trang web bằng cách sử dụng bài đăng. Vì vậy, những gì tôi làm là tôi mở tập tin và cố gắng đọc nội dung của nó vào một QByteArray mà tôi với sự giúp đỡ của QNetworkRequest có thể gửi đến máy chủ. Tôi có thể xử lý yêu cầu khi tệp được gửi tới máy chủ nhưng tệp chỉ trống. Tôi có đọc nội dung của tệp sqlite sai không? (Tôi biết rằng các excist tập tin) Bạn có thể thấy bất cứ điều gì sai với mã của tôi?Gửi tệp nhị phân đến máy chủ bằng cách sử dụng bài đăng với 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 

Trả lời

3

Bạn không cần QDataStream. Chỉ cần làm

body += file.readAll() 
7

Không sử dụng QString để viết nội dung, sử dụng QByteArray thay thế. Dòng cơ thể + = dữ liệu; sẽ trong hầu hết các trường hợp không nối thêm toàn bộ tệp.

dữ liệu là QByteArray và khi được chuyển thành QString sẽ bị cắt bớt ở đầu \ 0. Tệp đã tải lên của bạn sẽ không thể sử dụng được.

Sử dụng ví dụ được cung cấp trong liên kết từ một trong các câu trả lời.

+1

Câu trả lời được chấp nhận là sai vì những lý do được giải thích trong câu trả lời của bạn. Cảm ơn bạn đã xóa nó. –

Các vấn đề liên quan