小程序云开发如何实现图片上传及发表文字


Posted in Javascript onMay 17, 2019

微信给了我们存储空间以及图片上传的功能,我们怎么可以轻易放过呢?

先看看界面:

小程序云开发如何实现图片上传及发表文字

二话不说, 先实现界面:

<!--pages/pulish/pulish.wxml-->
<view class='flexDownC'>
 <view class='flexDownC w100'> 
 <textarea class='input' bindinput='textInput' placeholder-style='margin-left:20rpx;' maxlength='500' placeholder='和大家一起分享你遇到的趣事,糗事吧' value='{{text}}' auto-focus auto-height></textarea>
 </view>

 <view class='btm flexSpaceBet w100 publishItem'>
 <image src='../../images/pic.png' class='pic' bindtap='doUpload'></image>
 <view class='pulishBtn' bindtap='pulish'> 发布</view>
 
 </view>
 <!-- wx:for='{{imgUrl}}' -->
 <view class='flexCenter w100' wx:if='{{imgUrl}}'>
 <!-- <view wx:for='{{imgUrl}}' class='{{imgUrl.length == 1? "imgUrlClass1": imgUrl.length == 2? "imgUrlClass2": imgUrl.length == 3? "imgUrlClass3": "imgUrlClass4"}}' > -->
  <image src='{{imgUrl}}' class='w100' mode="aspectFit" ></image>
 <!-- </view> -->
 
 </view>
 <!-- <image class='w100' src='cloud://qiupihu-d1e452.7169-qiupihu-d1e452/1451.gif'></image> -->

</view>

wxss:

/* pages/pulish/pulish.wxss */


.input{
 font-size: 28rpx;
 color: #666;
 width: 100%;
 min-height: 60rpx;
 height: auto;
 border-radius: 10rpx;
 padding: 20rpx;
}

.fl{
 display: flex;
 justify-content: flex-start;
}

.pic{
 width: 64rpx;
 height: 64rpx;
 margin-left: 20rpx;
}

.w100{
 width: 100%;
}

.publishItem{
 margin-top: 80rpx;
 height: 80rpx;
 border-top: 1px solid #ea9518;
 border-bottom: 1px solid #ea9518;
}

.pulishBtn{
 width: 100rpx;
 height: 50rpx;
 color: #fff;
 font-size: 28rpx;
 background: #ea9518;
 border-radius: 0.1;
 text-align: center;
 font-weight: bold;
 margin-right: 20rpx;
 line-height: 50rpx;
}

.h100{
 height: 100rpx;
}


.imgUrlClass2{
 width: 50%;
}

.imgUrlClass1{
 width: 100%;
}


.imgUrlClass3{
 width: 33%;
}

.imgUrlClass4{
 width: 24%;
}

接下来就是js的代码了:

我们要求发布的人必须是已登录状态,这个可以查看本地是否有username得知

