JavaScript 使用axios库发送 post请求给后端, 给定base64格式的字符串数据和一些其他参数, 使用表单方式提交, 并使用onUploadProgress显示进度

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 使用 Axios 发送包含 Base64 数据和其他参数的 POST 请求时,可以通过 `onUploadProgress` 监听上传进度。由于整个请求体被视为一个单元,所以进度可能不够精确,但可以模拟进度反馈。前端示例代码展示如何创建一个包含 Base64 图片数据和额外参数的 `FormData` 对象,并在上传时更新进度条。后端使用如 Express 和 Multer 可处理 Base64 数据。注意,实际进度可能不如文件上传精确,显示简单加载状态可能更合适。

通义千问


虽然onUploadProgress主要用于跟踪文件上传的进度,但当你以表单形式(包括Base64编码的字符串数据和其他参数)发送POST请求时,也可以尝试使用它来模拟进度反馈。请注意,由于整个请求体(包括Base64字符串)是作为一个整体发送的,所以这种情况下进度反馈可能不如上传文件那样精确到百分比,但它可以作为一种指示请求正在发送的信号。下面是一个示例代码:

javascript

const axios = require('axios');
// 假设这是你的Base64编码的字符串和其他参数
const base64Data = "your_base64_encoded_string_here";
const otherParams = {
    param1: "value1",
    param2: "value2"
};
// 将所有数据整合成一个表单形式的请求体
const formData = new FormData();
formData.append("base64Data", base64Data);
for (let key in otherParams) {
    formData.append(key, otherParams[key]);
}
// 发送POST请求
axios.post('你的后端接口URL', formData, {
    headers: {
        'Content-Type': `multipart/form-data; boundary=${formData._boundary}`,
    },
    onUploadProgress: function(progressEvent) {
        // 因为整个数据体是一次发送,所以这里不能直接计算准确的百分比。
        // 但是,可以使用loaded和total来模拟一个简单的进度反馈。
        if (progressEvent.total > 0) {
            const progressPercentage = Math.round((progressEvent.loaded * 100) / progressEvent.total);
            console.log(`请求发送进度:${progressPercentage}%`);
            // 这里可以根据需要更新UI,展示一个大致的进度状态
        }
    },
})
.then(response => {
    console.log('请求成功', response.data);
})
.catch(error => {
    console.error('请求失败', error);
});

请注意,由于整个请求体被视为一个整体发送,因此onUploadProgress事件可能只会触发一次或几次,尤其是当请求体不是特别大时,这可能不足以提供精细的进度反馈。在这种情况下,显示一个旋转的加载图标或者简单的“正在发送”状态可能更加合适。






GPT4o



可以通过 Axios 库发送包含 Base64 数据和其他参数的 POST 请求,并在上传过程中显示进度百分比。以下是一个详细的示例,演示如何实现这一目标。

前端代码

首先,确保你已经安装了 Axios。如果没有安装,可以使用 npm 或 yarn 进行安装:

bash

npm install axios
# or
yarn add axios

以下是如何使用 Axios 发送包含 Base64 格式字符串数据和其他参数的 POST 请求,并在上传过程中显示进度百分比:

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Base64 Upload with Progress</title>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
    <button onclick="uploadData()">Upload Data</button>
    <div id="progress"></div>
    <script>
        function uploadData() {
            // 模拟一个 Base64 字符串数据
            const base64Data = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA";
            const otherParams = {
                param1: "value1",
                param2: "value2"
            };
            // 创建一个 FormData 对象
            const formData = new FormData();
            formData.append('file', base64Data);
            formData.append('param1', otherParams.param1);
            formData.append('param2', otherParams.param2);
            // 使用 Axios 发送 POST 请求
            axios.post('/upload-base64', formData, {
                headers: {
                    'Content-Type': 'multipart/form-data'
                },
                onUploadProgress: function (progressEvent) {
                    let percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
                    document.getElementById('progress').innerText = `Upload Progress: ${percentCompleted}%`;
                }
            })
            .then(function (response) {
                console.log('Data uploaded successfully');
            })
            .catch(function (error) {
                console.error('Error uploading data:', error);
            });
        }
    </script>
</body>
</html>

后端代码

后端代码会根据你所使用的服务器框架有所不同。以下是 Node.js 和 Express 框架的一个示例,展示了如何处理 Base64 数据和其他参数。

首先,安装所需的包:

bash

npm install express multer

创建一个 server.js 文件,并添加以下代码:

javascript

const express = require('express');
const multer = require('multer');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/upload-base64', upload.none(), (req, res) => {
    const base64Data = req.body.file;
    const param1 = req.body.param1;
    const param2 = req.body.param2;
    // 处理 Base64 数据
    const base64ContentArray = base64Data.split(',');
    const mimeType = base64ContentArray[0].match(/:(.*?);/)[1];
    const base64String = base64ContentArray[1];
    const buffer = Buffer.from(base64String, 'base64');
    // 在这里处理buffer,比如保存文件或进一步处理
    // 例如,这里将文件保存到磁盘:
    const fs = require('fs');
    const path = require('path');
    const filename = 'uploaded_file.png'; // 你可以根据实际情况生成唯一的文件名
    fs.writeFile(path.join(__dirname, 'uploads', filename), buffer, err => {
        if (err) {
            return res.status(500).send('Error saving file');
        }
        res.send('Base64 data and other parameters processed successfully');
    });
    console.log(`Received params: param1=${param1}, param2=${param2}`);
});
app.listen(port, () => {
    console.log(`Server running at http://localhost:${port}`);
});

确保创建一个 uploads 目录来存储上传的文件:

bash

mkdir uploads

总结

  • 前端使用 Axios 的 onUploadProgress 选项来获取上传进度,并更新 UI 显示进度百分比。
  • 将 Base64 数据和其他参数附加到 FormData 对象中,通过 POST 请求发送。
  • 后端使用 Node.js 和 Express 处理 Base64 数据和其他参数,并进行文件保存或进一步处理。

这样,你就可以实现上传 Base64 数据和其他参数,并显示百分比进度的功能。根据不同的后端技术栈,后端的实现可能有所不同,但前端的代码基本可以保持不变。






相关文章
|
2月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
2月前
|
SQL JSON 关系型数据库
17.6K star!后端接口零代码的神器来了,腾讯开源的ORM库太强了!
"🏆 实时零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码,前端定制返回 JSON 的数据和结构"
|
6月前
|
算法 开发者
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
189 57
|
8月前
|
JavaScript 前端开发 API
网络请求库 – axios库
网络请求库 – axios库
267 60
|
6月前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
7月前
|
JavaScript
Node.js GET/POST请求
10月更文挑战第6天
69 2
Node.js GET/POST请求
|
7月前
|
缓存 JavaScript CDN
一次js请求一般情况下有哪些地方会有缓存处理?
一次js请求一般情况下有哪些地方会有缓存处理?
70 4
|
8月前
|
XML JSON JavaScript
js的json格式
js的json格式
|
8月前
|
JSON JavaScript 前端开发
js请求后端9
js请求后端9
69 2
|
7月前
|
机器学习/深度学习 JSON JavaScript
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
180 0