最近一段时间在做小程序项目,第一期功也完工了。需要好好总结一下经验,把项目中遇到的问题好好总结一下,遇到的问题,踩过的坑。今天写一个小程序实现图片上传,预览,以及删除,图片base64位处理。下面就是展示的效果

1页面布局

  1. <view class='question-images'>
  2. <view class='images-wrap'>
  3. <block wx:for="{{imagesList}}" wx:key="id">
  4. <view class='images-list' wx:if="{{imagesList.length > 0}}" >
  5. <image class='images-item' src='{{item}}' bindtap="handleImagePreview" mode="aspectFill" data-index="{{index}}"></image>
  6. <view class='image-remover' bindtap="removeImage" data-index="{{index}}">X</view>
  7. </view>
  8. </block>
  9. <!-- 上传图片按钮 -->
  10. <view class='images-list images-btn' bindtap='chooseImage' wx:if="{{imagesList.length < 1}}">
  11. <image class='btn-item' src='/assets/images/camera.png'></image>
  12. <text class='add'>添加图片</text>
  13. </view>
  14. </view>
  15. </view>
  16. </view>

2.给上传图片绑定一个事件chooseImage,用于事件触发,在data中定义一个数组。imagesList用于图片存储,baseImg单独存base64位图片的

  1. chooseImage(e){
  2. const that = this;
  3. // let baseImg = that.data.baseImg;
  4. wx.chooseImage({
  5. sizeType: ['original', 'compressed'], //可选择原图或压缩后的图片
  6. sourceType: ['album', 'camera'], //可选择性开放访问相册、相机
  7. success: function(res) {
  8. //拿到图片地址
  9. const imagesList = that.data.imagesList.concat(res.tempFilePaths);
  10. that.data.imagesList = imagesList.length <= 1 ? imagesList : imagesList.slice(0, 1);
  11. //图片base64位
  12. wx.getFileSystemManager().readFile({
  13. filePath: res.tempFilePaths[0], //选择图片返回的相对路径
  14. encoding: 'base64', //编码格式
  15. success:(res) =>{
  16. let baseImg = 'data:image/png;base64,' + res.data
  17. that.data.baseImg = baseImg
  18. }
  19. })
  20. that.setData({
  21. imagesList
  22. })
  23. }
  24. })
  25. },

上面小程序自己提供api方法,哪里直接用,根据自己的需求进行修改

  1. that.data.imagesList = imagesList.length <= 1 ? imagesList : imagesList.slice(0, 1); 限制只上传一张图片,可以根据自己的需要进行修改

 图片处理base64位,直接调用小程序自带的wx.getFileSystemManager就可以

 3.图片实现预览功能,直接上代码,也是调用下程序官网api的

  1. handleImagePreview(e){
  2. //预览图片
  3. const idx = e.target.dataset.idx;
  4. const imagesList = this.data.imagesList;
  5.  
  6. wx.previewImage({
  7. current: imagesList[idx], //当前预览的图片
  8. urls: imagesList, //所有要预览的图片
  9. })
  10. },

4.图片删除功能

  1. removeImage(e){
  2. //删除单个图片
  3. let _this = this;
  4. let index = e.target.dataset.index;
  5. let images = _this.data.imagesList;
  6. images.splice(index, 1)
  7. _this.setData({
  8. imagesList: images
  9. })
  10. },

每天进去一点点,好好总结经验

小程序实现图片上传,预览以及图片base64位处理的更多相关文章

  1. 前端实现图片上传预览并转换base64

    前端实现文件的上传,就必须用到input标签,type属性为file. 在vue项目中通ref操作dom.input有一个属性accept,是必须要搭配type=file使用. multiple可以上 ...

  2. js实现图片上传预览功能,使用base64编码来实现

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  3. ASP.NET工作笔记之一:图片上传预览及无刷新上传

    转自:http://www.cnblogs.com/sibiyellow/archive/2012/04/27/jqueryformjs.html 最近项目里面涉及到无刷新上传图片的功能,其实也就是上 ...

  4. FileReader()读取文件、图片上传预览

    前言 FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据. 其中File对象可以是来自用户 ...

  5. 兼容好的JS图片上传预览代码

    转 : http://www.codefans.net/articles/1395.shtml 兼容好的JS图片上传预览代码 (谷歌,IE11) <html xmlns="http:/ ...

  6. Jquery图片上传预览效果

    uploadPreview.js jQuery.fn.extend({ uploadPreview: function (opts) { var _self = this, _this = $(thi ...

  7. [前端 4] 使用Js实现图片上传预览

    导读:今天做图片上传预览,刚开始的做法是,先将图片上传到Nginx,然后重新加载页面才能看到这个图片.在这个过程中,用户一直都看不到自己上传的文件是什么样子.Ps:我发现我真的有强迫症了,都告诉我说不 ...

  8. Javascript之图片上传预览

    使用Javascript之图片上传预览,我们无需上传到服务器中,兼容所有浏览器. 关键方法是使用微软库filter:progid:DXImageTransform.Microsoft.AlphaIma ...

  9. HTML5 图片上传预览

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...

  10. php 图片上传预览(转)

    网上找的图片上传预览: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

随机推荐

  1. background-blend-mode叠加代码

    <html> <head> <style> .container { background: url("p1.jpg"), url(" ...

  2. EPPlus导出两千万行记录到xlsx的c#代码

    private void button5_Click(object sender, EventArgs e) { Stopwatch watch = new Stopwatch(); Backgrou ...

  3. SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步

    原文:SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步 由于之前的需要,禁止了复制架构更改,以至在发布中添加一个字段,并不会同步到订阅中,而现在又在订阅中添加了一个同名 ...

  4. ARTS 1.7 - 1.11

    每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西! Algorithm: 学习算法 题目: https://leetcod ...

  5. C#如何使用PythonTuple类型

    示例代码: new PythonTuple(new[] { 1, 2, 3 }); PythonTuple myTuple = PythonOps.MakeTuple(new object[] { 1 ...

  6. Vm安装

      说明:都是默认安装,并不需要繁琐设置,所以没有文字说明

  7. UWP ObservableCollection<Evaluate>集合中ObservableCollection<PictureInfo>变更通知到xaml界面

    ObservableCollection<Evaluate> EvaluateList = new ObservableCollection<Evaluate>();//评论集 ...

  8. Screensiz.es站收集整理了移动端的相关尺寸。

    Screensiz.es站收集整理了移动端的相关尺寸. Screensiz.es 彩蛋爆料直击现场 Screensiz.es站收集整理了移动端的相关尺寸.

  9. 使用PyQt5编写一个简单的GUI程序(pyside 有 pyside-uic 把ui文件转成py文件,pyside-rcc 把qrc文件转成 py文件导入就行了)

    我做Python窗口界面编程时,经常使用PyQt进行设计.这里简单叙述一下使用PyQt5制作一个简单的图形界面的流程 PyQt的简介以及开发环境的搭建在此不多赘述. 1.       打开Qt Des ...

  10. cStor云存储、cProc云处理、cVideo云视频、cTrans云传输,云创个人网盘

    http://www.cstor.cn,微信公众号:cstor_cn.      云创大数据是国际上云计算产品线齐全的企业之一,针对爆炸式增长的大数据需求,研发了自主知识产权的cStor云存储.cPr ...