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

被折叠的 条评论
为什么被折叠?



