通过上一篇的学习,我们可以成功将宝宝的照片传到指定相册了,但是可爱的宝宝岂能只有照片,小视频必须同步跟上,莫问题!咱这篇就来一个视频上传的实现。

俺家小核桃镇贴。

服务端

其实对于yii2程序而言,如果不考虑转码、获取帧等事情,上传图片和上传一个视频差别并不大,我们还是先来构造接口实现。

考虑到在我们的程序中视频和照片都是存储在photo_item表中,通过type字段加以区分,因此我们仍然使用 /xcx/PhotoItemController这个控制器,但是create动作已经被上传图片使用了,无奈我们需要自定义一个action,就叫它add吧。

在yii2的restful中自定义路由方法

首先在web.php里的urlManager进行设置

//web.php

[

'class' => 'yii\rest\UrlRule',

'controller' => 'xcx/photo-item',

'extraPatterns'=>[

'POST add'=>'add',

]

],

设置后我们来写实际的action,这里先说明一点就是上传视频和上传图片思路一样,只是因为视频体积偏大,每次我们设定上传一个。

思路:新建photo记录返回小程序后上传具体文件。

对于新建photo记录不在说明,请参考上一篇文章,详细代码请大家参考github本项目仓库。

// PhotoItemController.add

public function actionAdd(){

$video = UploadedFile::getInstanceByName('file');

$body = Yii::$app->getRequest()->getBodyParams();

if($video == false){

throw new Exception('文件上传失败');

}

$ext = $video->getExtension();

$path_result = N8Folder::createItemPath('video',$ext);

$video->saveAs($path_result['save_path']);

$modelClass = $this->modelClass;

$model = new $modelClass();

$model->photo_id = $body['photo_id'];

$model->album_id = $body['album_id'];

$model->path = $path_result['web_path'];

$model->type = 2;

$model->save();

return $model;

}

ok,服务端暂且到这里,接下来开始我们小程序部署。

小程序

作为一套入门级实战教程,我们的重点在于小程序组件和api的讲解,因此对于上传视频我仍然采用和上传照片完全一致的思路,看下图。

在这里我们要做如下事情

选择或拍摄视频并判断是否符合标准

上传视频

第一步 生成photo记录

这一步和上一篇相同,我把代码贴过来自行看下,我们的重点不在这里。

formSubmit: function (e) {

var that = this;

var desc = e.detail.value.desc;

if (that.data.albumIndex < 0) {

wx.showToast({

title: '请选择相册',

})

return;

}

var albumId = that.data.albums[that.data.albumIndex].id;

wx.showLoading({ title: '提交中' });

wx.request({

method: 'POST',

data: {

album_id: albumId,

description: desc

},

url: 'http://xgh.local.com/xcx/photos',

header: {

'content-type': 'application/x-www-form-urlencoded'

},

success: function (res) {

}

});

}

当我们通过上面方法成功新建photo记录后,小程序可以拿到此刻photo的id,接下来我们上传视频。

在上传之前我们研究下如何选择和拍摄视频。

在视频这块微信小程序提供了2个API

wx.chooseVideo 选择视频

wx.saveVideoToPhotosAlbum 保持视频到相册

在这里我们使用第一个。

我们首先在data里设置了一个video字段用来表示选择视频的路径,然后在wxml里设置了一个text点击后触发函数addVideo来选择视频

// addVideo

addVideo: function () {

var that = this

wx.chooseVideo({

sourceType: ['album', 'camera'],

maxDuration: 60,

camera: 'back',

success: function (res) {

that.setData({

video: res.tempFilePath,

size: (res.size / (1024 * 1024)).toFixed(2)

})

}

})

},

通过sourceType可以设置 拍摄和选择已经存在的视频两个属性,maxDuration来限制拍摄时长。

关于chooseVideo成功后的返回还是蛮多的,一共5项

tempFilePath、duration、size、width、height。

总之我们通过上面的方法将video设置了选择视频的路径,为了体验好点,在视图wxml内我添加了如下代码

当前视频大小为{{size}}M

通过对video的判断来决定是否显示小视频预览,在这里我们用了小程序的video组件,以后会详细说明。

我们来看一下成果。

效果还不错,现在流程顺了,我们需要回过头来再去处理上面的formSubmit函数,有两件事情

点击提交前对视频的判断

生成photo记录后对视频的上传

判断

我们判断两个参数,一个是必须选择,一个是尺寸不能大于2M

formSubmit: function (e) {

var that = this;

var desc = e.detail.value.desc;

if (that.data.albumIndex < 0) {

wx.showModal({

title: '小乖猴助手',

content: '请选择相册'

})

return;

}

var albumId = that.data.albums[that.data.albumIndex].id;

if (that.data.video == false) {

wx.showModal({

title: '小乖猴助手',

content: '请录制或选择一个小视频'

})

return false;

}

if (that.data.size > 1024 * 1024 * 2) {

wx.showModal({

title: '小乖猴助手',

content: '很抱歉,视频最大允许2M,当前为' + (that.data.size / (1024 * 1024)).toFixed(2) + 'M'

})

return false;

}

.......

}

没什么难度,if而已。

接下来处理上传

当获取了photo记录后,将视频上传上去,知道哪个函数了吧,对,就是uploadFile,看代码

