Я разрабатываю утилиту резервного копирования и мне нужно загрузить файлы на сервер. Я создал простой 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),
}