標籤:serialize 列印 orm 過程 afn 哈哈 success cts nullable
轉載自:http://blog.csdn.net/a645258072/article/details/51728806
項目中,我們經常會用到上傳圖片的功能,而目前的上傳圖片分為兩種(我只知道兩種,哈哈哈),一種是以將圖片加密轉成字串的形式,另一種是以檔案流的形式進行上傳。記得去年12月份在網上隨便找了一下,可能是我太low,找了好久沒找到。本來早就想總結一下,可是呢...我吧...懶得看AFNetworking源碼,就一直擱置了,今天工作做完了,正好分享一下。
第一種方式:檔案流方式進行上傳
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//接收類型不一致請替換一致text/html或別的
manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObjects:@"application/json",
@"text/html",
@"image/jpeg",
@"image/png",
@"application/octet-stream",
@"text/json",
nil];
NSURLSessionDataTask *task = [managerPOST:url parameters:nilconstructingBodyWithBlock:^(id<AFMultipartFormData> _NonnullformData) {
NSData *imageData =UIImageJPEGRepresentation(image,1);
NSDateFormatter *formatter = [[NSDateFormatteralloc] init];
formatter.dateFormat [email protected]"yyyyMMddHHmmss";
NSString *str = [formatterstringFromDate:[NSDatedate]];
NSString *fileName = [NSStringstringWithFormat:@"%@.jpg", str];
//上傳的參數(上傳圖片,以檔案流的格式)
[formData appendPartWithFileData:imageData
name:@"file"
fileName:fileName
mimeType:@"image/jpeg"];
} progress:^(NSProgress *_Nonnull uploadProgress) {
//列印下上傳進度
} success:^(NSURLSessionDataTask *_Nonnull task, id _Nullable responseObject) {
//上傳成功
} failure:^(NSURLSessionDataTask *_Nullable task, NSError * _Nonnull error) { //上傳失敗
}];
第二種方式:將image轉成NSData,在進行base64加密,此處代碼是借鑒朋友部落格中寫的,就是一個加密過程,不一定非要這麼寫,只要將image對象傳承NSData類型,然後在進行base64加密就可以了。將此處得到的傳回值NSString,作為入參傳入請求地址就可以了
+ (NSString *)imageBase64WithDataURL:(UIImage *)image
{
NSData *imageData =nil;
NSString *mimeType =nil;
//圖片要壓縮的比例,此處100根據需求,自行設定
CGFloat x =100 / image.size.height;
if (x >1)
{
x = 1.0;
}
imageData = UIImageJPEGRepresentation(image, x);
mimeType = @"image/jpeg";
return [NSStringstringWithFormat:@"data:%@;base64,%@", mimeType,
[imageData base64EncodedStringWithOptions:0]];
}
使用AFNetworking進行圖片上傳