HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

力谱云:成功开发APP后,如何通过5大环节打通APP运营路

5+App开发

众所周知,移动互联网的流量犹如聚宝盆。许多用户,好不容易完成了> 手机APP开发制作**,却苦无APP运营经验,束手无策?如果您完全没有这方面的经验,那么跟着力谱云小编,咱们来学学如何通过5大步骤,包圆您的APP运营新手路吧!
首先,我们要明白APP就是一个流量入口,而我们所有的APP运营相关工作,都是为了“拉新、促活、留存”而存在的,简单地说,圈住用户是最大的目标!
其次,在这个基础上,你必须清楚定位自己的用户群。
而为了更好地完成这个目标,我们可以从内容、用户、活动、产品、数据等5大环节入手。
内容运营,引流增信赖
内容运营,是做APP运营中最为基础的一部分。这是一个内容付费时代崛起的时刻,这也意味着当前的内容价值,对互联网用户群的吸引力。因此,内容做得好,就是一个很好的引流工具,可以有效增长APP用户量。
而做内容运营,最大的关键点在于,你的内容必须有价值,而非单纯的推销与介绍。其中,情感类、价值观的引入,更能提高用户的信赖度与友善度,并平台品牌影响力。在形式方面,也需要花样百出,除了文字与图片类,目前,直播与短视频,在内容输出上,更是引流不少。
用户运营,建立桥梁
用户运营,主要需要弄明白用户想从你的APP中得到什么?简单地说,就是弄明白用户需求与痛点。那么,如何通过有效手段,持续性抓痛点,促进转化?
简单地说,可以通过建立用户社群、用户反馈渠道、追踪评价等方式,通过获知用户反馈,进行内容、产品、APP功能等方面的调整,进行进一步的优化提升。
活动运营,增粉见效快
活动运营经营的好,可以为线上APP运营,增粉不少。并且,一场让用户收获满满的活动,则可以为APP带来无数的粉丝与关注量。
而想要举办一场成功的活动,需要运营者对产品和用户有较深的理解,在贴合产品的基础上,重点打入用户痛点问题,才能抓住有效的可转化的用户。
产品运营,运营的根本
毫不夸张的说,APP运营必须是围绕产品运营进行展开的。产品不得用户心,那么APP运营得再好,也无法提升转化量,无法真正打开销售渠道。总体来说,产品运营要以用户体验为主,并且运营者对产品必须有清晰的定位认知。
数据运营,精准营销为王道首选
互联网时代,如果没有数据分析保驾护航,上一刻,流量可能冲到飞起,下一刻,用户就跑光也有很大可能。说了这么说,无非是告诉你,没有数据的运营,纯粹是瞎猫碰上死耗子,是瞎搞。
而基于APP用户群体数据,你可以了解到用户的性别、年龄、地域、手机型号等信息,甚至在此基础上可以描绘出用户画像,进而分析消费行为等,可以让你了解用户最喜欢在什么版块活跃,在哪个渠道的转化率更高,在支付过程中,哪个环节有卡顿?通过查看用户使用APP的活跃量、留存率等等,可以分析出用户是为什么离开你的APP,进而进行APP的优化、产品调整等。
漫漫运营路,力谱云陪您一路成长
想要做好线上APP运营,并非是一朝一夕的工作量。只要APP生命不息,运营工作也无法停息下来。目前,力谱云平台已向各大企业用户,提供了一站式的移动商业解决方案,从APP研发到APP运营,我们始终支持。
企业通过力谱云平台,可使用有效的营销功能(文章、拼团…),以及大数据分析能力,进一步精准化APP运营方针战略,也可以节省许多运营方面的人力成本与技术成本。让您的移动蓝海之行,更省钱、省心、省力,一直是力谱云服务企业用户的初衷。
期待,在漫漫APP运营长路之中,我们能与您一路同行,陪伴您一路成长。

继续阅读 »

