使用QtQNetworkRequest上载文件
我在尝试使用QNetworkRequest将文件上载到服务器时遇到了一些问题。我一直将此链接()主要用作模板,但仍然会出现POST错误(具体来说是203)。这是我到目前为止所拥有的使用QtQNetworkRequest上载文件,qt,file-upload,qnetworkaccessmanager,Qt,File Upload,Qnetworkaccessmanager,我在尝试使用QNetworkRequest将文件上载到服务器时遇到了一些问题。我一直将此链接()主要用作模板,但仍然会出现POST错误(具体来说是203)。这是我到目前为止所拥有的 void MainWindow::processFile(){ QByteArray postData; //Look below for buildUploadString() function postData = mReport->buildUploadString();
void MainWindow::processFile(){
QByteArray postData;
//Look below for buildUploadString() function
postData = mReport->buildUploadString();
QUrl mResultsURL = QUrl("http://" + VariableManager::getInstance()->getServerIP() + "/uploadFile.php");
QNetworkAccessManager* mNetworkManager = new QNetworkAccessManager(this);
QString bound="margin"; //name of the boundary
QNetworkRequest request(mResultsURL); //our server with php-script
request.setRawHeader(QString("Content-Type").toAscii(),QString("multipart/form-data; boundary=" + bound).toAscii());
request.setRawHeader(QString("Content-Length").toAscii(), QString::number(postData.length()).toAscii());
connect(mNetworkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(printScriptReply(QNetworkReply*))); //This slot is used to debug the output of the server script
mNetworkManager->post(request,postData);
}
QByteArray ReportParser::buildUploadString()
{
QString path = VariableManager::getInstance()->getReportDirectory();
path.append("\\\\");
path.append(getReportFileName());
QString bound="margin";
QByteArray data(QString("--" + bound + "\r\n").toAscii());
data.append("Content-Disposition: form-data; name=\"action\"\r\n\r\n");
data.append("uploadFile.php\r\n");
data.append(QString("--" + bound + "\r\n").toAscii());
data.append("Content-Disposition: form-data; name=\"uploaded\"; filename=\"");
data.append(getReportFileName());
data.append("\"\r\n");
data.append("Content-Type: text/xml\r\n\r\n"); //data type
QFile file(path);
if (!file.open(QIODevice::ReadOnly)){
qDebug() << "QFile Error: File not found!";
return data;
} else { qDebug() << "File found, proceed as planned"; }
data.append(file.readAll());
data.append("\r\n");
data.append("--" + bound + "--\r\n"); //closing boundary according to rfc 1867
file.close();
return data;
}
void主窗口::进程文件(){
QByteArray postData;
//查看下面的buildUploadString()函数
postData=mReport->buildUploadString();
QUrl mResultsURL=QUrl(“http://”+VariableManager::getInstance()->getServerIP()+“/uploadFile.php”);
QNetworkAccessManager*mNetworkManager=新的QNetworkAccessManager(此);
QString bound=“margin”;//边界的名称
QNetworkRequest请求(mResultsURL);//我们的服务器使用php脚本
request.setRawHeader(QString(“内容类型”).toAscii(),QString(“多部分/表单数据;boundary=“+bound).toAscii());
request.setRawHeader(QString(“Content Length”).toAscii(),QString::number(postData.Length()).toAscii());
connect(mNetworkManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(printScriptReply(QNetworkReply*));//此SLOT用于调试服务器脚本的输出
mNetworkManager->post(请求、postData);
}
QByteArray ReportParser::buildUploadString()
{
QString path=VariableManager::getInstance()->getReportDirectory();
路径。追加(“\\\”);
append(getReportFileName());
QString bound=“margin”;
QByteArray数据(QString(“-”+bound+“\r\n”).toAscii();
data.append(“内容处置:表单数据;名称=\“操作\”\r\n\r\n”);
data.append(“uploadFile.php\r\n”);
data.append(QString(“--”+bound+”\r\n”).toAscii();
data.append(“内容处置:表单数据;名称=\”上传\“文件名=\”);
append(getReportFileName());
data.append(“\”\r\n”);
data.append(“内容类型:text/xml\r\n\r\n”);//数据类型
QFile文件(路径);
如果(!file.open(QIODevice::ReadOnly)){
qDebug()问题是在网络上丢弃数据包。上面的代码实际上有效。这可以标记为已解决。显然问题不在于我的代码,而在于网络连接丢弃数据包。上面的代码实际上适用于手头的任务,因此,如果有人通过谷歌偶然发现这一点,这将起作用。然后我建议您问题的标题中没有[已解决],或者写一个答案(根据SO的传统,最好写第二个)。
<?php
$uploaded_type = $_FILES['uploaded']['type'];
$target = "/var/www/webpage/results/";
$target = $target . basename( $_FILES['uploaded']['name']) ;
$ok=1;
echo "target: ";
echo $target;
//This is our limit file type condition
if ($uploaded_type =="text/xml"){
echo "We have an xml file!\r\n";
}
//Here we check that $ok was not set to 0 by an error
//If everything is ok we try to upload it
if ($ok==0){
echo "Sorry your file was not uploaded";
} else {
echo "Looking good!";
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)){
echo "The file successfully ". basename( $_FILES['uploadedfile']['name']). " has been uploaded";
} else {
echo "Sorry, there was a problem uploading your file.";
}
}
?>