iOS开发上传图片-----流媒体格式

来源:互联网 发布:淘宝清退中小卖家 编辑:程序博客网 时间:2024/05/22 16:01

在做上传图片开发的时候,后台说图片格式为流媒体格式,由于本人不是很懂后台所以一直没懂流媒体是格式,安卓也是做出来说不出来.经过资料查阅和整理,弄出了这么个类,有待完善的地方还望大家多多提出建议

在.h文件中

#import <UIKit/UIKit.h>@interface RequestPostUploadViewController : UIViewController+ (NSString *)postRequestWithURL: (NSString *)url  // IN                      postParems: (NSMutableDictionary *)postParems // IN                     picFilePath: (NSString *)picFilePath  // IN                     picFileName: (NSString *)picFileName  // IN                  FORM_FLE_INPUT:(NSString *)FORM_FLE_INPUT;+ (UIImage *) imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize) newSize;+ (NSString *)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName;+ (NSString *)generateUuidString;@end


在.m文件中

#import "RequestPostUploadViewController.h"@interface RequestPostUploadViewController ()@end@implementation RequestPostUploadViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view.}+ (NSString *)postRequestWithURL: (NSString *)url  // IN                      postParems: (NSMutableDictionary *)postParems // IN                     picFilePath: (NSString *)picFilePath  // IN                     picFileName: (NSString *)picFileName // IN                  FORM_FLE_INPUT:(NSString *)FORM_FLE_INPUT{            NSString *TWITTERFON_FORM_BOUNDARY = @"0xKhTmLbOuNdArY";    //根据url初始化request    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]                                                           cachePolicy:NSURLRequestReloadIgnoringLocalCacheData                                                       timeoutInterval:10];    //分界线 --AaB03x    NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];    //结束符 AaB03x--    NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];    //得到图片的data    NSData* data;    if(picFilePath){                UIImage *image=[UIImage imageWithContentsOfFile:picFilePath];        //判断图片是不是png格式的文件        if (UIImagePNGRepresentation(image)) {            //返回为png图像。            data = UIImagePNGRepresentation(image);        }else {            //返回为JPEG图像。            data = UIImageJPEGRepresentation(image, 1.0);        }    }    //http body的字符串    NSMutableString *body=[[NSMutableString alloc]init];    //参数的集合的所有key的集合    NSArray *keys= [postParems allKeys];        //遍历keys    for(int i=0;i<[keys count];i++)    {        //得到当前key        NSString *key=[keys objectAtIndex:i];                //添加分界线,换行        [body appendFormat:@"%@\r\n",MPboundary];        //添加字段名称,换2行        [body appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];        //添加字段的值        [body appendFormat:@"%@\r\n",[postParems objectForKey:key]];                RMLog(@"添加字段的值==%@",[postParems objectForKey:key]);    }        if(picFilePath){        ////添加分界线,换行        [body appendFormat:@"%@\r\n",MPboundary];                //声明pic字段,文件名为boris.png        [body appendFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",FORM_FLE_INPUT,picFileName];        //声明上传文件的格式        [body appendFormat:@"Content-Type: image/jpge,image/gif, image/jpeg, image/pjpeg, image/pjpeg\r\n\r\n"];    }        //声明结束符:--AaB03x--    NSString *end=[[NSString alloc]initWithFormat:@"\r\n%@",endMPboundary];    //声明myRequestData,用来放入http body    NSMutableData *myRequestData=[NSMutableData data];        //将body字符串转化为UTF8格式的二进制    [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];    if(picFilePath){        //将image的data加入        [myRequestData appendData:data];    }    //加入结束符--AaB03x--    [myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];        //设置HTTPHeader中Content-Type的值    NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];    //设置HTTPHeader    [request setValue:content forHTTPHeaderField:@"Content-Type"];    //设置Content-Length    [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[myRequestData length]] forHTTPHeaderField:@"Content-Length"];    //设置http body    [request setHTTPBody:myRequestData];    //http method    [request setHTTPMethod:@"POST"];            NSHTTPURLResponse *urlResponese = nil;    NSError *error = [[NSError alloc]init];    NSData* resultData = [NSURLConnection sendSynchronousRequest:request   returningResponse:&urlResponese error:&error];    NSString* result= [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];    if([urlResponese statusCode] >=200&&[urlResponese statusCode]<300){        RMLog(@"返回结果=====%@",result);        return result;    }    return nil;}/** * 修发图片大小 */+ (UIImage *) imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize) newSize{    newSize.height=image.size.height*(newSize.width/image.size.width);    UIGraphicsBeginImageContext(newSize);    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];    UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return  newImage;    }/** * 保存图片 */+ (NSString *)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName{    NSData* imageData;        //判断图片是不是png格式的文件    if (UIImagePNGRepresentation(tempImage)) {        //返回为png图像。        imageData = UIImagePNGRepresentation(tempImage);    }else {        //返回为JPEG图像。        imageData = UIImageJPEGRepresentation(tempImage, 1.0);    }    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);        NSString* documentsDirectory = [paths objectAtIndex:0];        NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName];        NSArray *nameAry=[fullPathToFile componentsSeparatedByString:@"/"];    RMLog(@"===fullPathToFile===%@",fullPathToFile);    RMLog(@"===FileName===%@",[nameAry objectAtIndex:[nameAry count]-1]);        [imageData writeToFile:fullPathToFile atomically:NO];    return fullPathToFile;}/** * 生成GUID */+ (NSString *)generateUuidString{    // create a new UUID which you own    CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);        // create a new CFStringRef (toll-free bridged to NSString)    // that you own    NSString *uuidString = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuid));        // transfer ownership of the string    // to the autorelease pool//    [uuidString autorelease];        // release the UUID//    CFRelease(uuid);        return uuidString;}