formSubmit: function (e) {

....

wx.request({

method: 'POST',

data: {

album_id: albumId,

description: desc

},

url: 'http://xgh.local.com/xcx/photos',

header: {

'content-type': 'application/x-www-form-urlencoded'

},

success: function (res) {

if (res.statusCode == 201) {

var photo = res.data;

wx.showLoading({ title: '视频上传中' });

wx.uploadFile({

url: 'http://xgh.local.com/xcx/photo-items/add',

method: 'POST',

filePath: that.data.video,

header: {

'content-type': 'multipart/form-data'

},

name: 'file',

formData: {

photo_id: photo.id,

album_id: photo.album_id

},

success: function (r) {

wx.hideLoading();

wx.showModal({

title: '小乖猴助手',

content: '上传成功',

})

},

fail: function (r) {

}

})

}

}

});

}

ok,成功了

总结

就这样,我们轻松实现了视频上传功能,有上一篇做基础我想很多方法你已经很熟悉了吧,详细代码稍后会放到github上,大家可以拉下来看下。

小程序上传视频的php接口处理,微信小程序[第十二篇] -- 上传视频相关推荐

  1. 短视频去水印多功能工具箱微信小程序源码下载支持多种流量主

    没错这是一款以去水印为主的一款多功能微信小程序源码 该小程序源码除了拥有去水印功能以外还拥有N款其它实用的功能 比如喝酒神器,短网址生成,历史上的今天等等如下: 短视频去水印(自带接口,速度非常快) ...

  2. 微信小程序:全新强大的恋爱话术微信小程序源码土味情话视频号or自媒体操作项目

    你猜的不错,这就是一款恋爱话术小程序 该款小程序相对来说还是挺强大的 而且还融合了小编前段时间发布的一款土味情话在里面 这款小程序基本分段都是和外面几千块几百块的分段是一样的 如有分段是: 开场阶段丨 ...

  3. 微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-翟东平-专题视频课程...

    微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-2445人已学习 课程介绍         微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识. 微信小 ...

  4. 微信小程序原生开发功能合集一:微信小程序开发介绍

    一.专栏介绍   本专栏主要内容为微信小程序常用功能开发过程的介绍说明,包括开发微信小程序常用组件的封装.常用功能的开发等,提供源代码.开发过程讲解视频.完整的课程等.   组件封装: 下拉选择组件. ...

  5. 微信小程序是什么?如何快速搭建一个微信小程序?

    目录 一.微信小程序是什么 二.安全管理 三.微信小程序的功能 四.快速开发一个微信小程序APP 1.集成即构实时音视频SDK 2.初始化SDK引擎 3.创建房间与登录房间 4.房主创建房间 5.推流 ...

  6. 小程序源码:网课查题微信小程序源码下载,题库资源丰富自动采集,支持语音拍照识别

    这是一款网课查题微信小程序源码 题库资源丰富自动采集, 支持语音拍照识别 该款采用接口方式,所以题库自动全网采集 而且该款小程序无需服务器和域名即可搭建 大家解压源码然后使用微信开发者工具打开源码 然 ...

  7. 视频教程-微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-微信开发

    微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...

  8. 视频教程-微信小程序系统教程python版[3/3阶段]_微信小程序支付-手游开发

    微信小程序系统教程python版[3/3阶段]_微信小程序支付 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...

  9. uni-app微信小程序生成自定义参数二维码,跳转小程序指定页面,获取参数;uni-app微信小程序获取二维码自定义参数;微信小程序生成动态参数二维码;uni-app微信小程序获取动态参数二维码;

    一.场景需求: 在小程序个人名片页面A页面,生成用户的个人名片二维码(该二维码携带用户的唯一标识id):微信扫一扫或长按图片识别这个二维码,可以跳转到小程序的B页面,并且在B页面拿到二维码上的唯一标识 ...

最新文章

  1. Tomcat是什么:Tomcat与Java技、Tomcat与Web应用以及Tomcat基本框架及相关配置
  2. spark 执行流程及各组件执行
  3. :src 三目运算
  4. iOS Coding项目片段记录(八)
  5. VM克隆之后启动eth0找不到eth0:unknown interface:no such device
  6. [导入]Google Earth坐标集(能更看清这个世界喽!)
  7. java嵌套循环语句_Java学习笔记(七) 循环语句
  8. 用python自己做游戏_练习项目20:使用python制作游戏(中)
  9. 百度地图获取河流_想要提高学生对地理的兴趣,就要多利用地图,培养学生的思维能力...
  10. pandas提取某两列的值_Pandas进阶修炼120题第五期
  11. DVM 和 JVM 的区别?
  12. 【GDB调试学习笔记】Makefile生成多个可执行文件
  13. 仿Hex-Editor,实现简单地二进制文件查看器JHexer
  14. 消防报警图形显示装置linux,消防中控-消防控制室图形显示装置状态识别及操作...
  15. 联想台式机Windows 7系统设置双显示器输出
  16. 【论文阅读】SCRDet++
  17. Linux DTS中和中断相关属性的解释和用法
  18. java list 博客园_Java集合系列(一)List集合
  19. 传智播客100万现金奖励优秀校友
  20. Oracle巡检脚本大全,服务器可直接部署

热门文章

  1. 新修复h5盲盒商城砸金蛋源码(完美运行)
  2. 微信小程序从入坑到放弃二十二:完美兼容安卓和ios手机的底部评论框
  3. 赠书活动 | Kubernetes、云原生、云计算领域不可不读的9本书,免费包邮哦!
  4. 数学运算符 +(加)、-(减)、(乘)、(除)、%(取余;取模)、(整除)、(幂运算)及分支结构
  5. Flooded! UVA - 815(简单计算 -洪水)
  6. 在 Excel 中查找和替换特殊字符 * 和 ?
  7. 向单片机flash中烧录自定义数据的方法
  8. 【金猿产品展】Elens智语——“傻瓜化”实现领域模型定制的自然语言处理平台...
  9. Ubuntu下Android开发环境的搭建
  10. 传智播客的云计算大数据课程表