項(xiàng)目中用到圖片上傳, 本來準(zhǔn)備使用AFN 的 但是發(fā)現(xiàn)用AFN 后臺(tái)接收不到圖片流.
就自己用系統(tǒng)自帶的網(wǎng)絡(luò)庫寫了個(gè)上傳圖片的請求
// 1.創(chuàng)建Session
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:actoion delegateQueue:[NSOperationQueue mainQueue]];
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://172.16.151.152:8080/picServer/pic/upload"]];
[request addValue:@"image/jpeg" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"text/html" forHTTPHeaderField:@"Accept"];
[request addValue:@"Application/Json" forHTTPHeaderField:@"Accept"];
[request setHTTPMethod:@"POST"];
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
[request setTimeoutInterval:20];
NSData * imageData = UIImageJPEGRepresentation(img,0.8);
NSString *picStr = [NSString stringWithFormat:@"%@%@|",LYUserDefaultForKey(userAccountKey),name];
NSData *picName = [picStr dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *mData = [NSMutableData dataWithData:picName];
[mData appendData:imageData];
NSURLSessionUploadTask * uploadTask = [session uploadTaskWithRequest:request fromData:mData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
loadResult(dict);
}];
// uploadTask.
[uploadTask resume];
如果需要監(jiān)控上傳的進(jìn)度那就需要設(shè)置代理對象, 遵守NSURLSessionTaskDelegate協(xié)議
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
{
// NSLog(@"didSendBodyData");
NSLog(@"+++++%f", 1.0 * totalBytesSent / totalBytesExpectedToSend);
}
注: 如果上傳有問題, 那么可能請求頭設(shè)置有問題, 那么就可以用青花瓷, 抓上送報(bào)文, 就可以看到, 那個(gè)請求頭設(shè)置錯(cuò)誤就會(huì)有提示.