把图片作为参数POST到服务器

本文介绍了两种实现图片上传的技术方案,一种是使用Objective-C语言的方式,详细展示了如何将UIImage转换为NSData并进一步转化为Base64编码的字符串,同时说明了服务器端如何获取图片的格式。另一种方案则是采用Swift 5结合Alamofire 5进行图片上传,具体演示了如何通过multipart/form-data的方式构造请求。

一、OC方式

向服务器上传图片的方法之一,比如用户头像。

1.UIImage * image=[UIImage imageNamed:@"IMAGE"];

2.NSData * data =UIImagePNGRepresentation(image);

3.NSString * imageStr =[GTMBase64stringByEncodingData:data]; //用到GTMBase64 编码

4.NSString * resultStr = [XXX encodeString:imageStr];

5.服务器也许获取图片格式,方法:typeForImageData;

6.把ImageStr和图片格式作为参数POST到服务器

 

在把图片转化成NSString类型参数时,服务器可能要求把字符串 经过URLEcoding,就是下面这个方法。

//URLEncode

+(NSString*)encodeString:(NSString*)unencodedString{
// CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
// CharactersToLeaveUnescaped = @"[].";
    NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)unencodedString,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8));
    return encodedString;

}

//URLDEcode

-(NSString *)decodeString:(NSString*)encodedString{
    //NSString *decodedString = [encodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding ];
    NSString *decodedString  = (__bridge_transferNSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,(__bridgeCFStringRef)encodedString,CFSTR(""),CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    return decodedString;

}

//获取 图片的种类(先把UIIMage转化成NSData类型)。

+(NSString *)typeForImageData:(NSData *)data{
    uint8_t c;
    [data getBytes:&clength:1];
    switch (c) {
        case0xFF:
            return@"image/jpeg";
        case0x89:
            return@"image/png";
        case0x47:
            return@"image/gif";
        case0x49:
        case0x4D:
            return@"image/tiff";
    }return nil;

}

二、Swift5方式

////swift 5.0. 使用Alamofire5.0
func uploadImg(editedImage:UIImage)->Void
{ 
        let data = editedImage.pngData()
        if data == nil { return}
        let param:Parameters = ["appid":"SomeThingxxx"];
        AF.upload(multipartFormData: { (multipartFormData) in
            multipartFormData.append(data!, withName: "imgfile", fileName: "head", mimeType: "image/png");
            for (key, value) in param{
                let v = (value as! String).data(using: String.Encoding.utf8);
                multipartFormData.append(v!, withName: key)
            }
        }, to: KTUrl.upload_headimg()).responseJSON { (response) in
            print("HeadUploading:\(response)")
            switch response.result {
            case .success(let success):
                //print("success>\(success)")
                let dic = JSON(success)
                let data = dic["data"]
                if code == 200 {}else {}
            case .failure(let error):
                print("HeadUploadfailure>\(error)")
            }
        }
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值