2011-05-11 41 views
0

我想使用此代碼上傳可執行文件到服務器:QNetworkAccessManager:上傳可執行文件到Apache服務器

QFileDialog dialog(this); 
    dialog.setDirectory(QDir::home()); 
    QStringList fileNames = QFileDialog::getOpenFileNames(this,tr("Open File")); 
    if(fileNames.count() == 1) 
    { 
     QFileInfo fi(fileNames.at(0)); 

    } 

文件的路徑是可變的文件名的內容和我提取文件名fileNames.at(0)的路徑。 如何上傳文件.. 我與此代碼嘗試,但文件不會被上傳:

QByteArray postData; 

postData.append(path); 

QString url ="http://localhost/upload.php"; 
//type header 
req.setHeader(QNetworkRequest::ContentTypeHeader,"multipart/form-data"); 
req.setUrl(url); 

manager=new QNetworkAccessManager(this); 
reply=manager->post(req,postData); 

... 任何幫助,將不勝感激..

回答

0

我已閱讀上面的線,我用這段代碼嘗試,但問題remains..uploading失敗:

file=new QFile(path); 
file->open(QIODevice::ReadOnly); 
postData.append(file->readAll()); 

QString url ="http://localhost/uploadFile.php"; 
//type header 
req.setHeader(QNetworkRequest::ContentTypeHeader,"application/octet-stream"); 

req.setUrl(url); 

manager=new QNetworkAccessManager(this); 


reply=manager->post(req,postData); 
connect(manager,SIGNAL(finished(QNetworkReply*)),this,  SLOT(replyFinished(QNetworkReply*))); 

}

//////php file/////// 

// The software package name 
$fileName = trim($_POST['fileName']); 

// Make directory 
mkdir("files/$fileName"); 

// Upload file 
move_uploaded_file ($_FILES['upload'] ['temp_name'], "files/$fileName/{$_FILES['uploadFile'] ['name']}") 
+0

又是怎麼回事更大的文件。你正在閱讀...讓我們說一次400MB的文件到內存中。您只需傳遞QIODevice即可發佈,因此QNetworkAccessManager將在需要將更多數據放入套接字時讀取它。 – 2011-05-16 12:00:24