我想使用多部分数据上传图像和字符串 这是我的代码,
+(void)UploadImageWithAlldetails:(NSDictionary *)string imageresource:(NSData *)imageResource andCompletion:(GFWebServiceHandler)completion
{
NSString *createNoteUrl=[NSString stringWithFormat:@"%@/%@",BASE_URL,API_TO_UPLOAD_IMAGE];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject: string
options:0
error:nil];
NSString *jsonString =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:createNoteUrl]];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:60];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSString *boundary = @"unique-consistent-string";
//set conteent type in HTTP header
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data;boundary=%@",boundary];
//[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
[request addValue:contentType forHTTPHeaderField:@"Content_Type"];
NSMutableData *body =[NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary]dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition : form-data; name = %@\r\n\r\n",@"userDetails"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Type :application/octet-stream\r\n\r\n"]dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n",jsonString]
dataUsingEncoding:NSUTF8StringEncoding]];
//image data
if (imageResource) {
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=%@; filename=imageName.png\r\n", @"userImage"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageResource]];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n",boundary ] dataUsingEncoding:NSUTF8StringEncoding]];
// set the content-length
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[body length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:body];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if(data.length > 0)
{
//success
NSLog(@"%@",response);
NSString *stringFromData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",stringFromData);
}
}];
}
我已经实现了上面的代码,我从服务器获取json数据,我有nslog,它显示类似,res-type:error,msg:上传时出错。
请有人帮助我,做到这一点, 在此先感谢!!!
答案 0 :(得分:0)
使用 AFNetWorking 上传图片
这是我的方式,希望这会有所帮助:)
NSMutableDictionary *params = [NSMutableDictionary dictionary];
NSString *urlString = [NSString stringWithFormat:@"%@mvs-itsm/%@",itsmUrl,@"attUpload"];
[params setObject:attchementID forKey:@"id"];
[params setObject:attType forKey:@"type"];
AFHTTPRequestSerializer *serializerReq = [AFHTTPRequestSerializer serializer];
serializerReq.timeoutInterval = 60.f;
[serializerReq setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
[serializerReq setValue:[NSString stringWithFormat:@"Basic %@", [MVSUserDefaults getToken]] forHTTPHeaderField:@"Authorization"];
// [serializerReq setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"];
// [serializerReq setValue:@"gzip, deflate" forHTTPHeaderField:@"Accept-Encoding"];
NSError *error;
NSMutableURLRequest *requset = [serializerReq multipartFormRequestWithMethod:@"POST" URLString:urlString parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:dataToUpload name:@"file" fileName:[NSString stringWithFormat:@"%@.%@",UUID(),@"jpg"] mimeType:type];
} error:&error];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
AFHTTPResponseSerializer *serializerRes = [AFHTTPResponseSerializer serializer];
manager.responseSerializer = serializerRes;
NSURLSessionUploadTask *datatask = [manager uploadTaskWithStreamedRequest:requset progress:progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
//do your own work
}];
[datatask resume];