使用vue框架直接上传文件到七牛云的过程

前端(Vue)上传图片到七牛云与后端(Django)上传图片到七牛云 前端(Vue)上传图片到七牛云与后端(Django)上传图片到七牛云 文章目录前端(Vue)上传图片到七牛云与后端(Django)上传图片到七牛云Vue上传图片到七牛云Django上传图片到七牛云 在开发项目的时候,经常会用到上传图片的功能,如果把图片全都存放在项目路径下,会导致项目越来越臃肿,因此可以考虑把图片上传交给第三方处理,此处采用七牛云进行图片存储。 经过测试,通过七牛云获取图片确实比直接通过自己的服务器获取的速度要快得多,赶快去注册七牛云吧。 上传方式 上传图片的方式有两种: 1 .通过服务器: 阅读详情

前段时间刚好做到这个需求在这里记录一下希望能帮助到大家!
首先可以先看看七牛云的开发者中心:七牛云开发中心
我这里是使用vue3.x+ts框架开发的

按照文档所说我们需要先安装一下七牛云的SDK

npm install qiniu-js

然后在页面上引入:

const qiniu = require('qiniu-js')
// or
import * as qiniu from 'qiniu-js'

使用的是antd的上传组件:(我给封装起来了:UploadDragger)

<a-drawer width="60%" title="上传文件"  v-model:visible="ShowUpload">
    <UploadDragger :key="uploadTimers" @onchangUpload="onChangUploadDragger" />
     <div class="drawer_footer">
       <a-button :disabled="pageLoading" type="primary" @click="ConfiromUpload">确定</a-button>
       <a-button :disabled="pageLoading" @click="ShowUpload = false">取消</a-button>
     </div>
</a-drawer>

UploadDragger组件:

<template>
  <div class="UploadDragger">
    <a-upload-dragger
      v-model:fileList="fileList"
      name="file"
      :multiple="true"
      :before-upload="() => {return false}"  <!--加上这个上传不写action才不会报错并且能拿到file -->
      @change="handleChange"
    >
      <p class="ant-upload-drag-icon">
        <img src="@/assets/images/afferent.png" alt="传入" srcset="" />
      </p>
      <p class="ant-upload-text">将文件拖至此处,或点击上传</p>
      <p class="ant-upload-hint">
        仅支持 word/ecxcel/ppt /jpg png/mp4/mp3/rar/zip 格式
      </p>
    </a-upload-dragger>
  </div>
</template>

<script lang="ts">
import { defineComponent, getCurrentInstance, ref } from 'vue';
interface FileItem {
  lastModified: string|undefined;
  uid: string;
  name?: string;
  status?: string;
  response?: string;
  url?: string;
}

interface FileInfo {
  file: FileItem;
  fileList: FileItem[];
}
export default defineComponent({
  emits:['onchangUpload'],
   setup(props, { emit }) {
    //获取当前组件实例对象(类似this)
    const { proxy }: any = getCurrentInstance();
    const fileList = ref([]);
    /**
     * 上传触发获取上传文件数据事件
     * @info 上传的文件数据
     * */ 
    const handleChange = (info: FileInfo) => {
      // console.log(info)
      
      let find = false; // 校验字段
      for (let i = 0; i < info.fileList.length; i++) { // 校验数组对象中的lastModified是否存在重复数据
        let item = info.fileList[i]
        for (let j = i + 1; j < info.fileList.length; j++) {
          let ele = info.fileList[j]
          if (item.lastModified == ele.lastModified) { find = true; break;}
        }
        if (find) break;
      }
      // console.log(find) 
      if(find){ // 返回true存在重复数据,false不存在重复数据
        proxy.$message.error('请勿重复上传相同文件!!!')
      }
      
      // 去重数组中相同的对象数据
      let remObj = {};
      info.fileList = info.fileList.reduce((cur:any,next:any) => {remObj[next.lastModified] ? "" : remObj[next.lastModified] = true && cur.push(next);
      return cur;
      },[]); //设置cur默认类型为数组,并且初始值为空的数组

      remObj = {};
      fileList.value = info.fileList.reduce((cur:any,next:any) => {remObj[next.lastModified] ? "" : remObj[next.lastModified] = true && cur.push(next);
      return cur;
      },[]); //设置cur默认类型为数组,并且初始值为空的数组

      emit('onchangUpload', info)
    };
    return {
      handleChange,
      fileList,
    };
  },
})
</script>

