Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何发出http post请求以上载post查询和;以C++;Qt 我有样本代码,在C语言,Windows Phone 7,Silverlight中,我正在尝试如何在C++ QT中做等价的操作(我在黑莓10 beta 3 SDK中工作)。我可以使用QNetworkAccessManager?还是有更好的办法?如果可以的话,我将非常感谢您对如何做到这一点的帮助和一些示例代码。以下是示例C#代码:_C#_C++_Qt_Restsharp_Blackberry Cascades - Fatal编程技术网

如何发出http post请求以上载post查询和;以C++;Qt 我有样本代码,在C语言,Windows Phone 7,Silverlight中,我正在尝试如何在C++ QT中做等价的操作(我在黑莓10 beta 3 SDK中工作)。我可以使用QNetworkAccessManager?还是有更好的办法?如果可以的话,我将非常感谢您对如何做到这一点的帮助和一些示例代码。以下是示例C#代码:

如何发出http post请求以上载post查询和;以C++;Qt 我有样本代码,在C语言,Windows Phone 7,Silverlight中,我正在尝试如何在C++ QT中做等价的操作(我在黑莓10 beta 3 SDK中工作)。我可以使用QNetworkAccessManager?还是有更好的办法?如果可以的话,我将非常感谢您对如何做到这一点的帮助和一些示例代码。以下是示例C#代码:,c#,c++,qt,restsharp,blackberry-cascades,C#,C++,Qt,Restsharp,Blackberry Cascades,以下是我尝试过的一些东西: // postVars is a QByteArray that contains a query string of the arguments // being passed in then I pass it in to my prepareFileUploadRequest file, // which appends the data for uploading a file. void Utils::prepareFileUploadReques

以下是我尝试过的一些东西:

// postVars is a QByteArray that contains a query string of the arguments 
// being passed in then I pass it in to my prepareFileUploadRequest file, 
// which appends the data for   uploading a file.

