vue 上传图片函数封装 直接调用

更新一下内容,代码已更新。特定情况下出现了一个小bug,页面中一个input多次上传同一个文件,上传前需要先清空input的value,否则@change事件将不会触发

结构,样式可以自己修改
<input type="file" @change="addimg($event)">

在公用函数commonfn.js文件里面添加一个方法

let fileBaseurl = 'http://xxxxxxxxxxxx/upImages' //你的图片上传地址
import axios from 'axios';

export function uploadimg (event) { // 传参是$event
    let img1 = event.target.files[0];
    let type = img1.type;
    let size = img1.size;
    let typelist = 'image/jpeg, image/png, image/jpg'
    if (typelist.indexOf(type) === -1) {  
        alert('支持上传的图片格式不对')
        return false;  
    }
    if (size>5242880) {  
        alert('上传图片不能大于5m')
        return false;  
    }  
    let form = new FormData();
    form.append('file',img1);
    event.target.value = '' // 一个inputfile多次上传前清空
    return axios.post(fileBaseurl, form, {
        headers:{'Content-Type':'multipart/form-data'},
        withCredentials:true
    }).then(res => {
        let result = res.data
        return Promise.resolve(result)
    }).catch(res => {
        return Promise.reject(res.data)
    })
}

调用

//script 引入
import { uploadimg } from '@/xxxxxxx/commonfn.js' // 按自己的文件位置引入

// methods里面执行
addimg (el) {
  uploadimg(el).then(res => {
      console.log(res) //返回值
  }).catch(res => {
      alert('上传失败')
  })
},

返回结果展示,这个比较简单应该易懂。over

在这里插入图片描述

使用 Vue 结合微信云函数上传图片,可按以下步骤实现: ### 1. 初始化微信云开发环境 在项目中引入微信云开发 SDK,并初始化云环境。在 `main.js` 中添加如下代码: ```javascript import wxcloud from '@/utils/wxcloud' // 假设封装了微信云开发的工具类 // 初始化云环境 wxcloud.init({ env: 'your-env-id' // 替换为你的云环境 ID }) ``` ### 2. 创建云函数 在微信开发者工具中创建一个云函数,例如命名为 `uploadImage`。云函数代码如下: ```javascript // 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() exports.main = async (event, context) => { const fileStream = await cloud.uploadFile({ cloudPath: `images/${Date.now()}-${Math.floor(Math.random(0, 1) * 1000)}.png`, // 云存储路径 fileContent: Buffer.from(event.fileContent, 'base64'), // 文件内容 }) return fileStream.fileID } ``` ### 3. 在 Vue 组件中实现图片上传逻辑 以下是一个简单的 Vue 组件示例: ```vue <template> <div> <input type="file" @change="handleFileChange" /> <button @click="uploadImage">上传图片</button> </div> </template> <script> import wxcloud from '@/utils/wxcloud' // 引入微信云开发工具类 export default { data() { return { selectedFile: null } }, methods: { handleFileChange(event) { this.selectedFile = event.target.files[0] }, async uploadImage() { if (!this.selectedFile) { return } const reader = new FileReader() reader.readAsDataURL(this.selectedFile) reader.onload = async () => { const base64Data = reader.result.split(',')[1] try { const res = await wxcloud.callFunction({ name: 'uploadImage', data: { fileContent: base64Data } }) console.log('图片上传成功,fileID:', res.result) } catch (error) { console.error('图片上传失败:', error) } } } } } </script> ``` ### 代码解释 - **初始化云环境**:在 `main.js` 中初始化微信云开发环境,确保可以正常调用函数。 - **创建云函数**:在云函数中使用 `cloud.uploadFile` 方法将图片上传到云存储,并返回文件的 `fileID`。 - **Vue 组件**:在 Vue 组件中,通过 `input` 元素选择图片,使用 `FileReader` 将图片转换为 Base64 格式,然后调用函数上传图片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值