Télécharger le fichier avec la méthode POST sur Qt4
Je suis à la recherche d'une base de code des échantillons de la façon de télécharger des fichiers vers le serveur avec la méthode HTTP POST sur l'intervalle Qt.
Mon tâche: j'ai simple Qt programme et j'ai besoin de sélectionner un fichier image à partir de l'hôte local et le télécharger sur le serveur. La sélection de la partie et l'interface graphique est simple et je l'ai déjà fait, mais avec POST le téléchargement, je suis confus. En outre, je dois dire, qu'il n'y a pas d'autorisation de téléchargement de fichiers.
Si quelqu'un est déjà à la recherche sur ce sujet?
PS: la raison pour laquelle je demande, et pas de codage mon auto est le temps, j'ai besoin d'obtenir cette méthode rapide.
Merci à tous les succès des solutions de mon côté sera posté ici pour les autres.
AJOUTÉ: Voici mon code qui ne fonctionne pas encore. Site de téléchargement situé ici.
void CDialog::on_uploadButton_clicked() {
QFileInfo fileInfo(absPathLineEdit->text());
if (!fileInfo.exists()) {
QMessageBox::information(this,
tr("Information"),
tr("File doesn't exists! Please, select another image."));
return;
}
file = new QFile(fileInfo.filePath());
if (!file->open(QIODevice::ReadOnly)) {
QMessageBox::information(this,
tr("Information"),
tr("Unable to open file for reading!"));
return;
}
QString host = "http://data.cod.ru";
QUrl url(host);
QHttp::ConnectionMode mode = QHttp::ConnectionModeHttp;
http->setHost(url.host(), mode, (url.port() == -1) ? 80 : url.port());
QHttpRequestHeader header("POST", "/", 1, 1);
header.setValue("Host", "data.cod.ru");
header.setValue("Content-type", "multipart/form-data, boundary=AaB03x");
header.setValue("Cache-Control", "no-cache");
header.setValue("Accept", "*/*");
QByteArray bytes(fileInfo.filePath().toUtf8());
QByteArray totalBytes;
totalBytes.append("--AaB03x\r\n");
totalBytes.append("Content-Disposition: form-data; name=\"email\"\r\n");
totalBytes.append("\r\n");
totalBytes.append("[email protected]\r\n");
totalBytes.append("--AaB03x\r\n");
totalBytes.append("Content-Disposition: form-data; name=\"photo\"; filename=\"" + bytes+ "\"\r\n");
totalBytes.append("Content-Transfer-Encoding: binary\r\n\r\n");
totalBytes.append(file->readAll());
totalBytes.append("\r\n");
totalBytes.append("--AaB03x--");
header.setContentLength(totalBytes.length());
httpRequestAborted = false;
httpGetId = http->request(header, totalBytes);
file->close();
}
et de lire la réponse de la fonction ci-dessous:
void CDialog::httpRequestFinished(int requestId, bool error) {
if (requestId != httpGetId)
return;
if (httpRequestAborted) {
if (file) {
file->close();
// file->remove();
// delete file;
file = 0;
}
return;
}
if (requestId != httpGetId)
return;
file->close();
if (error) {
// file->remove();
QMessageBox::information(this, tr("HTTP"),
tr("Download failed: %1.")
.arg(http->errorString()));
} else {
QByteArray data = http->readAll();
QFile *dataFile = new QFile("answer.txt");
dataFile->open(QIODevice::WriteOnly | QIODevice::Text);
dataFile->write(data);
dataFile->flush();
dataFile->close();
}
// delete file;
file = 0;
}
OriginalL'auteur mosg | 2010-04-13
Vous devez vous connecter pour publier un commentaire.
Je vois que vous essayez d'utiliser QHTTP et QHttpRequestHeader classes. Documentation de QT dit ceux qui sont obsolètes:
donc, comme il a été suggéré avant; je vous conseille d'utiliser QNetworkAccessManager pour ce que vous essayez de faire
quant à votre question de départ; vous pouvez toujours utiliser QHTTP de télécharger des fichiers; je crois que réelle-têtes de la requête de la structure dépend du site que vous essayez d'accéder. Dans ce cas, des outils comme wireshark serait une grande aide. Pls, vérifiez si le code ci-dessous serait travailler pour vous, il doit télécharger test1.jpg fichier à partir du dossier d'accueil et de vidage de son lien sur le serveur si 302 réponse retournée.
httpRequestFinished déclaré dans les signaux de la section de la classe MainWindow
espère que cette aide, troène 😉
OriginalL'auteur serge_gubenko
Aussi, j'ai trouvé aujourd'hui nice code: texte du lien
C'est uploader/downloader app basé sur Qt4, avec un ensemble complet de POST-têtes géré par QNetworkAccessManager à l'intérieur, donc pour les débutants, il vous sera très utile.
Propriétaire:
raide.ru
À valider:
hoxnox
OriginalL'auteur mosg
Utilisation QNetworkAccessManager.
OriginalL'auteur guruz
de données.append("Content-Disposition: form-data; name=\"photo\"; filename=\"-\"\r\n");
les données.append("Content-Type: image/jpg\r\n\r\n");
//données.append("Content-Transfer-Encoding: binary\r\n");
les données.append(octets);
les données.append("\r\n");
les données.append("--Asrf456BGe4h\r\n");
OriginalL'auteur slex