如何使用带有令牌和参数的Alamofire来上传图片? [英] How to upload image using Alamofire with token&parameters?

查看:711
本文介绍了如何使用带有令牌和参数的Alamofire来上传图片?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Alamofire来上传图片,但上传不成功。我还带了令牌&参数到服务器。
我不知道我是否添加令牌&参数正确与否。

使用Alamofire有什么不对?

有什么建议吗?
谢谢。

$ b $ pre $ func uploadWithAlamofire(image:UIImage,imageData:Data,imageUrl:URL){
let parameters = [avatar:imageData]

Alamofire.upload(multipartFormData:{multipartFormData in
multipartFormData.append(imageData,withName:user.id,fileName:\\ (key,value)的参数{
multipartFormData.append(value,withName:key)$($ key $ value $) b $ b}
}到:apiUrl,方法:.put,headers:[Authorization:Bearer \(token)],
encodingCompletion:{encodingResult in
switch encodingResult {
case .success(let upload,_,_):
upload.response {[self self]]
guard self!= nil else {
return
}
debugPrint(响应)
}
case .failure(让encodingError):
print(error:\(encodingError))
}
})
}


func imagePickerController(_ picker:UIImagePickerController,didFinishPickingMediaWithInfo info:[String:Any]){

photoImage = info [UIImagePickerControllerOriginalImage] as! UIImage
photoImageView.image = photoImage

imageName:String = user.id +.jpg
let documentsPath = NSHomeDirectory()。appending(/ Documents / Icon / )
let imagePath = documentsPath.appending(imageName)
let imageUrl = URL(fileURLWithPath:imagePath)
print(imageUrl is here:\(imageUrl))

让imageData:Data = UIImageJPEGRepresentation(photoImage,0.001)!

do {
尝试imageData.write(to:imageUrl,options:.atomic)
} catch let error {
print(error)
}
$ b $ uploadWithAlamofire(image:photoImage,imageData:imageData,imageUrl:imageUrl)

self.dismiss(animated:true,completion:nil)
}


解决方案

试试这个:
$ b $ pre $ func uploadImageWith(param params:Dictionary< String,String>,image:UIImage?,handler:@escaping((Dictionary< String,Any> ?,Int) - > Void)){
// let keyJson =json.dataUsingEncoding(NSUTF8StringEncoding)!
print(Params:\(params))
let BASE_URL =http://
alamofire.upload(
multipartFormData:{multipartFormData in
对于(键,值)参数{
multipartFormData.append(value.data(使用:String.Encoding.utf8,allowLossyConversion:false)!,withName:键)
}

if image!= nil {
let imgData = UIImageJPEGRepresentation(image !, 0.5)
if imgData!= nil {
multipartFormData.append(imgData !,带名称:photo_upload,fileName :file.png,mimeType:image / png)
}
}
},
to:BASE_URL,
encodingCompletion:{encodingResult in
switch encodingResult {
case .success(let upload,_,_):$ b $ upload.responseJSON {response in

switch response.result {
case .success:
如果让jsonDict = response.result.value as?字典<字符串,不限> {
print_debug(Json Response:\(jsonDict))//序列化的json响应
处理程序(jsonDict,(response.response!.statusCode))
}
else {
handler(nil,(response.response!.statusCode))
}
如果让data = response.data,则让utf8Text = String(data:data,encoding:.utf8){
print(服务器响应:\(utf8Text))//原始服务器数据为UTF8字符串
}
break
case .failure(let error):
处理程序(nil,(response.response!.statusCode))
break
}
}
case .failure(让encodingError):$ b $ print(encodingError)
}
}

}

USE $ b

  uploadImageWith(param:[key:value],image:UIImage(name:icon)){(response,statusCode)in 
print(response)
}

您必须传递params和image对象并且在闭包中获得作为Dictionary对象的响应。


I use Alamofire to upload images, however the upload is unsuccessful.
I also bring token & parameters to server.
I don't know whether I add token & parameters correctly or not.
What's wrong with me to using Alamofire?
Have any suggestion? Thanks.

func uploadWithAlamofire(image:UIImage, imageData:Data, imageUrl:URL) {        
    let parameters = ["avatar":imageData]

    Alamofire.upload(multipartFormData: { multipartFormData in
        multipartFormData.append(imageData, withName: user.id, fileName: "\(user.id).jpg", mimeType: "image/jpg")

        for (key, value) in parameters {
            multipartFormData.append(value, withName: key)
        }
    }, to: apiUrl , method: .put, headers: ["Authorization": "Bearer \(token)"],
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.response { [weak self] response in
                        guard self != nil else {
                            return
                        }
                        debugPrint(response)
                    }
                case .failure(let encodingError):
                    print("error:\(encodingError)")
                }
    })
}


func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    photoImage = info[UIImagePickerControllerOriginalImage] as! UIImage
    photoImageView.image = photoImage

    let imageName:String = user.id + ".jpg"
    let documentsPath = NSHomeDirectory().appending("/Documents/Icon/")
    let imagePath = documentsPath.appending(imageName)
    let imageUrl = URL(fileURLWithPath: imagePath)
    print("imageUrl is here:\(imageUrl)")

    let imageData:Data = UIImageJPEGRepresentation(photoImage, 0.001)!

    do {
        try imageData.write(to: imageUrl,options: .atomic)
    } catch let error {
        print(error)
    }

    uploadWithAlamofire(image: photoImage, imageData: imageData, imageUrl: imageUrl)

    self.dismiss(animated: true, completion: nil)
}

解决方案

Try this:

func uploadImageWith(param params:Dictionary<String,String>,image:UIImage?,handler:@escaping ((Dictionary<String,Any>?,Int) -> Void)) {
    // let keyJson = "json".dataUsingEncoding(NSUTF8StringEncoding)!
    print("Params:\(params)")
    let BASE_URL = "http://"
    Alamofire.upload(
        multipartFormData: { multipartFormData in
            for (key, value) in params {
                multipartFormData.append(value.data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: key)
            }

            if image != nil{
                let imgData = UIImageJPEGRepresentation(image!, 0.5)
                if imgData != nil {
                    multipartFormData.append(imgData!, withName: "photo_upload", fileName: "file.png", mimeType: "image/png")
                }
            }
    },
        to: BASE_URL,
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.responseJSON { response in

                    switch response.result {
                    case .success:
                        if let jsonDict = response.result.value as? Dictionary<String,Any> {
                            print_debug("Json Response: \(jsonDict)") // serialized json response
                            handler(jsonDict,(response.response!.statusCode))
                        }
                        else{
                            handler(nil,(response.response!.statusCode))
                        }
                        if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
                            print("Server Response: \(utf8Text)") // original server data as UTF8 string
                        }
                        break
                    case .failure(let error):
                        handler(nil,(response.response!.statusCode))
                        break
                    }
                }
            case .failure(let encodingError):
                print(encodingError)
            }
    }
    )
}

USE

uploadImageWith(param: ["key":"value"], image: UIImage(name:"icon")) { (response, statusCode) in
    print(response)
}

You have to pass the params and image object and you get the response as a Dictionary object in closure.

这篇关于如何使用带有令牌和参数的Alamofire来上传图片?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