ios 上传图片 ...

本人刚开始接触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) {
    //上传失败

}];

以上!!

推荐阅读更多精彩内容