众所周知,移动互联网的流量犹如聚宝盆。许多用户,好不容易完成了> 手机APP开发制作**,却苦无APP运营经验,束手无策?如果您完全没有这方面的经验,那么跟着力谱云小编,咱们来学学如何通过5大步骤,包圆您的APP运营新手路吧!
首先,我们要明白APP就是一个流量入口,而我们所有的APP运营相关工作,都是为了“拉新、促活、留存”而存在的,简单地说,圈住用户是最大的目标!
其次,在这个基础上,你必须清楚定位自己的用户群。
而为了更好地完成这个目标,我们可以从内容、用户、活动、产品、数据等5大环节入手。
内容运营,引流增信赖
内容运营,是做APP运营中最为基础的一部分。这是一个内容付费时代崛起的时刻,这也意味着当前的内容价值,对互联网用户群的吸引力。因此,内容做得好,就是一个很好的引流工具,可以有效增长APP用户量。
而做内容运营,最大的关键点在于,你的内容必须有价值,而非单纯的推销与介绍。其中,情感类、价值观的引入,更能提高用户的信赖度与友善度,并平台品牌影响力。在形式方面,也需要花样百出,除了文字与图片类,目前,直播与短视频,在内容输出上,更是引流不少。
用户运营,建立桥梁
用户运营,主要需要弄明白用户想从你的APP中得到什么?简单地说,就是弄明白用户需求与痛点。那么,如何通过有效手段,持续性抓痛点,促进转化?
简单地说,可以通过建立用户社群、用户反馈渠道、追踪评价等方式,通过获知用户反馈,进行内容、产品、APP功能等方面的调整,进行进一步的优化提升。
活动运营,增粉见效快
活动运营经营的好,可以为线上APP运营,增粉不少。并且,一场让用户收获满满的活动,则可以为APP带来无数的粉丝与关注量。
而想要举办一场成功的活动,需要运营者对产品和用户有较深的理解,在贴合产品的基础上,重点打入用户痛点问题,才能抓住有效的可转化的用户。
产品运营,运营的根本
毫不夸张的说,APP运营必须是围绕产品运营进行展开的。产品不得用户心,那么APP运营得再好,也无法提升转化量,无法真正打开销售渠道。总体来说,产品运营要以用户体验为主,并且运营者对产品必须有清晰的定位认知。
数据运营,精准营销为王道首选
互联网时代,如果没有数据分析保驾护航,上一刻,流量可能冲到飞起,下一刻,用户就跑光也有很大可能。说了这么说,无非是告诉你,没有数据的运营,纯粹是瞎猫碰上死耗子,是瞎搞。
而基于APP用户群体数据,你可以了解到用户的性别、年龄、地域、手机型号等信息,甚至在此基础上可以描绘出用户画像,进而分析消费行为等,可以让你了解用户最喜欢在什么版块活跃,在哪个渠道的转化率更高,在支付过程中,哪个环节有卡顿?通过查看用户使用APP的活跃量、留存率等等,可以分析出用户是为什么离开你的APP,进而进行APP的优化、产品调整等。
漫漫运营路,力谱云陪您一路成长
想要做好线上APP运营,并非是一朝一夕的工作量。只要APP生命不息,运营工作也无法停息下来。目前,力谱云平台已向各大企业用户,提供了一站式的移动商业解决方案,从APP研发到APP运营,我们始终支持。
企业通过力谱云平台,可使用有效的营销功能(文章、拼团…),以及大数据分析能力,进一步精准化APP运营方针战略,也可以节省许多运营方面的人力成本与技术成本。让您的移动蓝海之行,更省钱、省心、省力,一直是力谱云服务企业用户的初衷。
期待,在漫漫APP运营长路之中,我们能与您一路同行,陪伴您一路成长。

收起阅读 »

uniapp与vue-i18n实现国际化多语言

i18n uniapp 国际化 多语言

踩了很多坑,终于捣鼓出来了。

main.js

import Vue from 'vue'  
import App from './App'  
import VueI18n from 'vue-i18n'  

Vue.use(VueI18n)  
Vue.config.productuinTip = false  

const i18n = new VueI18n({  
  locale: 'en-US',  
  messages: {  
    'en-US': {  
      index: {  
        invite: 'Invite',  
        game: 'Game'  
      }  
    },  
    'zh-CN': {  
      index: {  
        invite: '邀请',  
        game: '游戏'  
      }  
    }  
  }  
})  

Vue.prototype._i18n = i18n  
App.mpType = 'app'  

const app = new Vue({  
  i18n,  
  ...App  
})  
app.$mount()

uniapp 不支持在取值表达式中直接调方法,因此,$t方法不可用,所以通过计算属性的方式:

index.vue

<template>  
  <view class="uni-content">  
    <text>{{ i18n.invite }}</text>  
    <text>{{ i18n.game }}</text>  
  </view>  
</template>  

<script>  
export default {  
  computed: {  
    i18n () {  
      return this.$t('index')  
    }  
  }  
}  
</script>  

<style>  
</style>

更多国际化参考https://ask.dcloud.net.cn/article/35872

继续阅读 »

踩了很多坑,终于捣鼓出来了。

main.js

import Vue from 'vue'  
import App from './App'  
import VueI18n from 'vue-i18n'  

Vue.use(VueI18n)  
Vue.config.productuinTip = false  

const i18n = new VueI18n({  
  locale: 'en-US',  
  messages: {  
    'en-US': {  
      index: {  
        invite: 'Invite',  
        game: 'Game'  
      }  
    },  
    'zh-CN': {  
      index: {  
        invite: '邀请',  
        game: '游戏'  
      }  
    }  
  }  
})  

Vue.prototype._i18n = i18n  
App.mpType = 'app'  

const app = new Vue({  
  i18n,  
  ...App  
})  
app.$mount()

uniapp 不支持在取值表达式中直接调方法,因此,$t方法不可用,所以通过计算属性的方式:

index.vue

<template>  
  <view class="uni-content">  
    <text>{{ i18n.invite }}</text>  
    <text>{{ i18n.game }}</text>  
  </view>  
</template>  

<script>  
export default {  
  computed: {  
    i18n () {  
      return this.$t('index')  
    }  
  }  
}  
</script>  

<style>  
</style>

更多国际化参考https://ask.dcloud.net.cn/article/35872

收起阅读 »

为了在Mac下使用HBuilderX,终于把区分大小写的磁盘格式换成不区分的了。累死了。

bug待确认

