在 Alamofire 中上传多张图片
Upload multiple images in Alamofire
我想使用 Alamofire 将多张图片上传到服务器。
一切正常,但是,只上传了一张图片。我需要上传多张或更多图片,具体取决于登录用户。我正在使用一个名为 DKImagePickerController
的库从画廊或相机中挑选图像。
func upload() {
//shortcuts
let id = userr.integer(forKey: "id")
let plateId = plateIdTextField.text!
let customerName = customerNameTextField.text!
let customerContact = customerContactTextField.text!
let package = radioButtonsController.selectedIndex + 1
var parameters: [String: Any]
parameters = ["user_id": id,
"package": package,
"plate_id": plateId,
"customer_name": customerName,
"customer_contact": customerContact]
let spinningActivity = MBProgressHUD.showAdded(to: self.view, animated: true)
spinningActivity?.labelText = "uploading.."
spinningActivity?.detailsLabelText = "Please wait"
Alamofire.upload(multipartFormData: { multipartFormData in
for fileImage in self.fileUIImage {
multipartFormData.append(UIImagePNGRepresentation(fileImage)!, withName: "image", fileName:"image.png", mimeType: "image/png")
}
for (key, value) in parameters {
multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
}
},
to: uploadURL,
method: HTTPMethod(rawValue: "POST")!,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
//Unpacking
guard let result = response.result.value else { return }
spinningActivity!.hide(true)
print("\(result)")
self.BackToHomePage()
}
case .failure(let encodingError):
print(encodingError)
}
})
}
发送多个文件有两种方法。
您可以为每个文件使用唯一的 name
(在本例中,name
值为 image0
、image1
等) :
for (index, image) in images.enumerated() {
multipartFormData.append(UIImagePNGRepresentation(image)!, withName: "image\(index)", fileName: "image\(index).png", mimeType: "image/png")
}
结果是 $_FILES
:
$_FILES = {
image0 = {
error = 0;
name = "image0.png";
size = 23578;
"tmp_name" = "/tmp/php1bc19G";
type = "image/png";
};
image1 = {
error = 0;
name = "image1.png";
size = 338685;
"tmp_name" = "/tmp/phpcGS5d6";
type = "image/png";
};
};
(忽略此输出的格式,而只关注此嵌套目录结构中的 key/value 组合:就此输出而言,我让网络服务发送 $_FILES
回来作为 JSON,然后我让 Alamofire 解析它,这就是生成的字典在我的客户端应用程序中的输出方式。)
或者,您可以通过在字段名称后包含 []
来为 name
使用数组,例如字面意思 image[]
:
for (index, image) in images.enumerated() {
multipartFormData.append(UIImagePNGRepresentation(image)!, withName: "image[]", fileName: "image\(index).png", mimeType: "image/png")
}
这导致在服务器上收到以下内容:
$_FILES = {
image = {
error = (
0,
0
);
name = (
"image0.png",
"image1.png"
);
size = (
23578,
338685
);
"tmp_name" = (
"/tmp/phpI4XrwU",
"/tmp/php3kVhhl"
);
type = (
"image/png",
"image/png"
);
};
};
这仅取决于 Web 服务期望如何创建请求。
我想使用 Alamofire 将多张图片上传到服务器。
一切正常,但是,只上传了一张图片。我需要上传多张或更多图片,具体取决于登录用户。我正在使用一个名为 DKImagePickerController
的库从画廊或相机中挑选图像。
func upload() {
//shortcuts
let id = userr.integer(forKey: "id")
let plateId = plateIdTextField.text!
let customerName = customerNameTextField.text!
let customerContact = customerContactTextField.text!
let package = radioButtonsController.selectedIndex + 1
var parameters: [String: Any]
parameters = ["user_id": id,
"package": package,
"plate_id": plateId,
"customer_name": customerName,
"customer_contact": customerContact]
let spinningActivity = MBProgressHUD.showAdded(to: self.view, animated: true)
spinningActivity?.labelText = "uploading.."
spinningActivity?.detailsLabelText = "Please wait"
Alamofire.upload(multipartFormData: { multipartFormData in
for fileImage in self.fileUIImage {
multipartFormData.append(UIImagePNGRepresentation(fileImage)!, withName: "image", fileName:"image.png", mimeType: "image/png")
}
for (key, value) in parameters {
multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
}
},
to: uploadURL,
method: HTTPMethod(rawValue: "POST")!,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
//Unpacking
guard let result = response.result.value else { return }
spinningActivity!.hide(true)
print("\(result)")
self.BackToHomePage()
}
case .failure(let encodingError):
print(encodingError)
}
})
}
发送多个文件有两种方法。
您可以为每个文件使用唯一的
name
(在本例中,name
值为image0
、image1
等) :for (index, image) in images.enumerated() { multipartFormData.append(UIImagePNGRepresentation(image)!, withName: "image\(index)", fileName: "image\(index).png", mimeType: "image/png") }
结果是
$_FILES
:$_FILES = { image0 = { error = 0; name = "image0.png"; size = 23578; "tmp_name" = "/tmp/php1bc19G"; type = "image/png"; }; image1 = { error = 0; name = "image1.png"; size = 338685; "tmp_name" = "/tmp/phpcGS5d6"; type = "image/png"; }; };
(忽略此输出的格式,而只关注此嵌套目录结构中的 key/value 组合:就此输出而言,我让网络服务发送
$_FILES
回来作为 JSON,然后我让 Alamofire 解析它,这就是生成的字典在我的客户端应用程序中的输出方式。)或者,您可以通过在字段名称后包含
[]
来为name
使用数组,例如字面意思image[]
:for (index, image) in images.enumerated() { multipartFormData.append(UIImagePNGRepresentation(image)!, withName: "image[]", fileName: "image\(index).png", mimeType: "image/png") }
这导致在服务器上收到以下内容:
$_FILES = { image = { error = ( 0, 0 ); name = ( "image0.png", "image1.png" ); size = ( 23578, 338685 ); "tmp_name" = ( "/tmp/phpI4XrwU", "/tmp/php3kVhhl" ); type = ( "image/png", "image/png" ); }; };
这仅取决于 Web 服务期望如何创建请求。