Я пытаюсь загрузить файл в swiftUI, используя составные данные формы. Код такой:
do {
let data = try Data(contentsOf: url)
AF.upload(
multipartFormData: { multipartFormData in
multipartFormData.append(data, withName: "uploadedFile",fileName: "uploadedFile",mimeType: "text/plain")
}, to: "https://server.com/upload",headers: ["Authorization" : "Bearer \(API.shared.accessToken!)",
"Content-Type": "multipart/form-data"])
.responseDecodable(of: String.self ) { response in
debugPrint(response)
}
}
catch {
print("Error \(error)")
}
Где URL-адрес — это локальный URL-адрес, предоставленный DocumentPickerViewController.
Почему-то сервер выдает ошибку о том, что что-то пошло не так. Вот ответ, который я уловил у Чарльза:
И этот ответ я получил в Postman (который работает):
Я заметил, что почтальон автоматически сгенерировал параметр типа содержимого в данных формы (в этом тесте это было изображение, но это мог быть любой тип файла). Alamofire не делал этого по умолчанию, поэтому я добавил в запрос имя файла и MIME-тип (текстовый/обычный), но это не сработало.
Есть предположения? На Почтальоне работает. Так это проблема с сервером или с интерфейсом?
Этот код работал у меня для загрузки файла изображения
Я использовал "application/x-www-form-urlencoded"
вместо "Content-Type": "multipart/form-data"
let url = "url here"
let headers: HTTPHeaders = [
"Authorization": "Bearer Token Here",
"Accept": "application/x-www-form-urlencoded"
]
AF.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(imageData, withName: "image" ,fileName: "image.png" , mimeType: "image/png")
}, to: url, method: .post ,headers: headers).validate(statusCode: 200..<300).response { }
@user3641520 вы можете использовать один из этого списка: developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/…
Это, похоже, работает, однако я не могу оставить без внимания тип пантомимы. Могу ли я как-то это определить?