当前位置:首页 » 文件管理 » ios上传视频到服务器

ios上传视频到服务器

发布时间: 2023-06-04 12:28:08

A. iOS 江湖救急!!!怎样将音频文件上传到服务器

http上传 把文件以body形式上传到服务器 NSFileHandle* handler = [NSFileHandle fileHandleForReadingAtPath:_fileURL];
[handler seekToFileOffset:(unsigned long long)_range.location];
NSData* body = [handler readDataOfLength:_range.length];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];
[request setValue:@"video/mp4" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d",body.length] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"no-cache" forHTTPHeaderField:@"Cache-Control"];
[request setHTTPBody:body];

然后服务器接收body 二进制流

B. ios文件写操作和文件上传到服务器

你所阐述的问题 就是指的是 向服务器传一个文件。 多用post 请求。用 自带的NSURLConnection 或者ASI 等 都可以。你过程说的明了,不知道是具体哪个环节有问题。 写文件?传文件?

C. 怎样将苹果5S上的App传输到云端

用itunes导出:
将手机连接电脑后,打开itunes,在左侧选择【音乐】 itunes会自动同步连接的iphone或ipad,同步完成后,点击最下面的【语音备忘录】 右侧窗口中,即是语音备忘录里的录音文件
任意选一个录音文件,右击,选择【在 windows explorer 中显示】 这样就打开了录音文件在硬盘中的位置,找到你想要的录音文件,随便复制去哪吧 ^_^ 这种录音文件是m4a格式的,很多播放器都支持。 如果想换成mp3格式,找个格式转换工具就可以了,比如魔影工厂就可以 。
用邮件发送录音文件,前提是iphone或ipad里的邮件有帐户并且是活跃的 ,打开语音备忘录,找到要发送的录音。
点击右侧的蓝色箭头 在录音文件简介中,点击【共享】,再点击【用电子邮件发送】 在邮件发送页面中,填写好收件人、主题后,点击发送即可
录音文件会自动添加到附件中 到邮箱中,即可收到从iphone或ipad发送的录音文件 itools:
将iphone或ipad连接电脑,然后打开itools。找到左下角的【文件系统】→【语音备忘录】,然后在右侧找到要导出的录音文件,右击导出,找个地方保存就可以啦。

1、方法一:使用QQ。
使用qq的文件传输功能,手机端和电脑端都有传文件的入口,可以互传图片、APK软件等等所有文件,单张传图也不会被压缩

2、方法二:使用微信。
登录微信电脑客户端后,电脑和手机端的联系人最上,就会出现一个文件传输助手,电脑端传文件到手机端时文件格式不限,点击文件按钮后,可以直接在电脑中选择任何文件。

3、方法三:使用茄子快传。
茄子快传可以跨平台传输。首先需要在电脑端和手机端都安装茄子快传软件,通过扫码连接配对,手机与电脑连接时,手机端需要先连接到电脑端提供的wifi热点中,然后通过扫码就可以顺利的连接到电脑端,开始愉快的传输文件了。

4、方法四:使用网盘。
手机端安装一个360云盘APP,就可以跟电脑端的网页版或电脑客户端互传文件了。不过需要注意的是,网络云盘会有一些过滤机制,某些羞羞的小电影如果存上去,一准会被和谐掉的。360云盘手机端也有备份照片和通讯录的功能,可以后台自动同步备份。

D. iOS阿里云OSS上传多张图片和视频

1.从服务器获取上传需要的 accessKeyId, accessKeySecret, securityToken;如果你们是本地直接配置,不需要从服务器拿直接省略。

2.配置OSSTask

3.1 上传图片

3.2 上传视频

E. iOS大文件的分片上传和断点上传

由于最近比较忙,所以一直没有写博客,现在分享一些大文件的上传的问题!断点续传和分片上传。因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况。http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件切片(分块),但这不是我们现在说的重点,我们要做的事是保证在网络中断后1G的文件已上传的那部分在下次网络连接时不必再重传。所以我们本地在上传的时候,要将大文件进行分片,比如分成1024*1024B,即将大文件分成1M的片进行上传,服务器在接收后,再将这些片合并成原始文件,这就是分片的基本原理。断点续传要求本地要记录每一片的上传的状态,我通过三个状态进行了标记(wait loading finish),当网络中断,再次连接后,从断点处进行上传。服务器通过文件名、总片数判断该文件是否已全部上传完成。

下面来说细节:

1、首先获取文件(音视频、图片)

分两种情况,一种是在相册库里直接获取,一种是调用相机。如果是通过UIImagePickerView来获取(细节不详述,网上一大堆),我们会发现当你选定一个视频的时候,会出现图1的压缩页面,最后我们的app获取的视频就是这个经过压缩后的视频(不是视频库里的原始视频,这里有个注意点,操作完该压缩视频后记得释放,系统不会帮你释放的,需要你手动来操作,下面会说到),然后通过UIImagePickerView的协议方法中的- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info获取视频的Info

fileInfo = {

= "public.movie";

= "file:///private/var/mobile/Containers/Data/Application/2AAE9E44-0E6D-4499-9AC3-93D44D8342EA/tmp/trim.F36EC46C-4219-43C8-96A7-FA7141AB64D2.MOV";

= "assets-library://asset/asset.MOV?id=DEDA9406-3223-4F87-ABB2-98FB5F5EB9C4&ext=MOV";

}

是选取文件的类型,如KUTTypeImage,KUTTypeMovie。这里注意一下movie和video的区别,一个是有声音的视频文件,一个是没有声音的视频文件,当然还有Audio是只有声音没有视频。是视频的URL(如果是相机拍摄的,那么这个就是原始拍摄得到的视频;如果是在相册库里选择的,那就是压缩之后生成的视频),注意这个URL不指向相册库,通过这个URL你可以操作这个视频如删除,拷贝等,可以获取压缩后的视频的大小。是一个指向相册的URL,官方的解释是an NSURL that references an asset in the AssetsLibrary framework,通过这个URL,你可以获取视频的所有信息,包括文件名,缩略图,时长等(通过ALAssetsLibrary里的assetsLibraryassetForURL:referenceURLresultBlock:)。

如果是相机拍摄的,注意两个保存方法:图片保存到相册:UIImageJPEGRepresentation([infovalueForKey:],(CGFloat)1.0)metadata:nilcompletionBlock: failureBlock:

高保真压缩图片的方法NSData * UIImageJPEGRepresentation ( UIImage *image, CGFloat compressionQuality)

视频保存到相册::MediaURL completionBlock:failureBlock:

到这里,我们就获取了所有需要的文件以及文件信息。下面要做的就是将文件分片。

2、将获取到的文件分片

首先,我将获取到的文件保存在这这样一个类中

@interface CNFile :NSObject

@property(nonatomic,)NSString* fileType;//image or movie

@property(nonatomic,)NSString* filePath;//文件在app中路径

@property(nonatomic,)NSString* fileName;//文件名

@property(nonatomic,assign)NSIntegerfileSize;//文件大小

@property (nonatomic,assign)NSIntegertrunks;//总片数

@property(nonatomic,)NSString* fileInfo;

@property(nonatomic,strong)UIImage* fileImage;//文件缩略图

@property(nonatomic,strong) NSMutableArray* fileArr;//标记每片的上传状态

@end

这样我们就可以对每一个CNFile对象进行操作了。

-(void)readDataWithChunk:(NSInteger)chunk file:(CNFile*)file{

总片数的获取方法:

intoffset =1024*1024;(每一片的大小是1M)

NSIntegerchunks = (file.fileSize%1024==0)?((int)(file.fileSize/1024*1024)):((int)(file.fileSize/(1024*1024) +1));

NSLog(@"chunks = %ld",(long)chunks);

将文件分片,读取每一片的数据:

NSData* data;

NSFileHandle*readHandle = [:file.filePath];

[readHandleseekToFileOffset:offset * chunk];

data = [readHandlereadDataOfLength:offset];

}

这样我们就获取了每一片要上传的数据,然后询问服务器,该片是否已经存在

(方法-(void)ifHaveData:(NSData*)data WithChunk:(NSInteger)chunk file:(CNFile*)file)

,如果存在,令chunk+1,重复上面的方法读取下一片,直到服务器不存在该片,那么上传该片数据。在这个方法中注意设置该chunk的上传状态(wait loading finish),这将关系到本地判断该文件是否已全部上传完成。

下一步就是上传的过程:

-(void)uploadData:(NSData*) data WithChunk:(NSInteger) chunk file:(CNFile*)file;

在服务器返回该片上传成功后,我们要做的事有很多:

1)先将已经成功上传的本片的flag置finish

