扫码关注官方订阅号
我有个需求是从iOS上传一个大约30MB左右的大文件到服务端,现在我就用了ASI的那个FormRequest,但是文件太大了,传起来超级慢,而且中间一旦出现问题,就得重新传输。 我现在想到两个优化的办法
认证0级讲师
断点的话,服务器纪录一个传递的文件偏移位置,每次请求从返回的head中读取偏移量,然后,客户端通过NSFileHandle通过偏移读取文件到buffer再发送到服务器。
NSFileHandle *readHandle = [NSFileHandle fileHandleForReadingAtPath:filePath]; [readHandle seekToFileOffset:offset]; NSInputStream *fileStream = [NSInputStream inputStreamWithData:[readHandle readDataOfLength:1024*8]];
对于1,你切割成5个做异步,不如一个文件做断点,切割还增加了客户端和服务器对文件操作的开销。
七牛的做法是,服务端计算用户上传块的checksum和crc32值,每上传成功一个chunk就返回相应的上下文。客户端保存上下文进行断点续上传。
参考 API: http://docs.qiniutek.com/v3/api/io/#r...
断点续传对客户端的要求不高,30MB其实是一个小文件,没必要起过多线程来做,这样对客户端的效率提升估计不是很大而且会导致server端的操作复杂。简单的方法就是@felix021说的,由server记录上次文件已传输并落地或者cache住的文件偏移,和客户端进行类似HTTP交互的一问一答即可,如果某次客户端上传失败,续传时先查询server就可以知道从哪里继续了。
断点续传需要什么特别的方案吗?不就是在服务器端记录一下上传进度,重传的时候找服务器要回来就行了。
请问七牛断点续传怎么写 ,,用cancellationSigna 返回YES 可以实现暂停继续,如果程序退出时,下次上传怎么续传呢
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
断点的话,服务器纪录一个传递的文件偏移位置,每次请求从返回的head中读取偏移量,然后,客户端通过NSFileHandle通过偏移读取文件到buffer再发送到服务器。
对于1,你切割成5个做异步,不如一个文件做断点,切割还增加了客户端和服务器对文件操作的开销。
七牛的做法是,服务端计算用户上传块的checksum和crc32值,每上传成功一个chunk就返回相应的上下文。客户端保存上下文进行断点续上传。
参考 API: http://docs.qiniutek.com/v3/api/io/#r...
断点续传对客户端的要求不高,30MB其实是一个小文件,没必要起过多线程来做,这样对客户端的效率提升估计不是很大而且会导致server端的操作复杂。简单的方法就是@felix021说的,由server记录上次文件已传输并落地或者cache住的文件偏移,和客户端进行类似HTTP交互的一问一答即可,如果某次客户端上传失败,续传时先查询server就可以知道从哪里继续了。
断点续传需要什么特别的方案吗?不就是在服务器端记录一下上传进度,重传的时候找服务器要回来就行了。
请问七牛断点续传怎么写 ,,用cancellationSigna 返回YES 可以实现暂停继续,如果程序退出时,下次上传怎么续传呢