微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 如何使用Alamofire上传多部分图像?

我无法使用Alamofire在多部分中上传多张图片.谁能帮我?
提前致谢!!

有关更多详细信息,我使用此代码创建图像数据的正文部分:

func imageArrayToNSData(array: [UIImage],boundary:String) -> NSData {
    let body = NSMutableData()
    var i = 0;
    for image in array{
        let filename = "image\(i).jpg"
        let data = UIImageJPEGRepresentation(image,0.8);
        let mimetype = "image/jpeg"
        let key = "product_images"
        body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
        body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
        body.appendData("Content-disposition: form-data; name=\"\(key)\"; filename=\"\(filename)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
        body.appendData("Content-Type: \(mimetype)\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
        body.appendData(data!)
        body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
        i += 1
    }

    body.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
    return body
}

上传我正在使用:

Alamofire.upload(.POST,EDIT_PRODUCT_URL,headers: ["Accept": "application/json","Content-Type":"application/json"],multipartFormData: { (formData) in

        if productimages.count>0{
            let boundary = generateBoundaryString()
            let imageData = CommonClass.imageArrayToNSData(productimages,boundary: boundary)
            formData.appendBodyPart(data: imageData,name: "product_images",mimeType: "image/jpeg")
        }

        for (key,value) in params {
            if value is [String]{
                let data = CommonClass.stringArrayToNSData(value as! [String])
                formData.appendBodyPart(data:data,name: key)
            }else if value is String{
                formData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!,name: key)
            }else if let v = value as? Bool{
                var bValue = v
                let d = NSData(bytes: &bValue,length: sizeof(Bool))
                formData.appendBodyPart(data: d,name: key)
            }
        }

    }) { (encodingResult) in
        switch encodingResult {
        case .Success(let upload,_,_):
            KVNProgress.showProgress(CGFloat(0),status:"0% Sent")
            upload.progress { bytesWritten,totalBytesWritten,totalBytesExpectedToWrite in
                // This closure is NOT called on the main queue for performance
                // reasons. To update your ui,dispatch to the main queue.
                dispatch_async(dispatch_get_main_queue()) {
                    let prg = Int((CGFloat(totalBytesWritten)*100)/CGFloat(totalBytesExpectedToWrite))
                    if prg == 100{
                        KVNProgress.showSuccessWithStatus("Created")
                    }
                    KVNProgress.updateStatus("\(prg)% Sent")
                    KVNProgress.updateProgress(CGFloat(Float(prg)/100.0),animated: true)
                }
            }
            upload.responseJSON { response in
                CommonClass.hideLoader()
                switch response.result {
                case .Success:
                    if let value = response.result.value {
                        let json = JSON(value)
                        print_debug("edit Product JSON is\n\(json)");  
                        completionBlock(json)
                    }else{
                        completionBlock(nil)
                    }
                case .Failure(let error):
                    print_debug(error.description)
                    showErrorWithMessage("Oops! Couldn't connect to server!")
                    completionBlock(nil)
                }
            }

        case .Failure(let encodingError):
            print(encodingError)
        }
    }

任何人都可以让我建议使用Alamofire上传多个文件的方式吗?

解决方法

我希望它对你有所帮助:

使用Swift 3x :(我已在此代码段中上传了四张照片)

//MARK: - upload multiple photos

    func uploadImagesAndData(params:[String : AnyObject]?,image1: UIImage,image2: UIImage,image3: UIImage,image4: UIImage,headers : [String : String]?,completionHandler:@escaping CompletionHandler) -> Void {

        let imageData1 = UIImageJPEGRepresentation(image1,0.5)!
        let imageData2 = UIImageJPEGRepresentation(image2,0.5)!

        let imageData3 = UIImageJPEGRepresentation(image3,0.5)!

        let imageData4 = UIImageJPEGRepresentation(image4,0.5)!


        Alamofire.upload(multipartFormData: { multipartFormData in

                for (key,value) in params! {
                    if let data = value.data(using: String.Encoding.utf8.rawValue) {
                        multipartFormData.append(data,withName: key)
                    }
                }

                multipartFormData.append(imageData1,withName: "file",fileName: "image.jpg",mimeType: "image/jpeg")
                multipartFormData.append(imageData2,mimeType: "image/jpeg")
                multipartFormData.append(imageData3,mimeType: "image/jpeg")
                multipartFormData.append(imageData4,mimeType: "image/jpeg")

        },to: K_BASEURL + K_API_LOGINDATA,encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload,_):
                    upload
                        .validate()
                        .responseJSON { response in
                            switch response.result {
                            case .success(let value):
                                print("responSEObject: \(value)")
                            case .failure(let responseError):
                                print("responseError: \(responseError)")
                            }
                    }
                case .failure(let encodingError):
                    print("encodingError: \(encodingError)")
                }
        })
    }

原文地址:https://www.jb51.cc/iOS/335627.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