HBuilderX 在区分大小写的格式下不能安装,今天累死累活,经过多次试验,终于无损地把APFS区分大小写的格式转换成不区分的了。终于可以美美地用上HBuilderX了。

顺便问一下,社区帐号在哪修改密码啊?设置里没找到。。。

HBuilderX 在区分大小写的格式下不能安装,今天累死累活,经过多次试验,终于无损地把APFS区分大小写的格式转换成不区分的了。终于可以美美地用上HBuilderX了。

顺便问一下,社区帐号在哪修改密码啊?设置里没找到。。。

android native判断是否有定位权限

Native.JS

/**  
 * 判断是否有定位权限  android在23之后有动态获取权限方法23之下需要抓异常去判断是否开启  
 */  
Utils.prototype.getLocationPermission = function () {  
  var main = plus.android.runtimeMainActivity();  
  var Build = plus.android.importClass("android.os.Build");  
  var Manifest = plus.android.importClass("android.Manifest");  
  var PackageManager = plus.android.importClass("android.content.pm.PackageManager");  
  //上面三个导入android的类  

  var Permission = Manifest.permission;  
  var VERSION = Build.VERSION;  
  var VERSION_CODES = Build.VERSION_CODES;  
  //Permission.ACCESS_FINE_LOCATION对应定位的权限。  

  var isCheck = Permission.ACCESS_FINE_LOCATION;  
  var pkName = main.getPackageName();  
  var packageManager = main.getPackageManager();  
  console.log(isCheck);  
  var GRANTED = '';  
  //android6.0以上可以动态判断是否开启权限 6.0对应的是android 23版本 VERSION_CODES.M  

  if (VERSION.SDK_INT >= VERSION_CODES.M) {  
    GRANTED = plus.android.invoke(main, 'checkSelfPermission', isCheck);  
    alert(GRANTED);  
    if (GRANTED == PackageManager.PERMISSION_DENIED) {  
      console.log('没开启定位权限');  
    } else {  
      console.log('启定位权限');  
    }  
  } else {  
    GRANTED = plus.android.invoke(packageManager, 'checkPermission', isCheck, pkName);  
    alert(GRANTED);  
    if (GRANTED == PackageManager.PERMISSION_DENIED) {  
      console.log('没开启定位权限');  
    } else {  
      console.log('启定位权限');  
    }  
  }  
}

android代码

继续阅读 »

/**  
 * 判断是否有定位权限  android在23之后有动态获取权限方法23之下需要抓异常去判断是否开启  
 */  
Utils.prototype.getLocationPermission = function () {  
  var main = plus.android.runtimeMainActivity();  
  var Build = plus.android.importClass("android.os.Build");  
  var Manifest = plus.android.importClass("android.Manifest");  
  var PackageManager = plus.android.importClass("android.content.pm.PackageManager");  
  //上面三个导入android的类  

  var Permission = Manifest.permission;  
  var VERSION = Build.VERSION;  
  var VERSION_CODES = Build.VERSION_CODES;  
  //Permission.ACCESS_FINE_LOCATION对应定位的权限。  

  var isCheck = Permission.ACCESS_FINE_LOCATION;  
  var pkName = main.getPackageName();  
  var packageManager = main.getPackageManager();  
  console.log(isCheck);  
  var GRANTED = '';  
  //android6.0以上可以动态判断是否开启权限 6.0对应的是android 23版本 VERSION_CODES.M  

  if (VERSION.SDK_INT >= VERSION_CODES.M) {  
    GRANTED = plus.android.invoke(main, 'checkSelfPermission', isCheck);  
    alert(GRANTED);  
    if (GRANTED == PackageManager.PERMISSION_DENIED) {  
      console.log('没开启定位权限');  
    } else {  
      console.log('启定位权限');  
    }  
  } else {  
    GRANTED = plus.android.invoke(packageManager, 'checkPermission', isCheck, pkName);  
    alert(GRANTED);  
    if (GRANTED == PackageManager.PERMISSION_DENIED) {  
      console.log('没开启定位权限');  
    } else {  
      console.log('启定位权限');  
    }  
  }  
}

android代码

收起阅读 »

怎么利用PHP读取Excel文件信息及内容

  PHPExcel是什么?PHPExcel 就是一个用来操作Office Excel 文档的PHP类库。在编程技术开发中,我们经常要从程序中读取Excel文件内容,不过很多初学者都不太会,那么下面来详细为大家分析解答一下吧。比如说一个普通的个人信息表,我们利用PHPExcel类库将Excel表格内的信息内容读取出来,完整代码如下:

<?php
$fileName = "1.xls";
if (!file_exists($fileName)) {
return "文件不存在!";
}
// 引入PHPExcel
require_once "./PHPExcel/IOFactory.php";
// 载入当前文件
$phpExcel = PHPExcel_IOFactory::load($fileName);

// 设置为默认表
$phpExcel->setActiveSheetIndex(0);
// 获取表格数量
$sheetCount = $phpExcel->getSheetCount();
// 获取行数
$row = $phpExcel->getActiveSheet()->getHighestRow();
// 获取列数
$column = $phpExcel->getActiveSheet()->getHighestColumn();
echo "表格数目为:$sheetCount" . "表格的行数:$row" . "列数:$column";

