Как мне создать составную форму с именованным телом в Qt? - PullRequest
4 голосов
/ 31 мая 2019

Я разрабатываю утилиту резервного копирования и мне нужно загрузить файлы на сервер. Я создал простой API отдыха в Go, и он использует многоэлементную форму для загрузки и обновления файлов. Golang API анализирует эту форму как обычную HTML-форму, а поле файла имеет собственное имя. Но Qt (клиент) создает многочастную форму с файлом в качестве тела (без имени). Что я должен изменить?

Создание многочастной формы в Qt:

QHttpPart contentPart;
contentPart.setHeader(
            QNetworkRequest::ContentDispositionHeader,
            QString(
                    R"(form-data; name="%1"; path="%2"; created="%3"; modified="%4"; package_id="%5")").arg(
                    file->name,
                    file->path,
                    QString::number(file->created.toSecsSinceEpoch()),
                    QString::number(file->modified.toSecsSinceEpoch()),
                    QString::number(file->package->id)
            )
);
contentPart.setHeader(QNetworkRequest::ContentTypeHeader, QMimeDatabase().mimeTypeForData(file->content).name());
contentPart.setBody(file->content);
multiPart->append(contentPart);

Обработка многочастной формы в Go:

incomingFile, handler, err := r.FormFile("upload")
if err != nil {
    log.Panicln(err)
    return
}
defer incomingFile.Close()

content, err := ioutil.ReadAll(incomingFile)
if err != nil {
    log.Panicln(err)
    return
}
path := r.FormValue("path")
created, _ := strconv.ParseInt(r.FormValue("created"), 10, 0)
modified, _ := strconv.ParseInt(r.FormValue("modified"), 10, 0)
file := schemes.File{
    Name:     handler.Filename,
    Path:     path,
    Content:  content,
    Created:  time.Unix(created, 0),
    Modified: time.Unix(modified, 0),
}
...