AFNetworking 文件上传Data,File图片,文件等上传

iOS 使用AFN上传视频到服务器示例代码 本篇文章主要介绍了iOS 使用AFN上传视频到服务器示例代码,具有一定的参考价值,有兴趣的可以了解一下。 立即下载



转自:http://blog.youkuaiyun.com/smking/article/details/38880835

这段时间需要整理一些东西, 先备注在这里, 将花时间把这个点整理一下。

使用AFNetworking上传图片,(可一次上传多张图片,包含不同类型png, jpeg)

使用AFNetworking上传视频


    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    AFHTTPRequestOperation *operation = [manager POST:mutPath

                                           parameters:param

                            constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

                                

                               if (mediaDatas.count > 0) {

                                    NSObject *firstObj = [mediaDatas objectAtIndexSafe:0];

                                   if ([firstObj isKindOfClass:[UIImage class]]) {    //图片

                                       for(NSInteger i=0; i<mediaDatas.count; i++) {

                                            UIImage *eachImg = [mediaDatas objectAtIndexSafe:i];

                                            //NSData *eachImgData = UIImagePNGRepresentation(eachImg);

                                            NSData *eachImgData = UIImageJPEGRepresentation(eachImg, 0.5);

                                            [formData appendPartWithFileData:eachImgData name:[NSString stringWithFormat:@"img%d", i+1] fileName:[NSString stringWithFormat:@"img%d.jpg", i+1] mimeType:@"image/jpeg"];

                                        }

                                    }else {        // 视频

                                        ALAsset *asset = [mediaDatas objectAtIndexSafe:0];

                                        NBLog(@"asset=%@, representation=%@, url=%@", asset, [asset defaultRepresentation], [asset defaultRepresentation].url);

                                        if (asset !=nil) {

                                                NSString *videoPath = [NSDocumentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.mov", 0]];    // 这里直接强制写一个即可,之前计划是用i++来区分不明视频

                                                NSURL *url = [NSURL fileURLWithPath:videoPath];

                                                NSError *theErro =nil;

                                               BOOL exportResult = [asset exportDataToURL:url error:&theErro];

                                                NBLog(@"exportResult=%@", exportResult?@"YES":@"NO");

                                                

                                            NSData *videoData = [NSData dataWithContentsOfURL:url];

                                               [formData appendPartWithFileData:videoData name:@"video1" fileName:@"video1.mov" mimeType:@"video/quicktime"];

                                            NBLog(@"method 2");

                                        }

                                    }

                                }

                            } success:^(AFHTTPRequestOperation *operation,idresponseObject) {

                                NSDictionary *returnedDic = [XXBaseViewController parseResponseObj:responseObject];


                                NBLog(@"post Big success returnedDic=%@", returnedDic);

                            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

                                NBLog(@"post big file fail error=%@", error);

                               if (errorBlock) {

                                    errorBlock(@{@"errorcode":@(error.code),@"errordomain":error.domain});

                                }

                            }];

    

    [operation setUploadProgressBlock:^(NSUInteger bytesWritten,long longtotalBytesWritten,long long totalBytesExpectedToWrite) {

        NSLog(@"bytesWritten=%d, totalBytesWritten=%lld, totalBytesExpectedToWrite=%lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);

       if (xxProgressView != nil) {

            [xxProgressView setProgressViewTo:totalBytesWritten*1.0/totalBytesExpectedToWrite];

        }

    }];


1. 注意上面上传图片时时, 需要先转为NSData, 然后再执行

[formData appendPartWithFileData:eachImgData name:[NSString stringWithFormat:@"img%d", i+1] fileName:[NSString stringWithFormat:@"img%d.jpg", i+1] mimeType:@"image/jpeg"];

执行这个方法时, name:部分是服务器用来解析的字段, 而fileName则是直接上传上去的图片, 注意一定要加 .jpg或者.png,(这个根据你得到这个imgData是通过jepg还是png的方式来获取决定)。 然后mimeType值也要与上面的类型对应, 网上看到有的说直接写成 @"image/*", 据说也是可以的, 没验证过。 
但一定要注意的是这个fileName中.jpg和.png是一定要添加的。 否则服务器可能会推断这个图片的类型, 推断时就可能推断错误, 而使得图片上传上去后,显示不出来的问题。 我在做这个项目时就遇到了这样的问题, 现象就是有时上传成功,有时上传失败。 有时上传上去3张图,结果只显示2张图, 最后一张图显示不出来的, 可能就是因为服务器推断格式时推断错误。

2. 对于上面的视频文件, 这里使用的是ALAsset类型, 这个是通过

CTAssetsPickerController来选择手机相册中的视频文件的。

然后通过生成一个视频文件名及地址, 并通过一个写方法, 写到该路径下, 写文件如下。

- (BOOL) exportDataToURL: (NSURL*) fileURL error: (NSError**) error

{

    [[NSFileManager defaultManager] createFileAtPath:[fileURL path] contents:nilattributes:nil];

    NSFileHandle *handle = [NSFileHandle fileHandleForWritingToURL:fileURL error:error];

   if (!handle) {

       return NO;

    }

    

    ALAssetRepresentation *rep = [self defaultRepresentation];

    uint8_t *buffer = calloc(BufferSize,sizeof(*buffer));

    NSUInteger offset = 0, bytesRead = 0;

    

   do {

       @try {

            bytesRead = [rep getBytes:buffer fromOffset:offset length:BufferSize error:error];

            [handle writeData:[NSData dataWithBytesNoCopy:buffer length:bytesRead freeWhenDone:NO]];

            offset += bytesRead;

        }@catch (NSException *exception) {

            free(buffer);

           return NO;

        }

    }while (bytesRead > 0);

    

    free(buffer);

    return YES;

}


把视频写入后,再通过NSData来取出这个视频的数据。 并添加到这个AFHttpRequestOperation的Body中, 进行传输。

(估计这里可能有更好的办法来实现这个功能, 因为上面这个写入文件后,再转成NSData感觉有些繁琐,因为我曾尝试过其它方法,如通过ALAsset来获取到这个视频文件的url地址, 然后再通过NSData直接取这个地址,结果发现上传给后台后, 后台并不能识别到这个视频文件,后台能知道确实收到了视频数据,但可能某些原因,使得前端再次去获取该视频文件时,发现播放不了。具体原因可以再次去进行研究。

尝试过程如下:

A:

上传后, 后台仅获取到文本

                                                ALAssetRepresentation *rep = [asset defaultRepresentation];

                                                Byte *buffer = (Byte*)malloc(rep.size);

                                                NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];

                                                NSData *videoData = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];

                                                //                                        [formData appendPartWithFormData:videoData name:@"video1"];

                                                [formData appendPartWithFileData:videoData name:@"video1" fileName:@"video1.mov" mimeType:@"video/quicktime"];