$data = [];
// 行数循环
for ($i = 1; $i <= $row; $i++) {
// 列数循环
for ($c = 'A'; $c <= $column; $c++) {
$data[] = $phpExcel->getActiveSheet()->getCell($c . $i)->getValue();
}
echo "<pre>";
print_r($data);
}

  在上述代码中,先if判断Excel表格是否存在,再用require_once引入PHPExcel类库中IOFactory.php这个类,然后使用PHPExcel类库的一个方法载入Excel文件,这里将载入的Excel文件赋值于$phpExcel变量。

  然后再将$phpExcel变量通过分别指定相应的方法来获取Excel表格的数目、行数、列数以及通过setActiveSheetIndex(0)方法设置这个表格为默认(0表示默认)。

  此时输出表格的数目、行数、列数的结果就已经显示出来了,我们就可以发现表格的信息已经被正确的获取到了。如果大家在尝试的过程中出现错误或者还有不理解的地方,可以留言咨询。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

继续阅读 »

  PHPExcel是什么?PHPExcel 就是一个用来操作Office Excel 文档的PHP类库。在编程技术开发中,我们经常要从程序中读取Excel文件内容,不过很多初学者都不太会,那么下面来详细为大家分析解答一下吧。比如说一个普通的个人信息表,我们利用PHPExcel类库将Excel表格内的信息内容读取出来,完整代码如下:

<?php
$fileName = "1.xls";
if (!file_exists($fileName)) {
return "文件不存在!";
}
// 引入PHPExcel
require_once "./PHPExcel/IOFactory.php";
// 载入当前文件
$phpExcel = PHPExcel_IOFactory::load($fileName);

// 设置为默认表
$phpExcel->setActiveSheetIndex(0);
// 获取表格数量
$sheetCount = $phpExcel->getSheetCount();
// 获取行数
$row = $phpExcel->getActiveSheet()->getHighestRow();
// 获取列数
$column = $phpExcel->getActiveSheet()->getHighestColumn();
echo "表格数目为:$sheetCount" . "表格的行数:$row" . "列数:$column";

$data = [];
// 行数循环
for ($i = 1; $i <= $row; $i++) {
// 列数循环
for ($c = 'A'; $c <= $column; $c++) {
$data[] = $phpExcel->getActiveSheet()->getCell($c . $i)->getValue();
}
echo "<pre>";
print_r($data);
}

  在上述代码中,先if判断Excel表格是否存在,再用require_once引入PHPExcel类库中IOFactory.php这个类,然后使用PHPExcel类库的一个方法载入Excel文件,这里将载入的Excel文件赋值于$phpExcel变量。

  然后再将$phpExcel变量通过分别指定相应的方法来获取Excel表格的数目、行数、列数以及通过setActiveSheetIndex(0)方法设置这个表格为默认(0表示默认)。

  此时输出表格的数目、行数、列数的结果就已经显示出来了,我们就可以发现表格的信息已经被正确的获取到了。如果大家在尝试的过程中出现错误或者还有不理解的地方,可以留言咨询。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

收起阅读 »

诚邀优秀前端加盟,一起打造uni-app框架

招聘

微信小程序火了
支付宝、百度、今日头条等厂家随之发布各自的小程序规范
加上之前的iOS、Android、H5平台
前端工程师即将淹没在多平台的适配工作中

拿什么拯救前端工程师?

那就是uni-app!

uni-app被定义为终极跨平台开发框架
真正实现“一套代码、多端发行”

想改变世界的你,还犹豫什么?
赶快投递简历,加入我们,一起完善uni-app!

任职资格:

  • 强烈的创业激情,优秀的团队协同能力
  • 3年以上HTML5/CSS3/JavaScript开发经验
  • 精通Vue.js框架,在实际项目中,有过Vue.js开发经验
  • 熟悉webpack/npm等辅助工具的使用
  • 有小程序开发经验者优先
  • 有uni-app开发经验者优先

坐标:北京海淀区皂君庙京果商厦
薪资:看聊的情况,对优秀的人绝不吝啬

其它福利:

  • 公司附近住房,每月2k住房补贴
  • 每日餐费实报实销,不限次数

有兴趣的同学,马上投递简历到 cuihongbao@dcloud.io

另,iOS、Android、QT工程师也在扩招中。
欢迎各位投简历或邀请朋友前来尝试。

继续阅读 »

微信小程序火了
支付宝、百度、今日头条等厂家随之发布各自的小程序规范
加上之前的iOS、Android、H5平台
前端工程师即将淹没在多平台的适配工作中

拿什么拯救前端工程师?

那就是uni-app!

uni-app被定义为终极跨平台开发框架
真正实现“一套代码、多端发行”

想改变世界的你,还犹豫什么?
赶快投递简历,加入我们,一起完善uni-app!

任职资格:

  • 强烈的创业激情,优秀的团队协同能力
  • 3年以上HTML5/CSS3/JavaScript开发经验
  • 精通Vue.js框架,在实际项目中,有过Vue.js开发经验
  • 熟悉webpack/npm等辅助工具的使用
  • 有小程序开发经验者优先
  • 有uni-app开发经验者优先

坐标:北京海淀区皂君庙京果商厦
薪资:看聊的情况,对优秀的人绝不吝啬

