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

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






相关文章
|
3月前
|
前端开发
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
|
1月前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
41 7
|
1月前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
115 1
|
2月前
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
161 1
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
1月前
|
JSON Dart 数据格式
<大厂实战场景> ~ flutter&鸿蒙next处理后端返回来的数据的转义问题
在 Flutter 应用开发中,处理后端返回的数据是常见任务,尤其涉及转义字符时。本文详细探讨了如何使用 Dart 的 `dart:convert` 库解析包含转义字符的 JSON 数据,并提供了示例代码和常见问题的解决方案,帮助开发者有效处理数据转义问题。
134 0
|
2月前
|
JavaScript 前端开发
vue3教程,如何手动获取后端数据(入门到精通3,新人必学篇)
本文提供了一个Vue 3教程,讲解了如何使用axios库手动从后端获取数据,包括安装axios、配置后端访问地址、编写路由地址、发起HTTP请求以及在组件中读取和打印响应数据的步骤。
468 0
vue3教程,如何手动获取后端数据(入门到精通3,新人必学篇)
|
2月前
|
存储 数据管理 API
零代码能力:轻松搞定表单和API接口,少写80%后端代码,内含资源
小白接口(果创云 YesApi.cn)是一个零代码和低代码开发平台,提供一站式后端云服务,帮助开发者、学生、业余爱好者、工作室、中小企业及无IT技术人员的传统企业快速搭建应用、接口、服务和网站。平台提供500+免费API接口,支持在线API开发、在线表单、数据库管理、图片文件存储、会员管理等功能,无需后端开发经验,轻松实现数据处理和应用开发。
|
2月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。
|
Web App开发 JavaScript 前端开发
|
JavaScript 算法 前端开发

热门文章

最新文章

下一篇
DataWorks