我需要将图像上传到我使用文件选择器来获取图像的服务器,我已经附加了我的示例代码但是它无法正常工作
我的文件选择器代码
` Button {
text: "Change Profile Image"
onClicked {
filePicker.open();
}
attachedObjects: [
FilePicker {
id: filePicker
property string selectedFile
type: FileType.Picture
onFileSelected: {
selectedFile = selectedFiles[0]
image.imageSource = selectedFile
_settings.showToast( selectedFile);
_settings.isUpdate(selectedFile);
}
}
]`
我在c ++中的图像更新代码
`void Settings::isUpdate(QString selectedFile){
QString path("asset:///Icon/mess.jpg");
//php script that receives the image
QNetworkRequest requete(QUrl("http://192.168.1.176:2222/api?type=uploadimages&name=IMG_00000001.jpg&pin=123456")); //our server with php-script
QByteArray boundary = "-------------------------87142694621188";
QFile file(path);
if (!file.open(QIODevice::ReadOnly))
{
qDebug()<<"erreur read image";
return;
}
QByteArray fileContent(file.readAll());
QByteArray data = "--" + boundary + "\r\n";
data += "Content-Disposition: form-data; name=\"data\"; filename=\"IMG_00000001.jpg\";\r\n";
data += "Content-Type: image/jpg\r\n\r\n" + fileContent + "\r\n";
data += "--" + boundary + "--\r\n";
requete.setRawHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
requete.setRawHeader("Content-Length", QString::number(data.size()).toAscii());
file.close();
qDebug() <<"data"<< data.size();
QNetworkAccessManager *am = new QNetworkAccessManager(this);
QNetworkReply *reply = am->post(requete,"&data="+data);
QObject::connect(am, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
}
void Settings::replyFinished(QNetworkReply *reply)
{
reply->open(QIODevice::ReadOnly);
if(reply->error() == QNetworkReply::NoError)
{
QByteArray str=(reply->readAll());
QString response = QString::fromUtf8(str.data(), str.size());
qDebug()<<" re "<<response;
}
else
qDebug()<<"error response server";
}`
我能够获得回复,但无法在服务器上传图像
感谢
答案 0 :(得分:0)
QString body = "" ;
const QUrl url("http://someurl.to/make/the/post" );
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart textPartData;
body = "" ;
QTextStream(&body) << "";
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()));