欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS上传图片和视频(base64和file)

程序员文章站 2022-05-27 22:14:19
前言:iOS开发中经常会使用到图片和视频上传及保存到相册,下面我讲介绍视频图片的两种上传服务器的方法。以阿里云的OSS服务器为例。 友情提示:上传图片方法在APP中使用很广泛,最好单独写一个图片上传的类,这样就很方便了。 base64上传图片:NSString *strType = [GXToolC ......

前言
ios开发中经常会使用到图片和视频上传及保存到相册,下面我讲介绍视频图片的两种上传服务器的方法。以阿里云的oss服务器为例。

友情提示:
上传图片方法在app中使用很广泛,最好单独写一个图片上传的类,这样就很方便了。

base64上传图片:
nsstring *strtype = [gxtoolclass getbase64str:image];

    nsmutabledictionary *dic = [nsmutabledictionary dictionarywithcapacity:1];

    [dic setvalue:strtype forkey:@"base64"];

    

    afhttpsessionmanager *manager = [afhttpsessionmanager manager];

    [manager post:[base_host stringbyappendingstring:http_global_oneimage] parameters:dic progress:^(nsprogress * _nonnull uploadprogress) {

        

    } success:^(nsurlsessiondatatask * _nonnull task, id  _nullable responseobject) {

        if ([responseobject[getcode] intvalue] == 0) {

            nsdictionary *dic = responseobject[getdata];

            nsstring *file = dic[@"file"];

            if (self.block) {

                self.block(file);

            }

        }else{

            [[appdelegate getapp] showalert:responseobject[getnewmess] type:alertviewtype_toast];

            if (self.otherblock) {

                self.otherblock(responseobject[getnewmess]);

            }

        }

    } failure:^(nsurlsessiondatatask * _nullable task, nserror * _nonnull error) {

        if (self.failblock) {

            [[appdelegate getapp] showalert:@"上传失败请稍后重试" type:alertviewtype_toast];

            self.failblock(@"上传失败请稍后重试");

        }

    }];

 

+(nsstring *)getbase64str:(uiimage *)ima //图片转成base64的 方法

{

    nsdata *data = uiimagejpegrepresentation(ima, 0.3);

    nsstring *imagestyle = [self getimagestyle:data];

    nsstring *str = [data base64encodedstringwithoptions:nsdatabase64encoding64characterlinelength];

    str = [nsstring stringwithformat:@"data:image/%@;base64,%@", imagestyle, str];

    return str;

}

file视频上传:
    afhttpsessionmanager *manager = [afhttpsessionmanager manager];

    manager.requestserializer = [self gethttpheader];

//    manager.responseserializer.acceptablecontenttypes = nil;

    

    manager.responseserializer.acceptablecontenttypes = [nsset setwithobjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];

    

    [self beginloading:@"上传中" view:self.view];

    [manager post:[base_host stringbyappendingstring:http_main_videoupload] parameters:dic constructingbodywithblock:^(id<afmultipartformdata>  _nonnull formdata) {

        

        nsstring *strimagestyle = [gxtoolclass getimagestyle:dataima];

        [formdata appendpartwithfiledata:data1 name:@"file" filename:_outputpath mimetype:@"mov"];

        [formdata appendpartwithfiledata:dataima name:@"thumb" filename:[nsstring stringwithformat:@"file.%@", strimagestyle] mimetype:strimagestyle];

 

    } progress:^(nsprogress * _nonnull uploadprogress) {

 

    } success:^(nsurlsessiondatatask * _nonnull task, id  _nullable responseobject) {

        [self stoploading];

        if ([responseobject[getcode] intvalue] == 0) {

            [self.navigationcontroller popviewcontrolleranimated:yes];

        }

        [self showalert:responseobject[getmessage] type:alertviewtype_toast];

    } failure:^(nsurlsessiondatatask * _nullable task, nserror * _nonnull error) {

        [self stoploading];

        [self showalert:@"上传失败请稍后重试" type:alertviewtype_toast];

    }];

+(nsstring *)getimagestyle:(nsdata *)data//获取图片格式

{

    uint8_t c;

    [data getbytes:&c length:1];

    switch (c) {

        case 0xff:

            return @"jpeg";

        case 0x89:

            return @"png";

        case 0x47:

            return @"gif";

        case 0x49:

        case 0x4d:

            return @"tiff";

        case 0x52:

            if ([data length] < 12) {

                return nil;

            }

            nsstring *teststring = [[nsstring alloc] initwithdata:[data subdatawithrange:nsmakerange(0, 12)] encoding:nsasciistringencoding];

            if ([teststring hasprefix:@"riff"] && [teststring hassuffix:@"webp"]) {

                return @"webp";

            }

            return nil;

    }

    return nil;

}

两种方法均可公用不在重复说明