[file.fileArrreplaceObjectAtIndex:chunk withObject:@“finish"];

2)查看是否所有片的flag都已经置finish,如果都已经finishi,说明该文件上传完成,那么删除该文件,上传下一个文件或者结束。

for(NSIntegerj =0; j

if(j == chunks || ((j == chunks -1)&&([file.fileArr[j]isEqualToString:@"finish"])))

[medeleteFile:file.filePath];

[mereadNextFile];

}

3)如果没有都finish,那么看本地下一chunk对用的flag是否是wait

NSLog(@"查看第%ld片的状态",chunk+1);

for(NSIntegeri = chunk+1;i < chunks;i++)

{

NSString* flag = [file.fileArrobjectAtIndex:i];

if([flagisEqualToString:@"wait"]) {

[mereadDataWithChunk:ifileName:fileNamefile:file];

break;

}

}

在第2、3步之间可以有一个 2.5)判断是否暂停上传

if(me.isPause ==YES)

{

//将目前读到了第几个文件的第几片保存到本地

[selfsaveProgressWithChunk:chunk file:file];

return;

}

这个操作实际上和上传过程中断网是一样的,为了断点续传,在断网或者暂停的时候,我们要将目前的进度保存起来,以便下次上传时略过前面已置finish的片。

然后还有一个问题,如果我们就这样线性的一片一片上传,实际上失去了分片上传的意义,应该结合多线程,使分片上传过程并发执行,同时上传多片,这样就提高了上传效率,并充分利用了网络带宽。

dispatch_async(dispatch_queue_t queue, ^{

[mereadDataWithChunk: chunk];

})

最后注意一下,每上传完一个视频,去设置里看看你的app占用的存储空间有没有增大哦,如果你没有处理那个生成的压缩视频,你会发现你的app的空间占用量是很大的。

站在大牛的肩膀上开发。

热点内容
sql转换成数据类型int时失败 发布:2024-05-05 06:29:21 浏览:826
苹果手机视频怎么加密 发布:2024-05-05 06:22:08 浏览:918
java反编译工具使用方法 发布:2024-05-05 06:00:38 浏览:217
恋人源码 发布:2024-05-05 05:53:33 浏览:166
安卓平板用什么助手好 发布:2024-05-05 05:51:09 浏览:775
java语义分析 发布:2024-05-05 05:32:39 浏览:754
我的世界服务器房型 发布:2024-05-05 05:31:16 浏览:702
pythonwhere 发布:2024-05-05 05:30:22 浏览:441
免费加密隐身侠 发布:2024-05-05 05:07:54 浏览:613
我的世界模组服务器推荐手机版 发布:2024-05-05 05:02:49 浏览:818