Я знаю, что так много уроков или вопросов по этому поводу.Я пробовал все это, но мне не повезло.
Мне нужно получить прогресс загрузки с Alamofire
.Вот мой код:
func uploadpp(data1: Array<Any>, data2: Data?){
guard let url = URL(string: "\(API.storage)/upload/profile/picture?format=json") else {
return
}
let parameters: Parameters = [
"crop": [],
"folder_type": "1",
"folderid": "0",
"image_byte": data1,
"image_url": "",
"partnerid": "\(memberid)",
"partneruserid": "0",
"publicip": "",
"sourceid": "4"
]
let headers: HTTPHeaders = [
"Authorization": API.basicstring,
"Content-type": "multipart/form-data"
]
Alamofire.upload(multipartFormData: { (multipartFormData) in
if let data = data2 {
multipartFormData.append(data, withName: "image", fileName: "image.jpeg", mimeType: "image/jpeg")
}
for (key, value) in parameters {
multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key)
}
}, usingThreshold: UInt64.init(), to: url, method: .post, headers: headers) { (result) in
switch result {
case .success(let upload, _, _):
upload.uploadProgress(closure: { (progress) in
print("proses", progress.fractionCompleted)
})
upload.responseJSON { response in
print("Succesfully uploaded")
if let err = response.error {
print("upload:", err)
return
}
if let s = response.result.value {
print("result:", s)
return
}
}
case .failure(let error):
print("Error in upload: \(error.localizedDescription)")
}
}
}
data1
- это байтовый массив изображений.Мне это нужно, потому что мой API должен читать этот тип.И data2
является результатом UIImageJPEGRepresentation(img, 0.5)
.
Затем, когда я попробовал это, он напечатал Successfully uploaded
, но затем выдал ошибку:
responseSerializationFailed (причина: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed (ошибка: Ошибка домена = NSCocoaErrorDomain)Код = 3840 «Недопустимое значение для символа 3.» UserInfo = {NSDebugDescription = Недопустимое значение для символа 3.}))
Как я знаю, эта ошибка появляется, когда вы допускаете ошибку в своих URL-адресах, параметрахили заголовки (пожалуйста, CMIIW).
Но я попытался указать это значение Alamofire.request
, поэтому вот мой другой код:
func uploadpp(data: Array<Any>){
guard let url = URL(string: "\(API.storage)/upload/profile/picture?format=json") else {
return
}
let parameters: Parameters = [
"crop": [],
"folder_type": "1",
"folderid": "0",
"image_byte": data,
"image_url": "",
"partnerid": "\(memberid)",
"partneruserid": "0",
"publicip": "",
"sourceid": "4"
]
let headers: HTTPHeaders = [
"Authorization": API.basicstring,
"Accept": "application/json"
]
let req = Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
req.downloadProgress { progress in
print("lalala", Float(req.progress.fractionCompleted), progress.completedUnitCount)
}
req.responseJSON { response in
if response.result.isSuccess {
_ = self.getdata(json: JSON(response.result.value!))
print(response.result.value!)
}
else {
print("upload:", response.result.error!)
}
}
}
Это было успешно, но не дало мнепрогресс.Он просто дал "1.0".
Может быть, я запутался в использовании Alamofire.request
и Alamofire.upload
, или где-то из этого всего.Поэтому, пожалуйста, кто-нибудь, помогите мне с этим.
Заранее спасибо.