尝试B:

通过NSURl来取到这个地址, 然后用NSData来取视频, 然后再把这个视频进行上传。

)

有兴趣的朋友可以继续研究下去。 

注:上传视频时和上面的上传图片一样,需要指定这个.mov, 及video/quicktime 类型指定。 前面的方法中要进行存储到本地时, 文件名指定为%d.mov。


Claude Code VSCode集成开发指南:AI编程助手完整配置 Claude Code与Visual Studio Code的深度集成为开发者提供了强大的AI编程支持。本文详细介绍Claude Code VSCode扩展的安装配置、功能特性和实际应用方法。通过完整的配置流程和代码示例,帮助开发者充分利用Claude AI的智能编程能力。文章涵盖从环境搭建到高级功能应用的完整指南,包括代码自动补全、智能重构、实时代码分析等核心功能的使用技巧,以及与现有开发工作流的整合方案。 阅读详情

相关推荐

众灵科技24路舵机控制器二次开发实战(1)-STM32串口指令控制详解

本文详细介绍了如何通过STM32单片机对众灵科技24路舵机控制器进行二次开发,实现串口指令控制。文章从硬件连接、通信协议解析到STM32代码实战,手把手指导开发者打通控制链路,并重点讲解了如何调用预设动作组驱动六足机器人,为后续集成传感器、无线遥控等高级功能奠定基础。

weixin_29188997的博客 483

上传图片(jpeg, png各种类型), 及视频

这段时间需要整理一些东西, 先备注在这里, 将

Jacky Shin的专栏 3万+

Linux【实战】—— LAMP环境搭建 & 部署网站

由LinuxApacheMySQLPHP组成的一个web网络平台。

2201_75935630的博客 4980

使用AFNetworking进行图片上传

//图片 NSData* imageData = UIImagePNGRepresentation(tempImage); //上传图片 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFHTTPResponseSer

1550

S/4中的16种特殊库存类型

S/4中的16种特殊库存类型

yanzibing99的博客 1万+

一个中科大差生的8年程序员工作总结

今年终于从大菊花厂离职了,离职前收入大概60w不到吧,在某乎属于比较差的,今天终于有空写一下自己的职场故事,也算是给自己近8年的程序员工作做个总结复盘。近8年有些事情做对了,也有更多事情做错了,在这里记录一下,希望能够给后人一些帮助吧,也欢迎私信交流。文笔不好,见谅,有些细节记不清了,如果有出入,就当是我编的这个故事吧。 PS:有几个问题先在这里解释一下,评论就不一一回复了 1、关于差生,我本人在科大时确实成绩偏下,差生主要讲这一点,没其他意思。 2、因为买房是我人生中的大事,我认为需要记录和总结一下