其它福利:

  • 公司附近住房,每月2k住房补贴
  • 每日餐费实报实销,不限次数

有兴趣的同学,马上投递简历到 cuihongbao@dcloud.io

另,iOS、Android、QT工程师也在扩招中。
欢迎各位投简历或邀请朋友前来尝试。

收起阅读 »

七牛云上传视频如何有效做到节省空间

  在上传视频的时候,我们通常会保存到第三方【七牛云】平台。不过大多数程序员在系统后台上传视频后,一般都是保存到了本地,如果视频非常多或者视频容量特别大的情况下,那么我们的服务器迟早有一天会满,为了节省空间,下面教大家再上传视频时,如何以有效的节省服务器空间,一般情况下会把这些文件存到第三方,也就是需要我们下载qiniusdk,把qiniusdk放如Vendor目录下。

  这里我们以课程视频为例子,实现的hmtl源代码如下:

<tr>

    <td class="text"><span class="bi_tian"> </span>课程视频:</td>  

    <td class="input">  

           <input type="file" placeholder="上传视频" style="margin-left:10px;" name="file">  

    </td>  

</tr>  

<tr>  

    <td class="text"></td>  

    <td class="submit">  

    <input type="submit" value="下一步" class="layui-btn" onclick="return Smit($(this),'myform')" /></td>  

</tr>

  1. php代码

public function doaddvideo(){

$model=M("class_video");

$id=I("id");

$data['class_id']=$id;

$data['title']=I("title");

$data['minute']=I("minute");

$data['jie']=I("jie");

if(!empty($_FILES['file']['name'])){  

    import('ORG.Net.UploadFile');  

    $upload = new UploadFile();// 实例化上传类  

    $upload->maxSize  = 9999999;// 设置附件上传大小  

    $upload->allowExts  = array("vob","ifo","mpg","mpeg","dat","mp4","3gp","mov","rm","ram","rmvb","wmv","asf","avi","asx");// 设置附件上传类型 如果是MP3的话改为mp3 就ok  

    $upload->savePath =  './Public/Uploads/video/';// 设置附件上传目录(先把文件上传到本地服务器上)  

    //$upload->saveName = I('uid').'_'.time();// 设置附件上传目录  

    if(!$upload->upload()) {// 上传错误提示错误信息  

    $this->error($upload->getErrorMsg());  

    }else{// 上传成功 获取上传文件信息  

      $info =  $upload->getUploadFileInfo();  

    }  

    require_once'./ThinkPHP/Extend/Vendor/qiniusdk/autoload.php';  

     $accessKey = '';    

    $secretKey = '';    

    $bucket = '';   //这个是你上传的空间  

    $savepath = "";//这是你七牛的路径  

    $auth = new Auth($accessKey, $secretKey);  

     $mediaid = time().uniqid();  

    $savekey = \Qiniu\base64_urlSafeEncode('caifen:'.$mediaid.'.mp4');  

    $fops = $fops.'|saveas/'.$savekey;  

    $policy = array(  

        'persistentOps' => $fops,  

    );  

     $uptoken = $auth->uploadToken($bucket, null, 3600, $policy);  

      $filePath = './Public/Uploads/video/'.$info[0]['savename'];  

    $key = $mediaid.'.mp4';  

    $uploadMgr = new UploadManager();  

    list($ret, $err) = $uploadMgr->putFile($uptoken, $key, $filePath);  

    if ($err !== null) {  

        $dataname["info"]="error";  

    } else {  

      $savename=$ret['key'];  

      $file = $savepath.$savename;  

      $dataname["info"]=$file;  

    }  

  unlink($filePath);//上传成功后删除本地服务器上的文件  

  // echo $file;exit;  

    $data['video']=$file;  

    if($model->add($data)){  

      success("成功",U("Class/goodslist"));  

    }else{  

      error("失败");  

    }  

}else{

  error("请上传视频");exit;  

}

}

  好了,到这里就分享完成了,那么现在大家都可以去试一下了,如果还是存在不理解的地方,可以留言咨询我们,或者有其他不同的解决方法,也可以留言分享,我们共同学习进步。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处。

继续阅读 »

  在上传视频的时候,我们通常会保存到第三方【七牛云】平台。不过大多数程序员在系统后台上传视频后,一般都是保存到了本地,如果视频非常多或者视频容量特别大的情况下,那么我们的服务器迟早有一天会满,为了节省空间,下面教大家再上传视频时,如何以有效的节省服务器空间,一般情况下会把这些文件存到第三方,也就是需要我们下载qiniusdk,把qiniusdk放如Vendor目录下。

  这里我们以课程视频为例子,实现的hmtl源代码如下:

<tr>

    <td class="text"><span class="bi_tian"> </span>课程视频:</td>  

    <td class="input">  

           <input type="file" placeholder="上传视频" style="margin-left:10px;" name="file">  

    </td>  

</tr>  

<tr>  

    <td class="text"></td>  

    <td class="submit">  

    <input type="submit" value="下一步" class="layui-btn" onclick="return Smit($(this),'myform')" /></td>  

</tr>

  1. php代码

