Ios 使用Alamofire上载图像时崩溃
我正在用Alamofire上传一张图像,就像这样 编辑:这是已编辑的代码Ios 使用Alamofire上载图像时崩溃,ios,swift,alamofire,Ios,Swift,Alamofire,我正在用Alamofire上传一张图像,就像这样 编辑:这是已编辑的代码 for img in images { let url = "http:my url" let headers = [ "Accept": "application/json", "Authorization": self.accessToken ] if let imageData = (UIImageJPEGRepresentati
for img in images {
let url = "http:my url"
let headers = [
"Accept": "application/json",
"Authorization": self.accessToken
]
if let imageData = (UIImageJPEGRepresentation(img, 0.6)) {
let parameters: [String: String] =
[
"seller_id": "\(self.mySellerId)",
"offline_id": self.prodID,
"is_default": "1",
"sequence": "\(sequenceCount)"
]
Alamofire.upload(multipartFormData: {(multipartFormData) in
let filePath = NSURL(fileURLWithPath: url)
print(imageData)
multipartFormData.append (imageData, withName: "image", fileName: "\(Date().timeIntervalSince1970).jpg", mimeType: "image / jpg")
for (key, value ) in parameters {
print(key,value)
multipartFormData.append(value.data(using: .utf8)!, withName: key)
}
}, to: url, method: .post, headers: headers)
{ (result) in
switch result {
case .success(let upload, _,_ ):
upload.uploadProgress(closure: { (progress) in
UILabel().text = "\((progress.fractionCompleted * 100)) %"
print (progress.fractionCompleted * 100)
})
upload.responseJSON { response in
if let JSON = response.result.value {
print(JSON)
}else{
print("Error")
}
}
case .failure(let encodingError):
print(encodingError)
break
}
}
}
}
在参数中的(键、值)部分for…
for循环遍历所有值。但是当它到达图像数据部分时,它崩溃了,说无法将'Foundation.data'(0x10787b9f0)类型的值强制转换为'Swift.String'
应该给出什么来纠正错误?您正在将
参数字典中的所有值转换为字符串,字典中的第一个条目是“product\u image”
,它的值为imageData,类型为Data
我会这样做,不再强制施法
for (key, value) in parameters {
if let v = value as? String, let valueAsData = v.data(using: .utf8) {
multipartFormData.append(valueAsData, withName: key )
}
}
您还可以检查值是否已经是数据
类型,只需添加它,就像:
for (key, value) in parameters {
var dataToAppend: Data?
if let data = value as? Data {
dataToAppend = data
} else if let v = value as? String, let valueAsData = v.data(using: .utf8) {
dataToAppend = valueAsData
}
if let d = dataToAppend {
multipartFormData.append(d, withName: key )
}
}
当您将for循环转到键中时,值:“product\u image”,imageData
,值
已经是一个数据对象。不需要将其转换为数据
,而且它不是字符串,因此您可以将转换为!字符串
使其崩溃。相反,请检查值的类,如果它是数据
,只需将其附加,如果它是字符串,则使用数据转换它(使用:)
,等等。哦..好的。@Larme如果你不介意的话,你能把它写在代码里吗…?如果让v=value为?数据{multipartFormData.append(v,withName:key)}否则{//这是一个字符串,至少我们希望是这样,按照您已经做过的那样做)}
只需从参数数据中删除这个“product_image”:imageData
。由于在多部分中可用,所以在您的中不需要它。好的..我将尝试…好的@Ladislav。第二种方法将附加所有五个键和值:“product_image”、“seller_id”、“offline_id”、“is_default”、“sequence”。但是在这一行如果让d=dataToAppen…
我得到了在初始化之前使用的错误常量'dataToAppend'
我的错误,更新了代码,dataToAppend必须是var而不是letNo@Ladislav。只做那件事…还是没用…:(