Vue中使用axios先获取头像上传参数然后上传图片到服务器-demo
这是一个使用axios发送POST请求上传图片到AWS S3的代码。其中:
- 引入了axios、FormData和fs模块;
- 创建FormData实例,向其中添加上传图片的相关信息;
- 创建axios请求的配置对象config,包含url、method、headers和data等属性;
- 调用axios.post发送请求,并通过Promise链式调用处理响应和错误。在处理响应时,将返回的数据打印出来。
获取头像上传参数
{"code": "Success","data": {"uploadUrl": "https://broker-exchange-web-test.s3-accelerate.amazonaws.com/","accessUrl": "https://broker-exchange-web-test.s3-accelerate.amazonaws.com/exchange-storage/avatar/1769116539041622664.jpg?nonce=k2f2i2cb","param": {"Policy": "eyJleHBpcmF0aW9uIjoiMjAyMy0wNy0yMFQwMzoxODo1Ny43ODRaIiwiY29uZGl0aW9ucyI6W3sia2V5IjoiZXhjaGFuZ2Utc3RvcmFnZS9hdmF0YXIvMTc2OTExNjUzOTA0MTYyMjY2NC5qcGcifSxbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwwLDUyNDI4ODBdLHsiQ29udGVudC1UeXBlIjoiaW1hZ2UvanBlZyJ9LHsiYnVja2V0IjoiYnJva2VyLWV4Y2hhbmdlLXdlYi10ZXN0In0seyJ4LWFtei1hbGdvcml0aG0iOiJBV1M0LUhNQUMtU0hBMjU2In0seyJ4LWFtei1jcmVkZW50aWFsIjoiQUtJQTQ2TkhSMkNNVVFGSE5BMlkvMjAyMzA3MjAvYXAtc291dGhlYXN0LTEvczMvYXdzNF9yZXF1ZXN0In0seyJ4LWFtei1kYXRlIjoiMjAyMzA3MjBUMDMxMzU3WiJ9XX0=","x-amz-date": "20230720T031357Z","x-amz-signature": "5a0cfa2a8e2dc24ca1106a55b37d5d1280d787708dc2185efc574742d3a77e1d","key": "exchange-storage/avatar/1769116539041622664.jpg","x-amz-algorithm": "AWS4-HMAC-SHA256","Content-Type": "image/jpeg","x-amz-credential": "AKIA46NHR2CMUQFHNA2Y/20230720/ap-southeast-1/s3/aws4_request"}}
}
图片上传
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
let data = new FormData();
data.append('Policy', 'eyJleHBpcmF0aW9uIjoiMjAyMi0xMS0yM1QwODo0OTozOS4zMDNaIiwiY29uZGl0aW9ucyI6W3sia2V5IjoiZGV2L3VnYy9jb3Zlci8yMDIyMTEwMTExMzgzNTE4NS5wbmcifSxbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwwLDEwNDg1NzYwXSx7IkNvbnRlbnQtVHlwZSI6ImltYWdlL3BuZyJ9LHsiYnVja2V0IjoibWVsb2R5LXN0b3JhZ2UtMyJ9LHsieC1hbXotYWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsieC1hbXotY3JlZGVudGlhbCI6IkFLSUFTMlFUMlJMVzUyTDdTRDY0LzIwMjIxMTIzL2FwLXNvdXRoZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LHsieC1hbXotZGF0ZSI6IjIwMjIxMTIzVDA4MzkzOVoifV19');
data.append('x-amz-date', '20221123T083939Z');
data.append('x-amz-signature', 'c4ad196371d7cf85cec64587173bdaa37216db4ba1444969190e518326325f4f');
data.append('key', 'dev/ugc/cover/20221101113835185.png');
data.append('x-amz-algorithm', 'AWS4-HMAC-SHA256');
data.append('Content-Type', 'image/png');
data.append('x-amz-credential', 'AKIAS2QT2RLW52L7SD64/20221123/ap-southeast-1/s3/aws4_request');
data.append('file', fs.createReadStream('/Users/user/Desktop/20221101113835185.png'));let config = {method: 'post',maxBodyLength: Infinity,url: 'https://melody-storage-3.s3-accelerate.amazonaws.com/',headers: { ...data.getHeaders()},data : data
};axios.request(config)
.then((response) => {console.log(JSON.stringify(response.data));
})
.catch((error) => {console.log(error);
});
这个返回结果包含一个uploadUrl和一个包含上传参数的param对象。要使用这个URL来上传文件,需要使用HTTP POST请求将文件发送到该URL并使用param对象中的参数作为请求头。以下是一个示例使用JavaScript上传图像的代码:
// 假设已经有一个选择文件的input元素
const fileInput = document.querySelector('#file-input');// 发送HTTP POST请求到uploadUrl
const xhr = new XMLHttpRequest();
xhr.open('POST', response.data.uploadUrl, true);// 设置请求头参数
const headers = response.data.param;
for (const key in headers) {if (headers.hasOwnProperty(key)) {xhr.setRequestHeader(key, headers[key]);}
}// 当请求完成时
xhr.onload = function () {if (xhr.status >= 200 && xhr.status < 300) {// 请求成功console.log('上传成功');} else {// 请求失败console.log('上传失败');}
};// 发送文件
xhr.send(fileInput.files[0]);
在实际使用中,还需要适当处理错误情况并可能需要将文件名和其他元数据一起上传。
以下是使用axios上传图片的代码封装:
import axios from 'axios';function uploadImage(file, url) {return new Promise((resolve, reject) => {axios.get(url).then(response => {const { uploadUrl, param } = response.data.data;const formData = new FormData();Object.keys(param).forEach(key => {formData.append(key, param[key]);});formData.append('file', file);axios.post(uploadUrl, formData, {headers: { 'Content-Type': file.type }}).then(() => {resolve(param.accessUrl);}).catch(error => {reject(error);});}).catch(error => {reject(error);});});
}
注意,此处的url是后端接口返回上传图片所需信息的接口地址,file是要上传的图片文件。接口返回的信息中包含了上传图片所需的param参数和uploadUrl,我们需要将其整合到formData中,然后使用axios.post方法上传图片。上传成功后返回accessUrl。
以下是使用axios上传图片代码的封装:
// 封装上传图片的函数
function uploadImage(file) {// 上传图片的接口地址const url = 'https://example.com/upload-image';// 生成一个FormData对象const formData = new FormData();formData.append('image', file);// 发送POST请求return axios.post(url, formData, {// 指定请求头中的Content-Type为multipart/form-dataheaders: {'Content-Type': 'multipart/form-data',},});
}// 假设选择了一个文件,将其上传
const file = document.querySelector('input[type=file]').files[0];
uploadImage(file).then(res => {// 上传成功,返回了上传后的图片地址console.log(res.data.data.accessUrl);}).catch(err => {// 上传失败console.error(err);});
相关文章:
Vue中使用axios先获取头像上传参数然后上传图片到服务器-demo
这是一个使用axios发送POST请求上传图片到AWS S3的代码。其中: 引入了axios、FormData和fs模块;创建FormData实例,向其中添加上传图片的相关信息;创建axios请求的配置对象config,包含url、method、headers和data等属性…...
Win11环境下Android Studio中Flutter开发环境构建(逐步解决)
flutter开发环境构建 1. Flutter开发环境搭建1.1 Android Studio1.2 flutter下载flutter设置环境变量增加国内镜像 1.3 flutter doctorAndroid toolchain:cmdline-tools component is missingAndroid toolchain:Some Android licenses not acceptedChrom…...
Thread Servlet思考
在开发过程中我们经常会遇到两个对象分别是Thread和Servlet。但是很少会考虑到两者之前的关系。 Thread是线程,在tomcat服务器中请求被接收后,会启动线程对请求进行处理。线程会通过run方法执行实际执行的业务逻辑。在tomcat中当请求请求到线程池后&…...
电源滤波器怎么选用
电源滤波器怎么选用 滤波器应用场景及作用第一步:第二步:第三步:第四步: 滤波器应用场景及作用 可以有效解决EMC测试无法通过、端口防护、滤除干扰、设备保护等问题 主要功能有: 1、降低主电源谐波; 2、保护驱动装置电力电子元件…...
终于更新了!时隔一年niushop多商户b2b2c的新补丁v5.0.2终于发布了,一起看看有啥新变化
注意这是最新版的V5.02_多商户V5.0.2版本更新说明 瞧瞧更新了什么内容, 优化功能 优化手机号、身份证等常用验证规则,全局化处理优化商品列表接口查询速度 修复功能修复系统内部分图片上传功能调用接口跨端口问题修复总后台和商家后台订单管理搜索标签在…...
google的chromedriver最新版下载地址
Chrome for Testing availability (googlechromelabs.github.io) 复制对应的地址跳转进去即可下载,下载前先看下自己google浏览器版本,找到对应的版本号去下载,把解压缩的exe放到google浏览器目录下。...
Gitee的原理及应用详解(四)
本系列文章简介: Gitee是一款开源的代码托管平台,是国内最大的代码托管平台之一。它基于Git版本控制系统,提供了代码托管、项目管理、协作开发、代码审查等功能,方便团队协作和项目管理。Gitee的出现,在国内的开发者社…...
IP 协议的相关特性
目录 正文: 1.概述 2.协议头的格式 3.地址管理 3.1网段划分 3.2特殊的IP地址 3.3 IPv4的限制和解决办法 4.路由选择 总结: 正文: 1.概述 IP 协议是一个网络层协议,负责在不同网络之间传输数据包。它定义了数据包的格式…...
C++11 在 Windows 环境下的多线程编程指南
引言 随着多核处理器的普及,利用多线程编程来提升应用程序性能变得越来越重要。C11 标准库引入了一系列用于多线程编程的API,使得多线程编程变得更加简洁和高效。 一、基本概念 在开始编写多线程代码之前,了解一些基本概念是非常重要的&am…...
[数据集][目标检测]旋风检测数据集VOC+YOLO格式157张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):159 标注数量(xml文件个数):159 标注数量(txt文件个数):159 标注类别…...
智慧商砼搅拌车安监运营管理的创新实践
随着城市化进程的加速,商砼搅拌车作为城市建设的重要设备,其安全管理与运营效率直接关系到工程质量和施工进度。近年来,通过引入先进的4G无线视频智能车载终端套件,我们实现了对商砼搅拌车的高精度定位、实时音视频调度、实时油量…...
渗透测试框架提权
Metasploit自动提权 Meterpreter自动提权命令 getsystem: getsystem是由Metasploit-Framework提供的一个模块,它可以将一个管理帐户(通常为本地Administrator账户)提升为本地SYSTEM帐户 1)getsystem创建一个新的Windows服务&…...
tcp链接中的三次挥手是什么原因
一、tcp链接中的正常四次挥手过程? 刚开始双方都处于 ESTABLISHED 状态,假如是客户端先发起关闭请求。四次挥手的过程如下: 1、客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文…...
运维相关知识
一、运维需要关注 服务器的哪些数据? 1. CPU 1.1 CPU使用率: top,vmstat (1) 用户CPU使用率:用户态程序的使用率。top 命令 us 字段和 nice字段 (低优先级) (2) 系统CPU使用率:内核态程序的使用率。top 命令 sy 字…...
网络安全基础技术扫盲篇名词解释之“证书“
用通俗易懂的话说: 证书就好比是一张身份证(类似,但不完全相同),用来证明一个网站的身份是否可信。就像你要确认一个陌生人的身份需要看他的身份证一样,电脑在连接一个网站时,也会查看网站的证…...
[数据集][目标检测]老鼠检测数据集VOC+YOLO格式4107张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4107 标注数量(xml文件个数):4107 标注数量(txt文件个数):4107 标注…...
12 FreeRTOS 调试与优化
1、调试 1.1 打印 在FreeRTOS工程中使用了microlib,里面实现了printf函数。 只需要实现一下以下函数即可使用printf。 int fputc(int ch; FILE *f); 假如要从串口实现打印函数: int fputc( int ch, FILE *f ) {//指定串口USART_TypeDef* USARTx USAR…...
【Qt秘籍】[009]-自定义槽函数/信号
自定义槽函数 在Qt中自定义槽函数是一个直接的过程,槽函数本质上是类的一个成员函数,它可以响应信号。所谓的自定义槽函数,实际上操作过程和定义普通的成员函数相似。以下是如何在Qt中定义一个自定义槽函数的步骤: 步骤 1: 定义槽…...
HTTPS加密
一.加密是什么 加密就是把明文(要传输的信息)进行一系列的变换,生成密文. 有加密就有解密,解密就是把密文进行一系列的变换,生成明文. 在这个加密和解密过程中,往往需要一个或多个中间数据,辅助进行这个过程,这样的数据称为密钥. 加密解密到如今已经发展成了一个独立的学科 : 密…...
搭建大型分布式服务(三十八)SpringBoot 整合多个kafka数据源-支持protobuf
系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目,每天处理上亿级的数据的精简小插件,快速上手。 <dependency><groupId>io.github.vipjo…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