void Utils::prepareFileUploadRequest(QMap<QString, QString> *d,
        QNetworkRequest &request, QByteArray &postVars, QString path,
        QString scriptName, QString filename,
        QString stockNum)
    {

        request.setUrl(QUrl(Utils::ApiUrl));

        postVars.append("Content-type: multipart/form-data, ");
            postVars.append("boundary='---';\r\n\r\n");
        postVars.append("---\r\n");
        postVars.append("Content-Disposition: form-data; name='file' );
            postVars.append("filename='examplePic.jpg'\r\n");
        postVars.append("Content-Type: image/jpg\r\n");
        postVars.append("Content-Transfer-Encoding: binary\r\n\r\n");

        QFile file(path);
        if (!file.open(QIODevice::ReadOnly)) {
            return;
        }

        postVars.append(file.readAll() + "\r\n");
        postVars.append('---');

        request.
                setRawHeader(QString("Content-Type").toAscii(),                   
                QString("multipart/form-data; boundary='---'").toAscii());

            request.
                setRawHeader(QString("Content-Length").toAscii(),            
                QString::number(postVars.length()).toAscii());

            QNetworkAccessManager *nam = new QNetworkAccessManager(this);
            connect(nam, SIGNAL(finished(QNetworkReply *)), 
                    this, SLOT(handleUpload(QNetworkReply *)));
            nam->post(request, postVars);
 }
//postVars是一个QByteArray,它包含一个参数查询字符串
//传入后,我会将其传入我的PrepareFileUpload请求文件,
//它附加用于上载文件的数据。
无效Utils::prepareFileUploadRequest(QMap*d,
QNetworkRequest和request、QByteArray和postVars、QString路径、,
QString脚本名,QString文件名,
QString stockNum)
{
setUrl(QUrl(Utils::apirl));
append(“内容类型:多部分/表单数据,”);
append(“boundary='--';\r\n\r\n”);
postVars.append(“--\r\n”);
append(“内容处置:表单数据;name='file');
append(“filename='examplePic.jpg'\r\n”);
append(“内容类型:image/jpg\r\n”);
append(“内容传输编码:二进制\r\n\r\n”);
QFile文件(路径);
如果(!file.open(QIODevice::ReadOnly)){
返回;
}
postVars.append(file.readAll()+“\r\n”);
postVars.append('--');
要求
setRawHeader(QString(“内容类型”).toAscii(),
QString(“多部分/表单数据;边界='--'”).toAscii();
要求
setRawHeader(QString(“内容长度”).toAscii(),
QString::number(postVars.length()).toAscii();
QNetworkAccessManager*nam=新的QNetworkAccessManager(此);
连接(nam,信号(完成(QNetworkReply*)),
这个插槽(handleUpload(QNetworkReply*));
nam->post(请求,postVars);
}
我调用了上面的函数,然后得到了一个xml回复——它说我没有权限——并且它没有上传任何文件——所以这可能是所使用的php Web服务的一个问题,但是这让我很难判断我是否采取了正确的方法,或者我是否做了任何错误的事情。 }

QString body=“”;
常量QUrl url(“http://someurl.to/make/the/post" );
QHttpMultiPart*multiPart=新的QHttpMultiPart(QHttpMultiPart::FormDataType);
qhttpparttextpartdata;
body=“”;
QTextStream(&body)打开(QIODevice::ReadOnly);
imagePart.setBodyDevice(文件);
file->setParent(multiPart);//我们现在无法删除该文件,因此请使用multiPart删除它
多部分->附加(imagePart);
}
多部分->附加(textPartData);
多部分->附加(textPartProductDetails);
多部分->附加(textPartDataDelivery);
QNetworkRequest请求(url);
QNetworkReply*reply=m_networkAccessManager->post(请求,多部分);
连接(应答,信号(finished()),此,插槽(onNetworkResponse());

到目前为止您尝试了什么?只需查看QNetworkAccessManager的手册页,它有一个post方法。然后在谷歌上搜索“使用qt上传文件”“。都在那里。我添加了一些我现在已经尝试过的东西,使用你告诉我的谷歌代码。很好!那么您是在另一台机器上针对Web服务测试您的程序?对于测试,这将是一个很好的开始,可以设置您的on-web服务(使用Apache),并针对它进行测试。设置Apache很容易!
// postVars is a QByteArray that contains a query string of the arguments 
// being passed in then I pass it in to my prepareFileUploadRequest file, 
// which appends the data for   uploading a file.

void Utils::prepareFileUploadRequest(QMap<QString, QString> *d,
        QNetworkRequest &request, QByteArray &postVars, QString path,
        QString scriptName, QString filename,
        QString stockNum)
    {

        request.setUrl(QUrl(Utils::ApiUrl));

        postVars.append("Content-type: multipart/form-data, ");
            postVars.append("boundary='---';\r\n\r\n");
        postVars.append("---\r\n");
        postVars.append("Content-Disposition: form-data; name='file' );
            postVars.append("filename='examplePic.jpg'\r\n");
        postVars.append("Content-Type: image/jpg\r\n");
        postVars.append("Content-Transfer-Encoding: binary\r\n\r\n");

        QFile file(path);
        if (!file.open(QIODevice::ReadOnly)) {
            return;
        }

        postVars.append(file.readAll() + "\r\n");
        postVars.append('---');

        request.
                setRawHeader(QString("Content-Type").toAscii(),                   
                QString("multipart/form-data; boundary='---'").toAscii());

            request.
                setRawHeader(QString("Content-Length").toAscii(),            
                QString::number(postVars.length()).toAscii());

            QNetworkAccessManager *nam = new QNetworkAccessManager(this);
            connect(nam, SIGNAL(finished(QNetworkReply *)), 
                    this, SLOT(handleUpload(QNetworkReply *)));
            nam->post(request, postVars);
 }
QString body = "" ;

const QUrl url("http://someurl.to/make/the/post" );
 QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
 QHttpPart textPartData;
 body = "" ;
 QTextStream(&body) << " this is your text to post with the file";
 textPartData.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=utf-8");
 textPartData.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"data\""));
 textPartData.setBody(body.toAscii());

     for(int i=0; i< number_of_files_to_send ; i++){
             QHttpPart imagePart;
             QString header_body = "";
             QTextStream(&header_body) << "form-data; name=\"" << name_of_the_file << "\"; filename=\"" << name_of_the_file << ".jpg\"" ;
             imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(header_body));
             imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));

             //prepare file for upload
             QString filepath;
             QTextStream(&filepath) << FunkyPigeonBlackberry::getInstance()->dataModelProductDetails()->custom_image(i).value("cut_image").toString();

             // pack the new file
             QFile *file = new QFile(filepath);
             file->open(QIODevice::ReadOnly);
             imagePart.setBodyDevice(file);
             file->setParent(multiPart); // we cannot delete the file now, so delete it with the multiPart
             multiPart->append(imagePart);
     }

 multiPart->append(textPartData);
 multiPart->append(textPartProductDetails);
 multiPart->append(textPartDataDelivery);


 QNetworkRequest request(url);

 QNetworkReply* reply = m_networkAccessManager->post(request, multiPart);
 connect(reply, SIGNAL(finished()), this, SLOT(onNetworkResponse()));