// pages/pulish/pulish.js
var app = getApp()
const db = wx.cloud.database()
const _ = db.command;
Page({

 /**
 * 页面的初始数据
 */
 data: {
 text: '',
 imgUrl: '',
 count: 0
 },

 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {
 this.getCount()
 
 },
 onShow: function(){
 let userOpenId = wx.getStorageSync('openId')
 if (!userOpenId) {
  wx.showToast({
  title: '您还未登录,请先登录~',
  icon: 'none'
  })

  setTimeout(() => {
  wx.switchTab({
   url: '../me/me',
  })
  }, 1500)
 } else {
  console.log(userOpenId)
 }
 },
 getCount: function(){
 //已输入的字数
 var that = this
 db.collection('funnys').count({
  success: res => {
  that.setData({
   count: Number(res.total) + 1
  })
  }
 })

 },
 textInput: function(e){
 this.setData({
  text: e.detail.value
 })
 },
 pulish: function(){

 var data = {
  image: new Array(app.globalData.fileID), //将图片储存为数组类型
  content: this.data.text, //用户输入的文字
  comment: [],
  userId: wx.getStorageSync('userId'),
  username: wx.getStorageSync('username'), //用户名
  id: Number(this.data.count) +1, //是现在数据库的条数+1,微信小程序的不知道怎么设置自增的数字字段
  shareNum: 0,
  commentNum: 0,
  validStatus: 0,
  validTime: 0
 }
 //validStatus: 审核状态, 通过时候 +1, 反对时候-1
 //validTime: 审核次数, 最多5次,如果反对的人大于等于3,则不通过

 console.log(data)

 if (data.content){
  db.collection('funnys').add({
   data: data,
   success:res => {
   wx.showToast({
    title: '发布成功',
   })
   setTimeout(()=>{
    
    wx.switchTab({
    url: '../index/index',
    })
   }, 1000)
   },
   fail: e=>{
   wx.showToast({
    title: '发布错误',
   })
   console.log(e)
   }
  })
 }else{
  wx.showToast({
  title: '请填写文字',
  icon: 'none'
  })
 }

 },

 // 上传图片
 //上传的时候,我们可以获得一个fileId,这个id我们必须存起来,在别人查看的时候,image的src使用的就是fileId,然后用户必
 //须得知道上传的是哪张图片呀, 所以我们使用的是本地的图片路径来展示,即imagePath 
 doUpload: function () {
 // 选择图片
 var that = this;
 wx.chooseImage({
  count: 1,
  sizeType: ['compressed'],
  sourceType: ['album', 'camera'],
  success: function (res) {

  wx.showLoading({
   title: '上传中',
  })

  const filePath = res.tempFilePaths[0]
  that.setData({
   imgUrl: filePath
  })
  // 上传图片
  const cloudPath = that.data.count + filePath.match(/\.[^.]+?$/)[0]
  //改写: 数组 多图片
  // const filePath = res.tempFilePaths, cloudPath = [];
  // filePath.forEach((item, i)=>{
  // cloudPath.push(that.data.count + '_' + i + filePath[i].match(/\.[^.]+?$/)[0])
  // })
   
  console.log(cloudPath)


  // filePath.forEach((item, i) => {
   wx.cloud.uploadFile({
   cloudPath,
   filePath,
   success: res => {
    console.log('[上传文件] 成功:', cloudPath, res)

    app.globalData.fileID = res.fileID
    app.globalData.cloudPath = cloudPath
    app.globalData.imagePath = filePath
    
   },
   fail: e => {
    console.error('[上传文件] 失败:', e)
    wx.showToast({
    icon: 'none',
    title: '上传失败',
    })
   },
   complete: () => {
    wx.hideLoading()
   }
   })
  // })

  },
  fail: e => {
  console.error(e)
  }
 })
 },
 /**
 * 用户点击右上角分享
 */
 onShareAppMessage: function () {

 }
})

到此为止,功能就实现了。

那么,到此为止,点赞功能就基本完成了, 请看详细代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
解决iframe的frameborder在chrome/ff/ie下的差异
Aug 12 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
Nov 12 Javascript
jquery 取子节点及当前节点属性值
Jul 25 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
Apr 06 Javascript
javascript格式化json显示实例分析
Apr 21 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
Sep 23 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
Nov 04 Javascript
深入理解js中的加载事件
Feb 08 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
May 09 Javascript
vue form check 表单验证的实现代码
Dec 09 Javascript
优雅地使用loading(推荐)
Apr 20 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
Jun 26 Javascript
tsconfig.json配置详解
May 17 #Javascript
小程序云函数调用API接口的方法
May 17 #Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
May 17 #Javascript
微信小程序云开发之使用云函数
May 17 #Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 #jQuery
微信小程序云开发之使用云数据库
May 17 #Javascript
微信小程序云开发之使用云存储
May 17 #Javascript
You might like
PHP脚本数据库功能详解(下)
2006/10/09 PHP
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
python列表使用实现名字管理系统
2019/01/30 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
自我评价格式
2014/01/06 职场文书
保密工作实施方案
2014/02/24 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
任命书标准格式
2015/03/02 职场文书
社区党支部承诺书
2015/04/29 职场文书
给朋友的赠语
2015/06/23 职场文书
教师节感想
2015/08/11 职场文书