Я хочу выгрузить фотографию из галереи (iOS) на сервер (uploadUrl, получаемый с помощью .getWalluploadUrl в коде верен) от pod Alamofire (SessionManager)
Я пытаюсь получить фотографию, выбирая ее с помощью ImagePicker. Но в загрузке Alamofire есть ошибка:
multipartEncodingFailed (причина: Alamofire.AFError. Ошибка домена = NSCocoaErrorDomain Code = 260 «Файл« asset.JPG »не может быть открыт, потому что такого файла нет.» UserInfo = {NSURL = файл: /// var / mobile / Containers / Data / Application / 366A5FD0- D597-44DC-A6C7-943DDEAB03B7 / Documents / asset.JPG, NSFilePath = / var / mobile / Containers / Data / Application / 366A5FD0-D597-44DC-A6C7-943DDEAB03B7 / Documents / asset.JPG, NSUnderlyingError = 0f0 0753 NSPOSIXErrorDomain Code = 2 "Нет такого файла или каталога"}}))
Почему этот файл не существует? Где я получил неправильный локальный путь с помощью imagePicker?
Код (я знаю, что этот код очень плох, но я просто хотел выяснить проблему с локальным путем):
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let imageUrl = info[UIImagePickerController.InfoKey.referenceURL] as! NSURL
let imageName = imageUrl.lastPathComponent
let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let photoURL = NSURL(fileURLWithPath: documentDirectory)
let localPath = photoURL.appendingPathComponent(imageName!)
let image = info[UIImagePickerController.InfoKey.originalImage]as! UIImage
let data = image.pngData()
self.getWalluploadUrl { (uploadUrl) in
let sessionManager = SessionManager.default
sessionManager.upload(
multipartFormData: {
data in
data.append(
localPath!, //????? Incorrect path
withName: "file",
fileName: imageName!,
mimeType: "image/jpeg"
)
},
to: uploadUrl,
encodingCompletion: {
(encodingResult) in
switch encodingResult {
case .success(let upload, _, _):
upload
.uploadProgress { (progress) in
print("progress:",progress)
}
.responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
print(json)
case .failure(let error):
print(error)
}
}
case .failure(let error):
print(error)
}
}
)
}