下载视频并保存至手机相册
功能介绍:需要将转码后的视频(小于20MB),通过APP下载至手机相册,可以将小视频分享至微信传播。
1.通过服务器转码视频,或者很多云服务商都会提供这个功能。
2.通过APP下载至手机相册,这个是咱们需要做的事。
主要技术:用到 URLSession 和 URLSessionDownloadDelegate
1.创建 session 下载任务 并执行(由于下载的视频比较小,所有就不用分段下载了)
// 初始化 sessionlet config = URLSessionConfiguration.default;let session = URLSession(configuration: config, delegate: self, delegateQueue: OperationQueue());// 视频地址let url = URL(string: urlStr.addingPercentEncoding(withAllowedCharacters:.urlQueryAllowed)!);// 创建请求let request = URLRequest(url: url!);let download = session.downloadTask(with: request);// 开始任务,session 任务默认都是挂起的,需要 resume 才能执行download.resume();
2.设置 URLSessionDownloadDelegate 代理方法
//下载完成时调用,location 是下载完成后的路径
@available(iOS 7.0, *)public func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL)//下载进度,下载过程中会多次调用
//bytesWritten: 本次写入的字节数,totalBytesWritten:已经写入的字节数(目前下载的字节数),totalBytesExpectedToWrite:总得下载字节数(文件的总大小)
@available(iOS 7.0, *)optional public func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64)//继续下载,@available(iOS 7.0, *)optional public func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64)
上代码
// 完成调用func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {// 1.输出 location 是 "file:///user..." 格式,需要将 file:// 截掉,并转换成 String 格式
// 2.下载完成后的文件默认保存在沙盒tmp文件夹(临时文件)中,该方法结束后系统会自动删除,所以需要转存并且修改文件格式
// 将源文件 URL 地址转成 Stringlet locationStepOne = location.absoluteString as NSString;// 截掉 file://let locationStepTwo = locationStepOne.substring(from: 7);// 创建文件管理器let manager = FileManager.default;// 目标地址 cache 文件夹下let pathArray = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true);// 生成目标地址let copyPath = pathArray.first! + "/video.mov";
// 判断文件是否存在,存在就删除
let exist = manager.fileExists(atPath: copyPath);if exist {// 有,则删除let cancel:Bool = ((try?manager.removeItem(atPath: copyPath)) != nil);if !cancel {return;}}
// 复制文件 tmp -> cache
let save:Bool = ((try? manager.moveItem(atPath: locationStepTwo, toPath: copyPath)) != nil);if save {
// 检测文件是否可以保存至相册
if UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(copyPath) {// 存入相册UISaveVideoAtPathToSavedPhotosAlbum(copyPath, self, nil, nil);}} else {print("失败");}}// 下载进度func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {// 获取进度let written:Float = (Float)(totalBytesWritten);let total:Float = (Float)(totalBytesExpectedToWrite);let progress:Float = written/total;}// 继续下载func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64) {}
下载视频并保存至手机相册相关推荐
- 手机优酷下载视频怎么保存到手机
有时大家必须把一些视频文件格式下载出来看,防止在沒有总流量的情况下来收看,例如远途消磨时光,就可以收看下载好的视頻是十分非常好的挑选,那麼下边大家讨论一下怎样下载视頻到手机呢? 手机优酷下载视频怎么保 ...
- 微信小程序下载图片获取相册授权,保存视频或图片到手机相册
单独建一个downloadfile.js,将方法导出: downloadfile.js文件: //downloadfile.js/*** 下载单个文件*/ function downloadFile( ...
- sipjs 保存mp4文件_微信视频号视频怎么下载,视频号视频怎么保存到手机
微信视频号视频怎么下载,视频号视频怎么保存到手机. 这是分享在网站上的微信视频号下载教程,具体细节可查看网站详细细节 微信视频号视频怎么下载,视频号视频怎么保存到手机 - 承林私塾自学网281666 ...
- uniapp 下载图片并保存到手机的相册中
使用unaipp开发的微信小程序中,下载图片并保存到手机的相册中. 创建公共方法文件 common.js,相关api可以自行查阅微信开发文档了解,参照代码如下: let baseUrl = 'http ...
- 微信动态表情保存到手机相册
微信表情包不能下载到手机相册,一直是许多用户头疼的一个问题,现在关注了这个小工具,只需简单一步,就能立即把想要的表情保存到本地手机相册,轻轻松松3秒搞定. 01 关注公众号:表情保存神器 02 把需要 ...
- uniapp canvas 图片加上文字合成一张新图并保存到手机相册
uniapp canvas 图片加上文字合成一张新图并保存到手机相册 背景图上是奖章徽章,中间加上自定义文本,我这个图是因为背景图上原来就有字,随便找的,所以跟我写的文字层叠了 具体实现代码 < ...
- 小程序canvas生成海报保存至手机相册
小程序canvas画图保存至手机相册 (1)可直接展示生成的海报 .因手机分辨率不同可能导致生成的海报会有细微差别,这里隐藏canvas海报,页面正常设置海报样式保存时保存隐藏的canvas海报 (2 ...
- 微信小程序使用canvas画图并保存到手机相册踩坑总结
接到个项目做微信小程序的,需要将手机中的页面保存到手机相册中,效果图如下 首先想到的就是利用canvas画图然后在保存到相册,看起来很简单网上也有很多例子,但都不完整,很多网友分享的都在半吊子工程,只 ...
- 微信小程序第四篇:生成图片并保存到手机相册
系列文章传送门: 微信小程序第一篇:自定义组件详解 微信小程序第二篇:七种主流通信方法详解 微信小程序第三篇:获取页面节点信息 目录 一.封装分享组件 二.定义用户授权方法 三.调用流程 首先我们看一 ...
最新文章
- SD-WAN开源优势是什么?
- Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery
- 地表最强的MySQL安装一键式安装,信不信你下完我就给你装好!附各种Mysql安装失败的解决办法(什么你安装失败了?快来看这个)
- 记住北京历史上的灾难
- conda 安装mysql_centos7安装mysql
- Caffe将图像数据转换成leveldb/lmdb
- 随想录(分布式系统)
- Ruby数据结构-数组和哈希表
- springboot生成包含特定数字_关于Spring Boot 这可能是全网最好的知识点总结
- 【音乐理论】音与音高 ( 音 | 乐音体系 | 音列 | 基本音级 | 音名和唱名 )
- web前端开发技术实验与实践(第三版)储久良编著 课外拓展训练5.2 HTML5是如何起步的
- 映美530k驱动不能安装问题
- QCC300x 芯片ota升级PSKey 操作方法
- 互补滤波 二阶低通滤波理解
- 能使用firebug的火狐浏览器下载地址
- 年终盘点 |15种最常用的数据分析方法和模型,赶紧收藏起来吃灰
- 人人网相册加密密码破解
- 修改Visata下的无线网卡(Intel 5100 agn)Mac地址
- 将U盘的图标改成自己喜欢的图案
- 安卓玩机搞机技巧综合资源---MIUI14全机型首版下载链接 刷机方法 获取root步骤【十二】
热门文章
- 谷歌浏览器收藏栏不见了解决办法
- 火狐浏览器解除端口限制
- 在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数
- yarn打包报错:error during build: Error: Assigning to rvalue (Note that you need plugins to import files
- PV操作与信号灯及例子
- Linux进程间通信(二)之信号量
- 最好的礼物是忠言,最好的修养是宽恕。
- 名帖347 怀素 草书《大草千字文》
- linux安装系统如何查看硬盘,如何检查Linux系统服务器的硬盘是SSD还是HDD?
- 使用python制作爬虫_使用Python的urllib和urllib2模块制作爬虫的实例教程