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


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 相关文章推荐
javascript 贪吃蛇实现代码
Nov 22 Javascript
Javascript call和apply区别及使用方法
Nov 14 Javascript
javascript自定义函数参数传递为字符串格式
Jul 29 Javascript
js实现的四级左侧网站分类菜单实例
May 06 Javascript
Three.js获取鼠标点击的三维坐标示例代码
Mar 24 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
Jul 28 Javascript
node中koa中间件机制详解
Aug 22 Javascript
react中实现搜索结果中关键词高亮显示
Jul 31 Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
May 02 Javascript
细述Javascript的加法运算符的具体使用
Oct 18 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
Oct 14 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
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
详解Vue-cli 创建的项目如何跨域请求
2017/05/18 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
2017/06/21 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
python实现的一个火车票转让信息采集器
2014/07/09 Python
在Python的循环体中使用else语句的方法
2015/03/30 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
numpy自动生成数组详解
2017/12/15 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
Python 实现try重新执行
2019/12/21 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
python 用struct模块解决黏包问题
2020/11/07 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
数据库什么时候应该被重组
2012/11/02 面试题
蔬菜基地的创业计划书
2014/01/06 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
运动会开幕词
2015/01/28 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
解决Redis启动警告问题
2022/02/24 Redis
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL