C#、Windows Phone 7、Silverlight でこれを行うためのサンプル コードがあり、C++ Qt で同等のことを行う方法を見つけようとしています (Blackberry 10 Beta 3 SDK で作業しています)。使えますQNetworkAccessManager
か?それともこれにもっと良いものがありますか?可能であれば、これを行う方法とサンプルコードに関するいくつかの助けをいただければ幸いです。サンプル C# コードは次のとおりです。
var request = new RestRequest(url, Method.POST);
request.AddParamater("example", "example");
request.AddParamater("example2", "example2");
request.AddFile("file", fileData, filename, "image/pjpeg");
RestSharp.RestClient restClient = new RestClient();
restClient.ExecuteAsync(request, (response) =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
//upload successful
}
else
{
//error occured durring upload
}
});
これが私が試したことです:
// 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);
}
上記の関数を呼び出すと、xml 応答が返されます。これは、許可がないことを示しており、ファイルをアップロードしていないため、使用されている php Web サービスの問題である可能性がありますが、それは困難です。私が正しいアプローチをとったかどうか、または何か間違ったことをしているかどうかを教えてくれます。}