微信小程序原生上传图片和预览+云函数上传

这篇具有很好参考价值的文章主要介绍了微信小程序原生上传图片和预览+云函数上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.前台页面

1.1wxml问阿金

<!-- 说明一个上传页面的按钮 -->
<button type="primary" bindtap="uploadPage">上传页面展示</button>
<!-- 声明一个上传服务器的按钮 -->
<button type="warn" bindtap="uploadSever">上传服务器</button>
<!-- 实现点击图片有个预览效果  -->
<view wx:for="{{imgSrcArr}}" bindtap="uploadPreview" wx:key="index" class="img">
<!-- 动态展示图片 -->
<image class="pic" src="{{item.tempFilePath}}" />
<!-- 删除图片 -->
<!-- catchtap并阻止其冒泡到父元素,因为父元素有updatePreview时间 -->
<view class="delete-button" catchtap="deleteImage" data-index="{{index}}">删除</view>
</view>

展示

 原生图片上传,微信小程序,微信小程序,小程序

 

1.2js文件

1.2.1 uploadPage

说明:调用方法就是属性值是一个函数,因此要注意this问题。要将this指向原来的位置。

  uploadPage() {
    // 改变this,特别是调用方法
    // 说明:调用方法就是属性值是一个函数,因此要注意this问题
    let that = this
    wx.chooseMedia({
      count: 9, //表示可以选择的最大图片数量限制,这里设置为 9 表示最多可以选择 9 张图片
      mediaType: ['image'], //表示媒体文件的类型,在这里设置为 ['image'] 表示只能选择图片类型的文件
      sourceType: ['album', 'camera'], //表示可以选择的媒体来源,这里设置为 ['album', 'camera'] 表示可以从相册或相机进行选择
      camera: 'back', //表示前后摄像头的选择,默认为后置摄像头。当然设置的就是后置摄像头
      success(res) {
        that.setData({
          // 可以上传多张图,通过es6解构数组的方式
          imgSrcArr: [...that.data.imgSrcArr, ...res.tempFiles]
        })
      }
    })
  },

展示 

说明:点击上传页面展示,在这里我点击了两次 !

 原生图片上传,微信小程序,微信小程序,小程序

1.2.2uploadPreview

说明:需要学习Array.map方法的使用。

  // 图片预览
  uploadPreview() {
    let that = this
    wx.previewImage({
      current: "", // 当前显示图片的http链接
      // 说明map方法就是遍历数字然后生成一个新的数组,item就是遍历的数组里面的对象,返回tempFilePath
      urls: that.data.imgSrcArr.map(item => item.tempFilePath)
       // 需要预览的图片http链接列表,[url,url]这样的
    })
  },

 展示

说明:点击图片后全屏显示 

原生图片上传,微信小程序,微信小程序,小程序

1.2.3deleteImage按钮

说明:点击删除按钮删除图片

  // 删除图片
  deleteImage(event) {
    // 解构拿到数组的索引
    const {
      index
    } = event.currentTarget.dataset;
    // 拿到图片数组
    const {
      imgSrcArr
    } = this.data;
    // 删除当前索引,删除长度为1
    imgSrcArr.splice(index, 1);

    this.setData({
      imgSrcArr: imgSrcArr
    });
  },

sass文件

// 图片
.img {
  position: relative;

  .pic {}
// 图片里面的按钮
  .delete-button {
    position: absolute;
    top: 0;
    right: 0;
    padding: 4px;
    font-size: 15px;
    color: #ffffff;
    background-color: #BDA066;
    border-radius: 5px;
  }
}

  原生图片上传,微信小程序,微信小程序,小程序

说明:如果不写catchtap="deleteImage",因为事件冒泡到了父元素,触发了uploadPreview事件。

原生图片上传,微信小程序,微信小程序,小程序

1.2.4 上传图片到服务器

说明:使用原生的上传图片目前我只能一张一张上传,因此我是采用了map方法使用,遍历数组每个值,进行上传。

  uploadSever() {
    let that = this
//拿到图片的url地址,map使用
    that.data.imgSrcArr.map(item => {
      wx.uploadFile({
        url: '***********', //服务器地址
      //图片的地址
        filePath: item.tempFilePath,
        // 前台必须传递image,后台规定的字段。
        name: 'image',
        success(res) {
          console.log(res);
        }
      })
    })
  },

 展示,图片存在云数据库的位置

 2.后端逻辑

说明:为了自己能够看,不再阐释说明。文章来源地址https://www.toymoban.com/news/detail-735406.html

import cloud from '@lafjs/cloud'
import { S3, PutObjectCommand } from "@aws-sdk/client-s3";
import fs from 'fs'