回到主页面开始调事件:
computeMD5()方法的使用查看:文件上传md5计算

setup(){
	const state = reactive<any>({
		// 上传参数
	      ShowUpload:false,
	      FileObj:[], // 存储上传的文件
	      uploadTimers: new Date().getTime(),// 刷新避免存在缓存
	})
	/**
	  * 上传获取文件事件
	  * @res 上传的文件数据
	 * */ 
    const onChangUploadDragger = (res:any) =>{
      // console.log('父组件调用打印:')
      state.FileObj = computeMD5(res.fileList)
      // console.log(state.FileObj)
    };
	
	/**
    * 确认上传事件
    * @param ShowUpload 隐藏上传弹窗
    * */ 
    const ConfiromUpload = ()=>{
      if(state.FileObj.namelist.length == 0){
        proxy.$message.error('请先上传文件再进行确认!')
        return
      }
      state.ShowUpload = false // 关闭弹窗
      state.FileObj.namelist.forEach((item:any, index: any)=>{
        let size = state.FileObj.fileSizelist[index]
        let md5 = state.FileObj.md5list[index]
        let params = {
          fileName: item,
          fileSize: size,
          fileMd5: md5
        }
        let file = state.FileObj.Filelist[index] // 获取文件流
        SaveCommitUpload(params, file) // 写入提交文件上传请求事件;
      })
    };

    /**
     * 写入提交文件上传请求事件
     *@params 请求参数
     *@file 文件流数据
     * */ 
    const SaveCommitUpload = (params: any, file: any) =>{
      $http.getCommitUpload(params).then((res) => {  // 请求后端返回的七牛云token和其他参数
        	UploadFilesQiniuCloud(file, res.config); //上传文件到七牛云事件
        }
        
      }).catch((err) => {})
    };

    /**
     * 上传文件到七牛云事件
     *@file 文件流数据
     *@res 回调返回的文件上传数据
     *@Callback 请求成功后请求的文件上传结果事件
     * */ 
    const UploadFilesQiniuCloud = (file:any, res:any) =>{
      // console.log(file)
      // console.log(res)
      // return
      const key = res.key // 上传文件名
      const token = res.tempToken // 七牛云token
      const observer = {
        next: (response: any) => {
          console.log('上传进度'+Math.floor(response.total.percent)+'%')
          // console.log(response)
        },
        error: (err: any) => {
          // 失败
          proxy.$message.error('上传失败:' + err.message)
          console.log(err)
        },
        complete: (response:any) => {
          // 成功回调
          console.log(response)
        }
      }
      const putExtra: Object = {
        fname: file.name,   //上传文件名称
        params: {},
        mimeType: file.type,  // 文件类型
        // mimeType: ['image/png', 'image/jpeg', 'image/gif']
      }
      const config = {
        useCdnDomain: true,
        region: qiniu.region.z2, // 所在地域 这个可以问问后端域名所属区域(我这个是华南)
        chunkSize: res.config.chunkSize // 这个是切片大小,一般默认是4
      }
      const observable = qiniu.upload(file, key, token, putExtra, config)
      observable.subscribe(observer) // 上传开始
    };

	return {
	...toRefs(state),
	onChangUploadDragger,
	ConfiromUpload,
	}
}

至此七牛云的上传就完成了,需要注意的七牛云的token是从后端获取的,前端拿着token才能去访问七牛云并将文件上传上去;
代码写的比较冗余,请多多见谅。主要是为自己记录的哈

七牛云分片批量上传大文件视频 <template> <el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.add ? '新增' : '修改'" width="800px" @opened="showDialog()"> <el-form ref="fo. 阅读详情

相关推荐

Vue.js文件上传组件集成示例:七牛云

Vue.js是一种流行的JavaScript框架,主要用于构建用户界面。其核心库只关注视图层,易于上手,同时也支持通过插件进行功能扩展。Vue的设计哲学是关注数据的变化,通过数据驱动视图的更新。开发者能够通过简单的数据绑定和组件化开发,快速构建响应式界面。除了基本的上传功能,组件还提供了自定义上传按钮和文件预览的能力,这极大地增强了用户界面的友好度和灵活性。<template>-- 自定义上传按钮 -->

weixin_42471823的博客 644

Vue 使用云存储(七牛云)

项目将数据与应用混在一起,不利于对系统进行维护。可以考虑如下场景:1、希望通过 CDN 加速来提高图片资源的访问速度2、服务器存储满了,需要多图片等文件资源做迁移,但是服务不能中断,域名不能变化 …通过数应分离思想,就可以解决以上问题。几乎所有系统都会涉及到图片、视频等资源的上传和管理;项目中使用存储图片、视频的云存储 数应分离后,可以将图片等文件资源独立出来,存储到云端。常见的云有阿里云、腾讯云、 华为云、七牛云等。

Blog of Leviash 2358

cropper.vue 头像上传七牛云 裁剪头像

vue-cropper图片裁剪插件,axios发送请求 用vue的项目里需要对图片进行裁剪,于是使用了cropperjs,在使用的过程中也踩过一些坑,以下是在.vue文件里cropperjs的使用方法和经验教训总结

vue实现上传文件到七牛云

第二步,页面中引入插件。

weixin_64141611的博客 1200

跨越移植陷阱:ESP-IDF下LVGL与ILI9341的组件化集成与常见避坑指南

本文详细解析了在ESP-IDF环境下将LVGL图形库与ILI9341显示屏驱动进行组件化集成的完整流程。重点介绍了移植过程中的关键配置策略、内存管理优化技巧以及常见问题解决方案,帮助开发者有效规避内存溢出、显示异常等典型陷阱,实现高效稳定的嵌入式GUI开发。

yhn456789的博客 622

Linux环境下使用线程方式操作UART读写功能

本文介绍Linux环境下使用线程方式操作UART的方法,实现了串口打开,关闭,发送数据,接收数据功能,还编写测试代码,验证该功能。

mftang的博客 2078

vue+element ui上传图片到七牛云服务器

springboot+vue+element ui上传图片资源到七牛云服务器

時間的博客 2090

AI产品经理必备:Agent评测维度、指标与工程化落地指南

随着大模型从单轮问答走向复杂的Agent应用,如何科学地评测一个Agent是否真正“办成了事”,成为AI产品经理必须掌握的核心能力。与传统大模型评测关注回答质量不同,Agent评测需要综合评估任务规划、工具调用、多轮对话一致性以及失败自愈等行为。任务完成率与工具调用成功率是最关键的两个量化指标,同时还需关注延迟与Token成本等工程约束。在实际落地中,评测集的设计要覆盖业务主流程与边界场景,并通过批量回归测试与版本对比,为产品选型、算法迭代和上线决策提供数据支持。本文系统拆解了Agent评测的完整流程,帮助

weixin_29057163的博客 340

【超级详细】Vue3项目上传文件到七牛云的详细笔记

如何在Vue3项目中实现文件上传至七牛云 如何在Vue3项目中实现文件上传至七牛云 如何在Vue3项目中实现文件上传至七牛云 如何在Vue3项目中实现文件上传至七牛云 如何在Vue3项目中实现文件上传至七牛云 如何在Vue3项目中实现文件上传至七牛云 如何在Vue3项目中实现文件上传至七牛云 如何在Vue3项目中实现文件上传至七牛云 如何在Vue3项目中实现文件上传至七牛云 如何在Vue3项目中实现文件上传至七牛云 如何在Vue3项目中实现文件上传至七牛云 如何在Vue3项目中实现文件上传至七牛云