public function doaddvideo(){

$model=M("class_video");

$id=I("id");

$data['class_id']=$id;

$data['title']=I("title");

$data['minute']=I("minute");

$data['jie']=I("jie");

if(!empty($_FILES['file']['name'])){  

    import('ORG.Net.UploadFile');  

    $upload = new UploadFile();// 实例化上传类  

    $upload->maxSize  = 9999999;// 设置附件上传大小  

    $upload->allowExts  = array("vob","ifo","mpg","mpeg","dat","mp4","3gp","mov","rm","ram","rmvb","wmv","asf","avi","asx");// 设置附件上传类型 如果是MP3的话改为mp3 就ok  

    $upload->savePath =  './Public/Uploads/video/';// 设置附件上传目录(先把文件上传到本地服务器上)  

    //$upload->saveName = I('uid').'_'.time();// 设置附件上传目录  

    if(!$upload->upload()) {// 上传错误提示错误信息  

    $this->error($upload->getErrorMsg());  

    }else{// 上传成功 获取上传文件信息  

      $info =  $upload->getUploadFileInfo();  

    }  

    require_once'./ThinkPHP/Extend/Vendor/qiniusdk/autoload.php';  

     $accessKey = '';    

    $secretKey = '';    

    $bucket = '';   //这个是你上传的空间  

    $savepath = "";//这是你七牛的路径  

    $auth = new Auth($accessKey, $secretKey);  

     $mediaid = time().uniqid();  

    $savekey = \Qiniu\base64_urlSafeEncode('caifen:'.$mediaid.'.mp4');  

    $fops = $fops.'|saveas/'.$savekey;  

    $policy = array(  

        'persistentOps' => $fops,  

    );  

     $uptoken = $auth->uploadToken($bucket, null, 3600, $policy);  

      $filePath = './Public/Uploads/video/'.$info[0]['savename'];  

    $key = $mediaid.'.mp4';  

    $uploadMgr = new UploadManager();  

    list($ret, $err) = $uploadMgr->putFile($uptoken, $key, $filePath);  

    if ($err !== null) {  

        $dataname["info"]="error";  

    } else {  

      $savename=$ret['key'];  

      $file = $savepath.$savename;  

      $dataname["info"]=$file;  

    }  

  unlink($filePath);//上传成功后删除本地服务器上的文件  

  // echo $file;exit;  

    $data['video']=$file;  

    if($model->add($data)){  

      success("成功",U("Class/goodslist"));  

    }else{  

      error("失败");  

    }  

}else{

  error("请上传视频");exit;  

}

}

  好了,到这里就分享完成了,那么现在大家都可以去试一下了,如果还是存在不理解的地方,可以留言咨询我们,或者有其他不同的解决方法,也可以留言分享,我们共同学习进步。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处。

收起阅读 »

uni APP自动更新并安装

data:function(){  
            return{  
                version:1  
            }  
        },  
onLoad: function () {     
            uni.getSystemInfo({  
                success:(res) => {  
                    console.log(res.platform);  
                    //检测当前平台,如果是安卓则启动安卓更新  
                    if(res.platform=="android"){  
                        this.AndroidCheckUpdate();  
                    }  
                }  
            })  
        },  
        methods: {  
            AndroidCheckUpdate:function(){  
                var _this=this;  
                uni.request({  
                    url: 'http://xxxx.com/version.txt',  
                    method: 'GET',  
                    data: {},  
                    success: res => {  
                        if(res.data>this.version){  
                            if(plus.networkinfo.getCurrentType()!=3){  
                                uni.showToast({  
                                    title: '有新的版本发布,检测到您目前非Wifi连接,为节约您的流量,程序已停止自动更新,将在您连接WIFI之后重新检测更新。',  
                                    mask: false,  
                                    duration: 5000,  
                                    icon:"none"  
                                });  
                                return;  
                            }  
                            uni.showToast({  
                                title: '有新的版本发布,检测到您目前为Wifi连接,程序已启动自动更新。新版本下载完成后将自动弹出安装程序。',  
                                mask: false,  
                                duration: 5000,  
                                icon:"none"  
                            });  
                            var dtask = plus.downloader.createDownload( "http://xxxx.com/app.apk", {}, function ( d, status ) {  
                                    // 下载完成  
                                    if ( status == 200 ) {   
                                        plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename),{},{},function(error){  
                                            uni.showToast({  
                                                title: '安装失败',  
                                                mask: false,  
                                                duration: 1500  
                                            });  
                                        })  
                                    } else {  
                                         uni.showToast({  
                                            title: '更新失败',  
                                            mask: false,  
                                            duration: 1500  
                                         });  
                                    }    
                                });  
                            dtask.start();   
                        }  
                    },  
                    fail: () => {},  
                    complete: () => {}  
                });  
            },  
        }
继续阅读 »
data:function(){  
            return{  
                version:1  
            }  
        },  