const s3 = new S3({
  endpoint: cloud.env.OSS_EXTERNAL_ENDPOINT,
  region: cloud.env.OSS_REGION,
  credentials: {
    accessKeyId: cloud.env.OSS_ACCESS_KEY,
    secretAccessKey: cloud.env.OSS_ACCESS_SECRET,
  },
  forcePathStyle: true,
});
// 正文开始,这才是内容
export async function main(ctx: FunctionContext) {

  const image = ctx.files[0]

  // 判断前台上传的图片是否包含 images 字段
  if (image.fieldname !== "image") {
    // 如果不存在 images 字段,则返回错误信息
    return {
      statusCode: 400,
      body: JSON.stringify({
        error: 'Missing images field in the request.'
      })
    };
  }
  // 将图片的临时位置读取了
  const fileContent = fs.readFileSync(image.path); // 能够上传成功,展示图片是花的

  const bucket = "”************************"; // 这里改成你要上传的云储存名称

  // 文件的路径,存储位置就是images文件夹
  const path = "/images/" + image.filename

  const command = new PutObjectCommand({
    // 储存桶的位置
    Bucket: bucket,
    // 文件的路径
    Key: path,
    Body: fileContent,
    ContentType: image.mimetype,
  });

  let res
  try {
    res = await s3.send(command)
    // console.log("文件上传成功:", res);
  } catch (error) {
    return error
  }
  let { $metadata: { httpStatusCode } } = res
  let { filename } = ctx.files[0]
  let fileObject = { httpStatusCode, filename }
  return fileObject
}

到了这里,关于微信小程序原生上传图片和预览+云函数上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序-图片预览图

    有时候图片列表图片过小看不清图片内容,这时我们一般就希望点击图片可以放大显示进行预览,那么,接下来我们就调用微信原生API的的浏览图片程序进行对图片预览的实现。 通过微信原生API实现单张图片的浏览 wxml代码 添加对应js的点击事件,调用预览图片的API,实现图

    2024年02月08日
    浏览(63)
  • 微信小程序点击图片放大预览,新页面中全屏预览图片

    第一步:在wxml中定义image组件,并设置绑定事件。 第二步:在js中设置需要预览图片的URL数组, 切记一定要是数组 ,即使一张图也要是数组,不能直接字符串赋值。 2.1 data数据设置 2.2 绑定事件函数编制 3.wx.previewImage组件官方调用指南 4、效果预览

    2024年02月11日
    浏览(67)
  • 微信小程序(二)微信小程序选择本地图片显示并预览(实现左右滑动)

    在微信小程序里面实现选择图片然后预览是一个非常普遍的功能,在我们上传图片文件的时候,都会选择本地的图片进行上传,在上传之前会查看一下自己上传的图片是否准确。所以要做到预览图片。 下面就实现一个简单的本地图片显示预览的功能~~ 1、创建页面 这里我直接

    2024年02月03日
    浏览(70)
  • 微信小程序wx.previewImage实现图片预览

    在微信小程序中, wx.previewImage 函数用于预览图片,可以将一组图片以轮播的方式展示给用户,并支持用户手势操作进行切换。 使用 wx.previewImage 函数需要传入一个参数对象,该对象包含以下属性: current : String,必填,当前显示图片的链接/路径。 urls : Array,必填,需要预览

    2024年02月06日
    浏览(60)
  • 微信小程序基于vant和springboot实现附件上传和预览

    图片上传和预览在移动端应用非常广泛和频繁,vant组件库van-uploader组件已经帮我们实现了大部分功能,但是在系统中频繁使用还是有点麻烦,我们根据自身的业务系统重新封装了一下简化我们的开发。后端使用springboot集成jcifs实现文件管理微服务。 附件上传 附件预览 组件介

    2024年02月09日
    浏览(54)
  • springboot+微信小程序实现文件上传下载(预览)pdf文件

    实现思路: 选择文件 wx.chooseMessageFile ,官方文档: https://developers.weixin.qq.com/miniprogram/d e v/api/media/image/wx.chooseMessageFile.html 上传文件 `wx,uploadFile` , 官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/wx.uploadFile.html 查看所有上传的pdf文件,显示在页面上 点击pdf文件

    2024年02月08日
    浏览(69)
  • 微信小程序接收二进制流文件(图片预览,文件打开)

     下面通过downloadOaFile接口获取到二进制流,即res.data 注意!!!直接用downloadOaFile获取的二进制流文件在写入时会导致文件损坏,必须在uni.request对象的属性中加上 如果不加,默认是 这一点非常重要,踩了好久的坑,而且这两点的区别在network的response中还看不出来,因为两者

    2024年02月16日
    浏览(54)
  • 微信小程序上传图片写法

    小程序上传图片需要用到小程序API中的wx.uploadFile()方法。以下是一个基本的示例代码: 在这个示例代码中,首先使用wx.chooseImage()方法让用户选择一张图片,然后通过wx.uploadFile()方法将选中的图片上传到指定的接口地址。在上传成功后,我们可以在success回调函数中获

    2024年02月11日
    浏览(74)
  • 微信小程序使用本地图片在真机预览不显示的问题解决

    开发工具上本地图片可以显示,但是在真机上预览的时候不能显示 通常我们代码路径是代码是这样写的 最后发现路径这样写在真机预览上无法显示 解决办法 路径需要相对于根目录来写 路径直接使用网络图片地址写 这样就可以解决真机预览图片不显示问题了。 如果路径没有

    2024年02月11日
    浏览(111)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包