本人刚开始接触ios一个月,现在记录下每天学习的点点滴滴和遇到的一些坑,希望和大家共勉。。
因为是初学,可能有表达的不准确的地方,如果有的话希望大家帮我纠正!
说说最近让我稍微有些头疼的图片上传的问题吧(网络框架用的是AFNetworking)。
一开始我们上传是将图片转换成byte数组,然后放在json中直接上传的,这里有个要注意的地方,就是oc中Byte的符号位问题。
NSData *imageData = UIImageJPEGRepresentation(image, 0.5);//将UIImage转成NSData
SignedByte *testByte = (SignedByte *)[data bytes]//注意这里得用SignedByte,如果直接用Byte的话就会出问题
NSMutableArray *byte = [NSMutableArray array];//将byte作为字典中的参数
for(int i=0;i<[data length];i++)
[byte addObject:@(testByte[i])];
这里最主要的就是SignedByte(有符号位,取值范围是-128127),一开始我用的Byte(无符号位,0255),死活传不上,后来才发现是byte的符号位问题,orz.。
还有文件流的方式上传图片,这个还是比较常见的了,直接上代码。
[manager POST:url parameters:pramasa constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDate date]];
NSString *fileName = [NSString stringWithFormat:@"%@.jpg", str];
//上传图片
[formData appendPartWithFileData:data //要上传的文件
name:@"" //这个参数是后台取文件参数的时候用的名字,如果没有的话就传空字符串
fileName:fileName//文件上传的名字,可以随便取,但是不要重名,所以一般是用拼接当前时间的方式作为文件名
mimeType:@"image/jpeg"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//上传成功
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//上传失败
}];
以上!!