onLoad: function () {     
            uni.getSystemInfo({  
                success:(res) => {  
                    console.log(res.platform);  
                    //检测当前平台,如果是安卓则启动安卓更新  
                    if(res.platform=="android"){  
                        this.AndroidCheckUpdate();  
                    }  
                }  
            })  
        },  
        methods: {  
            AndroidCheckUpdate:function(){  
                var _this=this;  
                uni.request({  
                    url: 'http://xxxx.com/version.txt',  
                    method: 'GET',  
                    data: {},  
                    success: res => {  
                        if(res.data>this.version){  
                            if(plus.networkinfo.getCurrentType()!=3){  
                                uni.showToast({  
                                    title: '有新的版本发布,检测到您目前非Wifi连接,为节约您的流量,程序已停止自动更新,将在您连接WIFI之后重新检测更新。',  
                                    mask: false,  
                                    duration: 5000,  
                                    icon:"none"  
                                });  
                                return;  
                            }  
                            uni.showToast({  
                                title: '有新的版本发布,检测到您目前为Wifi连接,程序已启动自动更新。新版本下载完成后将自动弹出安装程序。',  
                                mask: false,  
                                duration: 5000,  
                                icon:"none"  
                            });  
                            var dtask = plus.downloader.createDownload( "http://xxxx.com/app.apk", {}, function ( d, status ) {  
                                    // 下载完成  
                                    if ( status == 200 ) {   
                                        plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename),{},{},function(error){  
                                            uni.showToast({  
                                                title: '安装失败',  
                                                mask: false,  
                                                duration: 1500  
                                            });  
                                        })  
                                    } else {  
                                         uni.showToast({  
                                            title: '更新失败',  
                                            mask: false,  
                                            duration: 1500  
                                         });  
                                    }    
                                });  
                            dtask.start();   
                        }  
                    },  
                    fail: () => {},  
                    complete: () => {}  
                });  
            },  
        }
收起阅读 »

一周 D 报(2018-10-15)

周报

HBuilderX 自公测起,历经 50 个版本的迭代,终于迎来了 1.0 版本的正式发布。详见:http://ask.dcloud.net.cn/article/13507

uni-app

  • 内置地图更新为原生的高德地图后,层级和覆盖物的问题。:可以暂时使用问题中回复的方案,后面会支持 cover-view 来更方便地处理。
  • uni-app 不支持右滑关闭页面么? iOS 平台是支持的不需要额外配置,Android 平台不支持。
  • uni-app 有没有小程序中的 live-pusher 类似组件? 相关的组件等内容,还未完善。
  • uni-app 如何获取应用的 version? App 平台下需要调用 plus.runtime.version 来获取,参考 hello uni-app 的 App.vue。小程序的升级是小程序云服务统一管理的,不存在应用版本号的概念。
  • uni-app 中可以使用 Vant 的小程序库么? uni-app 中支持使用小程序的组件,详见文档:小程序组件支持
  • uni.getStorageInfo 的支持:App 平台还未支持此 API。
  • nvue 文件里import,无法使用uni-app内置文件:其实这个问题的重点在于如何实现 nvue 和 vue 的数据共享。因为 uni-app 中 vue 和 nvue 是两个独立的环境,并不能完全通用。只有部分 uni 的 API 是可以通用的,因此需要使用 uni.storage 相关的 API 来实现数据的共享。
  • uni-app请问如何隐藏滚动条,能否使用5+api:可以在 app-plus 中配置,详见问题回复。

其它问题

开源与分享

更多分享,请前往 精华区 查看。

欢迎更多的同学参与进来,分享自己的经验心得。

结束

本期周报就到这里,感谢大家的阅读。新的一周,祝大家工作顺利。

继续阅读 »

HBuilderX 自公测起,历经 50 个版本的迭代,终于迎来了 1.0 版本的正式发布。详见:http://ask.dcloud.net.cn/article/13507

uni-app

  • 内置地图更新为原生的高德地图后,层级和覆盖物的问题。:可以暂时使用问题中回复的方案,后面会支持 cover-view 来更方便地处理。
  • uni-app 不支持右滑关闭页面么? iOS 平台是支持的不需要额外配置,Android 平台不支持。
  • uni-app 有没有小程序中的 live-pusher 类似组件? 相关的组件等内容,还未完善。
  • uni-app 如何获取应用的 version? App 平台下需要调用 plus.runtime.version 来获取,参考 hello uni-app 的 App.vue。小程序的升级是小程序云服务统一管理的,不存在应用版本号的概念。
  • uni-app 中可以使用 Vant 的小程序库么? uni-app 中支持使用小程序的组件,详见文档:小程序组件支持
  • uni.getStorageInfo 的支持:App 平台还未支持此 API。
  • nvue 文件里import,无法使用uni-app内置文件:其实这个问题的重点在于如何实现 nvue 和 vue 的数据共享。因为 uni-app 中 vue 和 nvue 是两个独立的环境,并不能完全通用。只有部分 uni 的 API 是可以通用的,因此需要使用 uni.storage 相关的 API 来实现数据的共享。
  • uni-app请问如何隐藏滚动条,能否使用5+api:可以在 app-plus 中配置,详见问题回复。

其它问题

开源与分享

更多分享,请前往 精华区 查看。

欢迎更多的同学参与进来,分享自己的经验心得。

结束

本期周报就到这里,感谢大家的阅读。新的一周,祝大家工作顺利。

收起阅读 »

这个uniapp的api和组件太像小程序了有没有

uni_app

这个api和组件太像小程序了有没有

不过还是比较喜欢的,没有更多额外学习成本

这个api和组件太像小程序了有没有

不过还是比较喜欢的,没有更多额外学习成本

