[英]Upload Array having base64String encoded multiple images using Alamofire
我正在努力使用Alamofire將多個圖像發送到后端。 我在NSMutableArray中添加了base64圖像字符串。 現在, 我正在嘗試將此字符串數組發送到服務器,但無法正常工作。
我嘗試過通過這種方式上傳單個圖像,它的工作原理非常酷,但是為什么不上傳圖像陣列呢 ?
圖像拾取-
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
{
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
{
imageView.contentMode = .ScaleAspectFit
imageView.image = pickedImage
slctdImage = pickedImage
}
dismissViewControllerAnimated(true, completion: nil)
uploadImage(slctdImage)
}
上傳
func uploadImage( image:UIImage)
{
let pic :NSData = UIImageJPEGRepresentation(image, 0.5)!
let str = pic.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
//imageArray is declared as var imageArray = NSMutableArray()
imageArray.addObject(str)
//when imageArray count reaches 3 I send the images
if imageArray.count==3
{
let parameters = [
"task": "doNotification",
"image" : imageArray,
"select_category" : "exams",
"select_type" : "quarterly",
"class" : "1",
"repliable" : "0",
"select_students" : ["25","26"],
"select_group" : "Super Users",
"title" : "Hello",
"text" : "asdfsdf",
"date" : "2015-12-15",
"time" : "10:50 AM"]
Alamofire.request(.POST, UrlClass.baseUrl, parameters:parameters ) .response {
(request, response, data, error) in
// self.startParsing(data!)
print(response)
}
}
}
那么如何解決這個問題呢? 請提出對代碼的修改建議或其他方式。
使用以下代碼將圖像上傳到服務器
let image = UIImage(named:"testImage")
Alamofire.upload(
.POST,
URL,
multipartFormData: { multipartFormData in
multipartFormData.appendBodyPart(data: UIImageJPEGRepresentation(image, 1)!, name: "imageFile",
fileName: "image.jpg", mimeType: "image/jpeg")
},
encodingCompletion: { encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
upload.progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in
dispatch_async(dispatch_get_main_queue()) {
let percent = (Float(totalBytesWritten) / Float(totalBytesExpectedToWrite))
//progress(percent: percent)
print(percent)
}
}
upload.validate()
upload.responseJSON { response in
if response.result.error != nil {
// failure
} else {
// success
}
}
case .Failure(let encodingError):
print(encodingError)
//failure
}
}
)
}
對於多個圖像
Alamofire.upload(
.POST,
urlString,
multipartFormData: { multipartFormData in
multipartFormData.appendBodyPart(data: "122222".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"Id")
multipartFormData.appendBodyPart(data: "test1111".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"sId")
multipartFormData.appendBodyPart(data: "", name :"ContractorIds")
multipartFormData.appendBodyPart(data:date.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"ExpectedOn")
multipartFormData.appendBodyPart(data:date.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"ExpiresOn")
multipartFormData.appendBodyPart(data: data.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"Notes")
for image in images {
if let imageData = UIImageJPEGRepresentation(image, 0.05) {
multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: "file.jpeg", mimeType: "image/jpeg")
}
}
},
這是另一個版本,因為我在服務器端遇到問題以讀取多個圖像:
Alamofire.upload(multipartFormData: { (multipartFormData) in
// Sending parametes with images
multipartFormData.append(jsonString.data(using: String.Encoding.utf8)!, withName: "parameters")
for (key, value) in parameters {
if let files = value as? Array<Any>, key == "files" {
for i in files.enumerated() {
let image = UIImage(named: "\(i.element)")
// add image
multipartFormData.append(UIImageJPEGRepresentation(image!, 1)!, withName: "file" , fileName: "\( NSUUID().uuidString)" , mimeType: "image/jpeg")
// if you face problem add below lines as to make sepration between two images
multipartFormData.append("\r\r".data(using: String.Encoding.utf8)!, withName: "")
}
}
else { }
}
},to:baseURL)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.