Загрузить изображения Multipart с Мойя Swift Полностью пример
Как загрузить изображение с помощью multipart/form-data в Swift With Moya
мой код
var multipartBody: [MultipartFormData]? {
switch self {
case .registerWith(let registrationObject ):
if let profileImageData = registrationObject.profileImageData{
return [MultipartFormData(provider: .data(profileImageData), name: "profile_picture", fileName: "\(registrationObject.phone).jpg",
mimeType: "image/jpeg")]
}
return nil
default:
return nil
}
}
var task: Task {
switch self {
case .registerWith:
if let multipartBody = multipartBody {
return .upload(.multipart(multipartBody))
}else{
return .request
}
default:
return .request
}
}
но мне нужно отправить imageData в теле с ключом "profileImage"
3 ответа
Чтобы загрузить изображение в Multipart, используя Moya версии 10.0.0 и выше
1- Поместите файлы, которые вы хотите загрузить в массив MultipartFormData
// put files in MultipartFormData Arry
var multipartBody :[Moya.MultipartFormData]?{
switch self {
case .registerWith(let imageData , let name ,let description ):
// any additional body data or body parms
let nameDataProvider = MultipartFormData(provider: .data(name.data(using: .utf8)!), name: "name")
let emailDataProvider = MultipartFormData(provider: .data(email.data(using: .utf8)!), name: "email")
// image want to upload it or file as a MultipartFormData
let imageDataProvider = Moya.MultipartFormData(provider: MultipartFormData.FormDataProvider.data(imageData), name: "avatar", fileName: "photo.jpg", mimeType: "image/jpeg")
return [ imageDataProvider , descriptionDataProvider ]
default:
return []
}
}
2- сделать тип задачи этого метода - uploadMultipart
var task: Task {
switch self {
case .registerWith:
// for each method multi part use its multipartBody that declared it in step one needed
return .uploadMultipart(multipartBody!)
default:
guard let parameters = self.parameters else {
return .requestPlain
}
return .requestParameters(parameters: parameters.values, encoding: parameters.encoding)
}
}
Чтобы загрузить изображение в Multipart, используя Moya версии 9.0.0 и ниже
1- Поместите файлы, которые вы хотите загрузить в массив MultipartFormData
// put files in MultipartFormData Arry
var multipartBody: [MultipartFormData]? {
switch self {
case .registerWith(let imageData , let name ,let description ):
return [MultipartFormData(provider: .data(imageData),
name: "profile_picture", fileName: "fileName", mimeType: "image/jpeg")]
default:
return nil
}
}
2- Добавьте провайдера multipartBody в тело запроса того метода, который вам нужен
var parameters: [String: Any]? {
switch self {
case .registerWith(let registrationObject ):
var body = registrationObject.toJSON()!
// add the file in body
body["profile_picture"] = multipartBody?[0].provider
return body
}
}
3- сделать тип задачи этого метода - загрузить
var task: Task {
switch self {
case .registerWith:
// multipartBody that in First step
return .upload(.multipart(multipartBody))
}
}
Hear - это код для загрузки изображения с использованием Moya версии 10.0.2.
//MARK:- MultipartData -
var multipartBody :[Moya.MultipartFormData]?{
switch self {
case .addUser(let userInfo):
//other parameters need to convert to data
let vName = userInfo.name
let vNameData = Moya.MultipartFormData(provider: MultipartFormData.FormDataProvider.data(vName.data(using: .utf8)!), name: "vName")
//convert your image to data
guard let data = UIImageJPEGRepresentation(userInfo.profilePic, 1.0) else { return nil }
return [Moya.MultipartFormData(provider: MultipartFormData.FormDataProvider.data(data), name: "vAvtarName", fileName: "photo.jpg", mimeType: "image/jpeg"),vNameData]
default:
return []
}
}
var task: Task {
switch self {
case .addUser(let userInfo):
return .uploadMultipart(self.multipartBody!)
}
}
Вам нужно изменить "name: "profile_picture"" на "name: "profileImage"", попробуйте это.