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

简介: 使用 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 数据和其他参数,并显示百分比进度的功能。根据不同的后端技术栈,后端的实现可能有所不同,但前端的代码基本可以保持不变。






相关文章
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
2262 103
|
Web App开发 数据采集 JavaScript
动态网页爬取:Python如何获取JS加载的数据?
动态网页爬取:Python如何获取JS加载的数据?
1931 58
|
JavaScript 前端开发 API
|
资源调度 JavaScript 前端开发
Day.js极简轻易快速2kB的JavaScript库-替代Moment.js
dayjs是一个极简快速2kB的JavaScript库,可以为浏览器处理解析、验证、操作和显示日期和时间,它的设计目标是提供一个简单、快速且功能强大的日期处理工具,同时保持极小的体积(仅 2KB 左右)。
927 24
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
733 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
存储 缓存 负载均衡
后端开发中的性能优化策略
本文将探讨几种常见的后端性能优化策略,包括代码层面的优化、数据库查询优化、缓存机制的应用以及负载均衡的实现。通过这些方法,开发者可以显著提升系统的响应速度和处理能力,从而提供更好的用户体验。
655 6
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
794 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
人工智能 Java API
后端开发必看:零代码实现存量服务改造成MCP服务
本文介绍如何通过 **Nacos** 和 **Higress** 实现存量 Spring Boot 服务的零代码改造,使其支持 MCP 协议,供 AI Agent 调用。全程无需修改业务代码,仅通过配置完成服务注册、协议转换与工具映射,显著降低改造成本,提升服务的可集成性与智能化能力。
3366 1
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
791 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践