陈小房的自我修炼 5万+

iOS学习-AFNetworking上传多张图片至后台

iOS学习-AFNetworking上传多张图片至后台

qq_43441647的博客 849

第3.4章 机器人第三方库实战总结(四):G2O优化库从入门到实战(附SLAM实例代码)

自定义边同样是满足复杂应用需求的重要手段。自定义边时,需要明确边所连接的顶点类型以及边所表示的误差项的计算方式。假设我们要定义一条边,用于约束两个上述自定义顶点之间的相对位姿和传感器偏移量关系。我们可以这样定义边类:public:// 计算误差// 计算雅可比矩阵// 读盘和存盘函数,这里暂不实现。

行知SLAM 358

iOS利用AFNetworking(AFN) 实现图片上传

1.上传图片以二进制流的形式上传 1 #pragma mark - 文件上传 2 - (IBAction)uploadImage 3 { 4 /* 5 此段代码如果需要修改,可以调整的位置 6 7 1. 把upload.php改成网站开发人员告知的地址 8 2. 把file改成网站开发人员告知的字段名 ...

baifangli6341的博客 362

YOLOv8独家原创改进:原创自研 | 自研独家创新DSAM注意力 ,基于BiLevelRoutingAttention注意力升级

提出新颖的注意力DSAM(Deformable Bi-level SpatialAttention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的Deformable Bi-level Attention+Spartial Attention

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1512

解决Windows 11文件右键菜单卡死问题的方法

当你右键点击一个文件或者文件夹时,系统会加载与该文件类型相关的上下文菜单项,如果其中某个菜单项的代码执行时间过长或者出现错误,就会导致整个右键菜单卡死。综上所述,当你在Windows 11中遇到右键菜单卡死的问题时,你可以尝试禁用上下文菜单项、重置文件关联、排除第三方软件干扰、修复系统文件以及优化代码等方法来解决问题。如果你是一个开发者,并且你自己编写了一个上下文菜单项,那么问题可能出在你的代码中。例如,如果你遇到了图片文件的右键菜单卡死问题,你可以找到".jpg"或".png"等相关的子项。

HnrzLinux的博客 7536

AFNetworking 文件上传Data File图片,文件等上传

AFNetworking 文件上传Data File图片,文件等上传

qq_43667155的博客 303

ios开发拒绝“玄学”Crash:从循环引用到脏内存,构建你的系统性排查思维模型

你申请了内存,写了数据,这块内存就是脏的。系统无法直接回收它,除非你显式释放,或者系统把它 swap 出去(但在 iOS 上,Compressed Memory 机制虽然能压缩,但不会像桌面系统那样频繁 swap 到磁盘,一旦压缩内存也撑不住,你也得挂)。所以,排查 OOM 的核心心法只有一条:不要问“哪里漏了”,要问“每一刻,留在这个页面上的内存,凭什么必须在这里?一旦内存水位线逼近阈值(不同机型不同,老机器可能 600MB 就危,新机器能抗 1.5GB),系统发个警告。

大模型大数据攻城狮的专栏 724

AFNetworking 文件上传Data,File图片,文件等上传(转)

原文地址:文件上传Data,File图片,文件等上传(转)" style="text-decoration:none; color:rgb(82,102,115)">AFNetworking 文件上传Data,File图片,文件等上传(转)作者:追逐梦想 一:AFNetworking的文件上传:   主要几个以下类似  - (BOOL)appendPartWithFileUR

jinyeweiyang的专栏 680

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

AFNetWorking文件上传Data File图片 文件.

一:AFNetworking的文件上传:   主要几个以下类似  - (BOOL)appendPartWithFileURL:(NSURL *)fileURL name:(NSString *)name error:(NSError * __autoreleasing *)error;

ZZ825194632的博客 777

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

iOS开发通过AFNetworking上传图片到服务器

iOS开发通过AFNetworking上传图片到服务器 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", ...

a359798678的博客 113

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

afnetworking 上传 php,php – POST jpeg上传与AFNetworking

我无法为我的生活找出当我使用AFNetworking时为什么这不行.它与ASIHTTP合作.这对我来说都很新鲜但是我不知道为什么这些文件不再从$_FILES转移到服务器的HD.以下是iOS代码:- (IBAction)uploadPressed{[self.fileName resignFirstResponder];NSURL *remoteUrl = [NSURL URLWithString:...

weixin_39979215的博客 115
上一篇: C语言C Primer Plus总结(十九)--参考资料
下一篇: IOS _BSMachError: (os/kern) invalid capability (20)和_BSMachError: (os/kern) invalid name
Gz_Jason_chen
博客等级 码龄11年 49粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值