JZJ_LYH的博客 1816

【maxENT】从数据到地图:R语言实现最大熵物种分布建模全流程解析

本文详细解析了如何使用R语言实现最大熵模型(MaxEnt)进行物种分布建模的全流程。从数据准备、环境变量处理到模型训练与参数调优,再到模型评估与结果可视化,提供了实用的代码示例和避坑指南。特别适合生态学研究者利用最大熵模型处理物种分布数据,提升研究效率。

weixin_27244795的博客 214

【技能---ubuntu20.04更换国内镜像源】

安装好ubuntu20.04后,在下载软件等安装包的时候,速度特别的慢,为此就想着更换一下镜像源,以此来增加下载的速度!!!下面是换源的具体流程!!!提示:以下是本篇文章正文内容,下面案例可供参考以上到这里就更换完软件源了,如有不足之处,请大家斧正!!!

fyc300的博客 1万+

Vue+element-ui上传文件到七牛云组件

Vue+element-ui上传文件和分片上传到七牛云一、实现效果二、上传到七牛云的过程三、实现组件代码1.上传组件代码2.引入组件3.提示 公司可能会将图片文件等存储到七牛云、阿里云等服务器方便管理。我这里将文件上传到七牛云,通过七牛云的api来实现上传和分片上传。使用element-ui的el-upload组件改造来完成。 一、实现效果 点击添加附件弹出dialog操作框 选取文件后添加文件到待上传列表,点击上传后同时上传文件,超过一定大小(自己设置)的文件会采用分片上传。 上传后的添加附件变为查看

imapig_的博客 4683

Uniapp返回上一页并刷新:亲测有效的 goBack 实现技巧!

这个技巧在实际开发中非常常用,特别适合表单提交后返回列表刷新这类场景。比起依赖onShow或复杂的vuex状态同步,这种方式更直接、好维护,也不容易出 bug。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1840

vue+springboot前后端视频文件等的上传与展示(基于七牛云)

在初步说明完成功能之前,我会把重要的部分说明下。后续我会细化。

jgdabc的博客 4912

基于自适应小波阈值算法的图像去噪

自适应小波阈值算法是一种基于小波变换的方法,它相对于传统的小波阈值去噪方法具有更好的性能和鲁棒性。该算法首先对图像进行小波变换,然后根据小波系数的大小确定一个自适应的阈值,将小波系数与阈值进行比较,大于阈值的系数被保留,小于阈值的系数被置零。在上述代码中,首先选取了小波函数sym4进行小波分解,然后根据标准差计算出阈值,使用wthresh函数进行阈值处理,最后进行反变换得到处理后的图像。该GUI界面与前面的自适应小波阈值算法代码结合,实现了图像的去噪,并提供了可视化的效果。

与其临渊羡鱼,不如退而结网 558

Python爬虫实战:如何从Google Maps和OpenStreetMap抓取地理坐标数据

地点名称:地理位置的名称或地址。地理坐标:经度和纬度。类别信息:比如餐馆、商店、公园等。评论数据:如果可用,获取用户评论。本文介绍了如何使用Python爬虫从Google Maps和OpenStreetMap抓取地理坐标数据,并展示了如何存储和分析这些数据。通过实际的代码示例,您可以学习到如何处理不同类型的地图数据抓取任务,以及如何应对反爬虫机制。掌握这些技术后,您可以进行更广泛的地理数据分析,提供更有价值的地理信息服务。

2201_76125261的博客 1039

vue3使用七牛云上传文件

