簡體   English   中英

使用Alamofire上傳具有base64String編碼的多個圖像的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM