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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 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 数据和其他参数,并显示百分比进度的功能。根据不同的后端技术栈,后端的实现可能有所不同,但前端的代码基本可以保持不变。






相关文章
|
14天前
|
Web App开发 缓存 JavaScript
深入浅出Node.js后端开发
【9月更文挑战第26天】本文将引导你了解Node.js的基本原理,并通过实际案例展示如何在后端开发中应用它。我们将从Node.js的核心概念讲起,逐步深入到构建一个完整的后端服务,最后探讨如何优化你的Node.js应用。准备好让你的开发技能更上一层楼了吗?让我们一起潜入Node.js的世界!
|
5天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第35天】本文将带你走进Node.js的世界,从基础概念到实战应用,一步步揭示Node.js在后端开发中的魅力。我们将通过实际代码示例,让你轻松掌握Node.js的开发技巧,开启你的后端开发之旅。
|
12天前
|
缓存 前端开发
后端MultipartFile接收文件转Base64
后端MultipartFile接收文件转Base64
35 8
|
3天前
|
Web App开发 JavaScript API
构建高效后端系统:Node.js与Express框架的实践之路
【9月更文挑战第37天】在数字化时代的浪潮中,后端开发作为技术架构的核心,承载着数据处理和业务逻辑的重要职责。本文将深入探讨如何利用Node.js及其强大的Express框架来搭建一个高效、可扩展的后端系统。我们将从基础概念讲起,逐步引导读者理解并实践如何设计、开发和维护一个高性能的后端服务。通过实际代码示例和清晰的步骤说明,本文旨在为初学者和有经验的开发者提供一个全面的指南,帮助他们在后端开发的旅途上走得更远。
17 3
|
5天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第35天】本文将带你走进Node.js的世界,探索这个强大的后端开发平台。我们将从基础开始,逐步深入,最后以一个简单的代码示例结束,让你对Node.js有更深入的理解。无论你是前端开发者还是后端开发者,这篇文章都将为你提供有价值的信息。让我们一起开启Node.js的学习之旅吧!
|
12天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
30 6
|
14天前
|
JavaScript 开发者
深入理解Node.js事件循环及其在后端开发中的应用
【8月更文挑战第57天】本文将带你走进Node.js的事件循环机制,通过浅显易懂的语言和实例代码,揭示其背后的工作原理。我们将一起探索如何高效利用事件循环进行异步编程,提升后端应用的性能和响应速度。无论你是Node.js新手还是有一定经验的开发者,这篇文章都能给你带来新的启发和思考。
|
14天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第25天】本文将带你了解Node.js的基本概念和核心优势,同时提供一些实际的代码示例来加深理解。无论你是初学者还是有一定经验的开发者,都能通过本文获得有价值的信息和技巧。让我们一起探索Node.js的世界吧!
|
14天前
axios全局做节流,解决多次点击导致多次请求接口
本文介绍了如何在Axios请求中实现全局节流,以防止用户快速多次点击导致重复发送相同请求的问题。
33 2
|
14天前
|
移动开发 JavaScript 前端开发
js之操作表单 | 12-4
js之操作表单 | 12-4