在做項目的時候, 我們會遇到用戶頭像上傳至服務(wù)器的功能, 還有就是用戶發(fā)表動態(tài)選擇本地圖片上傳服務(wù)器的功能.但總歸就一句話:就是把圖片上傳到服務(wù)器.
我這里是利用AFN第三方, 如果不打算利用三方的, 也可以自己試試寫,其實很簡單, 但我個人覺得AFN已經(jīng)很強大了, 并且現(xiàn)在很多人都在用, 你也不妨利用AFN, 大牛的話一般都是直接自己敲的, 嘿嘿, 我還是一個小羅羅, 跟大牛不能比啊, 還有很長的一段路要走呢, 不說了, 小不點帶大家看一下上傳至服務(wù)器的步驟吧!
首先, 后臺會給你一個上傳圖片到服務(wù)器的地址, 其次, 你需要根據(jù)拼接參數(shù), 然后進行數(shù)據(jù)請求, 數(shù)據(jù)請求成功后, 服務(wù)器會返回來圖片的地址, 你拿到地址后, 將圖片再上傳
下面看代碼
- (void)upLoadImage {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer.timeoutInterval = 20;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", @"application/json", @"text/html", @"text/json", nil];
NSString *urlStr = [NSString stringWithFormat:@"%@/%@", kHomeDefaultUrl, kUploadImageUrl];
NSDictionary *dic = @{@"id":@"0"};
//根據(jù)當前系統(tǒng)時間生成圖片名稱
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy年MM月dd日"];
NSString *dateStr = [formatter stringFromDate:date];
_i = 0;
[manager POST:urlStr parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[self.hud hide:YES];
for (UIImage *image in _array) {
NSString *fileName = [NSString stringWithFormat:@"%@%ld.png",dateStr,_i];
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
float size = imageData.length/1024.0/1024.0;
if (size>=1) {
imageData = UIImageJPEGRepresentation(image, 0.3);
}else{
imageData = UIImageJPEGRepresentation(image, 0.5);
}
[formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%ld",_i] fileName:fileName mimeType:@"image/jpeg"];
_i++;
}
} progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"進度");
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"上傳成功");
NSDictionary *returnDic = [NSDictionary dictionaryWithDictionary:responseObject];
if ([[returnDic objectForKey:@"ac"] isEqualToString:@"success"]) {
NSDictionary *photoDic = [NSDictionary dictionaryWithDictionary:[returnDic objectForKey:@"photos"]];
NSLog(@"這里將你得到的圖片地址拿到, 做接下來上傳圖片的步驟");
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"上傳失敗");
}];
}
其中_array中我放的是圖片, 你可以上傳多張圖片到服務(wù)器, 你如果上傳多張圖片,發(fā)現(xiàn)服務(wù)器返回的圖片地址是一樣的, 說明, 服務(wù)器名字寫重了, 由于我們是以日期為名命名的, 在上傳多張圖片的時候容易寫重, 畢竟服務(wù)器那邊還分辨不了這么多, 你需要做的就是一張一張上傳, 不要在上面的代碼里循環(huán), 要在外面循環(huán)呦!
你覺得怎么樣呢? 歡迎多多指正呦!
// 轉(zhuǎn)載請注明原地址呦!