在实现文件的头处添加此命名(命名比较关键)

NSString *kTMP_UPLOAD_IMG_PATH=@"";

在实现文件中调用方法

    NSData *imageData = UIImagePNGRepresentation(tempImage);    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *documentsDirectory = [paths objectAtIndex:0];    NSString *fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName];        kTMP_UPLOAD_IMG_PATH = fullPathToFile;    [imageData writeToFile:fullPathToFile atomically:NO];#pragma mark -    NSString *URLString = [RMUtils requestURL:@"upload"];    NSDictionary *dictionData=[RMUtils userBaseMessage];    if ([[RMNetWork shareInstance] rechability]) {        if ([kTMP_UPLOAD_IMG_PATH isEqualToString:@""]) {            _httpString = [RequestPostUploadViewController postRequestWithURL:URLString postParems:[@{@"uid":dictionData[@"uid"],@"sign":dictionData[@"sign"]}mutableCopy] picFilePath:nil picFileName:nil FORM_FLE_INPUT:@"images_files"];        }else{            NSArray *nameArray = [kTMP_UPLOAD_IMG_PATH componentsSeparatedByString:@"/"];            _httpString = [RequestPostUploadViewController postRequestWithURL:URLString postParems:[@{@"uid":dictionData[@"uid"],@"sign":dictionData[@"sign"]}mutableCopy] picFilePath:kTMP_UPLOAD_IMG_PATH picFileName:[nameArray objectAtIndex:[nameArray count]-1] FORM_FLE_INPUT:@"images_files"];        }        if (_httpString == nil) {            [RMUtils showMessage:@"图片上传失败,请稍候再添加"];            return;        }        NSDictionary *bigDic = [RMUtils parseJSONStringToNSDictionary:[NSString ridObject:_httpString]];        NSDictionary *dataDic = bigDic[@"data"];        NSDictionary *imagesDic = dataDic[@"images_files"];        NSString *files_id = imagesDic[@"files_id"];        _files_id = files_id;    }else{        // 菊花加载    }}




由于这个是去年的时候弄的了,忘记都参阅了哪些资料,今天无意中想到了,列出来供大家参阅.

写法和用法都比较繁琐,有更好方法的还望指教啊!!!!!!!!






0 0
原创粉丝点击