2010-04-21 5 views
7

Qt에서 게시물을 사용하여 웹 사이트에 sqlite 파일 (바이너리 파일)을 보내야합니다. 그래서 내가하는 일은 파일을 열고 QNetworkRequest의 도움으로 서버로 보낼 수있는 QByteArray로 파일의 내용을 읽는 것입니다. 파일이 서버로 전송되었지만 파일이 비어있는 동안 요청을 처리 할 수 ​​있습니다. 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

답변에 설명 된 이유 때문에 허용 된 대답이 잘못되었습니다. 그것을 지워 줘서 고마워. –

관련 문제