2020承接外包,长期有效,uniapp、web、php、微信

PHP h5+ uniapp Vue 外包

经济不景气,全栈程序员接外包补贴房贷。
可接uniapp、网站,微信小程序、logo海报、等平面设计(有团队),付费解决问题。
不管有没有需求欢迎qq微信骚扰。

qq:50401716
微信

5+案例(资讯,淘宝客,即时聊天):
https://m3w.cn/aihanfu
https://m3w.cn/dsg

一些案例图片:

网站及设计案例请加qq微信查看~

继续阅读 »

经济不景气,全栈程序员接外包补贴房贷。
可接uniapp、网站,微信小程序、logo海报、等平面设计(有团队),付费解决问题。
不管有没有需求欢迎qq微信骚扰。

qq:50401716
微信

5+案例(资讯,淘宝客,即时聊天):
https://m3w.cn/aihanfu
https://m3w.cn/dsg

一些案例图片:

网站及设计案例请加qq微信查看~

收起阅读 »

小程序开发费用,2018年的小程序开发费用

微信小程序 小程序

  现在常见的郑州小程序开发方式主要有以下三种,小程序开发费用通常是根据功能需求以及开发难度等因素决定,目前来说只有一个大致的价格区间,很多投资者在询问价格时,无法得到明确答复就是因为这些原因,而定制开发的小程序所需费用是三种开发方式中比较贵的。下面来详细的跟大家分析一下各种开发方式所对应的小程序开发区别吧。

  1、定制类小程序开发

  这类小程序所需的开发费用一般在一万以上,因为定制开发类的小程序可以满足企业自身的个性化需求的功能,从事这类定制类小程序开发公司通常会由产品经理、核心技术人员等团队成员和客户详细沟通需求,然后提供相应的报价和解决方案,定制类小程序在完成开发后,功能使用往往比较贴合客户需求。

  2、模板开发方式

  小程序开发公司一般要会根据不同的行业分类开发出一些固定的模板,一个模板同时可以卖给成千上万的客户,这种开发方式对于开发商来说利润很高,对用户而言所付出的成本也相对于低,但是这种开发方式弊端,就是无法修改模板,只是把小程序按年租售,同时也会存在部分功能无法实现又承载过多一些多余功能的情况,这类小程序的售后服务通常也不完善。

  3、开发各类常用模板的开发公司

  这类公司主要是开发一些常用的功能模板,与模板类不同的是,客户可以根据自己的需求来选择不同的功能进行组合,价格相对也会高一些,一般在几千到一万元以内,这类开发小程序虽然有一定的选择性,但功能并不能完全实现个性化定制。

  小程序开发需要多少费用?这是所有企业和个体商家关注的焦点,首先无论是哪一类型的小程序,开发费用都相对较低,但是不同类型的小程序根据用户的功能需求的不同,会导致开发费用有所差异,一般价格区间在几千到几万之间,小程序的开发费用是可以根据其开发方式推算出大概的预算方案,所以具体还是要跟开发公司协商才行。

本文由专业的郑州小程序开发(http://www.appsaa.com)燚轩科技整理发布,如需转载请注明出处。

继续阅读 »

  现在常见的郑州小程序开发方式主要有以下三种,小程序开发费用通常是根据功能需求以及开发难度等因素决定,目前来说只有一个大致的价格区间,很多投资者在询问价格时,无法得到明确答复就是因为这些原因,而定制开发的小程序所需费用是三种开发方式中比较贵的。下面来详细的跟大家分析一下各种开发方式所对应的小程序开发区别吧。

  1、定制类小程序开发

  这类小程序所需的开发费用一般在一万以上,因为定制开发类的小程序可以满足企业自身的个性化需求的功能,从事这类定制类小程序开发公司通常会由产品经理、核心技术人员等团队成员和客户详细沟通需求,然后提供相应的报价和解决方案,定制类小程序在完成开发后,功能使用往往比较贴合客户需求。

  2、模板开发方式

  小程序开发公司一般要会根据不同的行业分类开发出一些固定的模板,一个模板同时可以卖给成千上万的客户,这种开发方式对于开发商来说利润很高,对用户而言所付出的成本也相对于低,但是这种开发方式弊端,就是无法修改模板,只是把小程序按年租售,同时也会存在部分功能无法实现又承载过多一些多余功能的情况,这类小程序的售后服务通常也不完善。

  3、开发各类常用模板的开发公司

  这类公司主要是开发一些常用的功能模板,与模板类不同的是,客户可以根据自己的需求来选择不同的功能进行组合,价格相对也会高一些,一般在几千到一万元以内,这类开发小程序虽然有一定的选择性,但功能并不能完全实现个性化定制。

  小程序开发需要多少费用?这是所有企业和个体商家关注的焦点,首先无论是哪一类型的小程序,开发费用都相对较低,但是不同类型的小程序根据用户的功能需求的不同,会导致开发费用有所差异,一般价格区间在几千到几万之间,小程序的开发费用是可以根据其开发方式推算出大概的预算方案,所以具体还是要跟开发公司协商才行。

本文由专业的郑州小程序开发(http://www.appsaa.com)燚轩科技整理发布,如需转载请注明出处。

收起阅读 »