本文介绍了Vue3集成七牛云文件上传的完整解决方案。主要内容包括:1) 环境配置步骤,包括安装七牛云SDK和获取必要配置信息;2) 详细代码实现,涵盖文件选择、上传进度显示、结果预览等完整功能;3) 关键配置说明和安全注意事项;4) 常见问题解决方法。该方案实现了前端文件上传的核心功能,同时强调了安全规范,建议通过服务端生成上传凭证以避免暴露敏感信息。文章提供了完整的Vue组件代码和样式,可直接用于项目开发。

weixin_52726621的博客 951

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

七牛云上传文件---前端vue实现

官方接口文档: python SDK:https://developer.qiniu.com/kodo/sdk/1242/python JavaScript SDK: https://developer.qiniu.com/kodo/sdk/1239/java 1、安装 pip install qiniu npm install qiniu-js 2、准备工作 申请空间及获取密钥准备 3、后端获取七牛云token #######################utils/MyBaseView.py.

weixin_49319422的博客 3809

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

七牛云上传文件----前端vue实现

官方接口文档: python SDK:https://developer.qiniu.com/kodo/sdk/1242/python JavaScript SDK: https://developer.qiniu.com/kodo/sdk/1239/java 1、安装 pip install qiniu npm install qiniu-js 2、准备工作 申请空间及获取密钥准备 3、后端获取七牛云token #######################utils/MyBaseView.py.

qq_15832329的博客 1562

七牛云 vue 图片上传简单解说,js 上传文件图片

首次使用七牛云存储进行项目的图片存储,整了一上午才整明白,这些官方的教程把明白人也给说糊涂了,文档很不规范。七牛云有免费的使用额度,上传是不算流量的,只有资源被访问的时候才产生流量,很合理。对于个人小项目使用来说,很方便,文件系统本身就应该跟业务系统分离。

学习笔记 3850

vue 七牛云上传文件步骤及问题汇总

官方API文档:https://developer.qiniu.com/kodo/sdk/1283/javascript 步骤: 1、前台使用vue,后台传递一个 token。 2、token : 这个相当于一个密钥。 npm安装:npm install qiniu-js <template> <div class="ft-plant-upload-b...

baozisss的博客 5043

上传文件到七牛云返回文件URL地址并保存到数据库

话不多说,直接看效果:

Lee_yuntao的博客 4461

七牛云vue上传大文件

注册七牛云账号 原理 1.django获取token值 from qiniu import Auth def qiniu_token(): # 需要填写你的Access Key 和 Secret Key access_key = 'gF6rL2ONmDB5GqyRtavfX9arCzR8EniQPvK-kbbe' secret_key = '9Dy-f2F8ZsiXZVPMKpuZ8ioVoRJE_ViErKnSQI_q' # 构建鉴权对象 q = Auth(

m0_51946387的博客 666

Vue+七牛云上传图片

Python + Vue + 七牛云上传图片 申请七牛云账号、创建七牛云空间这是省略 1、使用python获取上传使用的token值 安装七牛云 pip install qiniu==7.2.6 获取token,这里是使用的工用方法,在myutils下创建qiniu_api.py文件 from qiniu import Auth def qiniu_token(): # 定义密钥 qn = Auth('bm-V0IyKPuFLRWJengvWtXvDC8Gx5BQhCN0k

weixin_45978312的博客 1244

Vue使用七牛云上传的实例

待续

weixin_43910427的博客 1263

vue+elementui 图片上传七牛云

1、前端调用后端接口获取uploadToken 2、通过accessKey和sercetKey构建认证对象,通过认证对象设置空间名获取token 3、返回给前端需要的参数 4、前端通过vue+elementui上传文件,只要封装好上传的文件对象和文件名的一些属性成dataObj然后指定上传路径即可 dataObj所有参数如下: _self.dataObj.key = response.data.dir + '/'+getUUID()+'_'+file.name; _self.dataObj.dir = re

qq_40694036的博客 1110
上一篇: js转换文件的size由KB转换为B、MB、GB
下一篇: ES5/ES6较常用的数组遍历方法
抠脚小弟
博客等级 码龄7年 87粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值