uni-app流式接受消息/文件

news/2024/9/17 7:09:29/ 标签: uni-app

uni-app流式接受消息/文件

问题描述

今天利用fastgpt搭建了一个局域网进行访问Ai助理,在前端通过api接口进行请求,用于接收后端的发送的流式消息,那么前端可以进行流式的获取到这个消息,也可以进行直接进行在请求发送完成以后,再进行渲染这个数据,后者显然不符合我们的需求的。今天再进行完成的时候,但是进行今天进行请求的时候,每次都是通过请求完成获取到所有的消息以后再进行渲染的。

问题解决

本来的说法是通过流式使用websocket进行接受这个数据也可以进行实现流式的消息,但是后端需要的请求的方式是POST请求,并不是WS请求,所以只能通过基本请求的方式进行完成接受的流式的数据,在普通的js或者vue项目是可以通过fetch来进行发送请求,来进行完成这个需求的,但是在uniapp中却并不支持进行使用fetch进行完成,所以这里记录一下在uniapp中如何的进行接受流数据.

  • 流式数据请求进行异步封装

    const StreamRequest = (content) => {return new Promise((resolve, reject) => {const response = uni.request({url: 'https://www.', // 请求地址method: "POST", // 你的请求方法dataType: "json", // 请求的数据类型data: content, // 请求体header: {'Authorization': `Bearer `,},responseType: "text",enableChunked: true, // 开启流传输success: (res) => {resolve(res)}, // 请求成功回调fail: (err) => {reject(err)} // 请求失败回调})// 返回请求的响应resolve(response)})
    }
    
  • 使用流失请求,一下以消息流作为的使用的式例

    const fetchStreamedResponse = async (message)=>{const content={"chatId": "111", "stream": true,"detail": false,'messages': [{'role': 'user', // 用户角色,可以是user,assistant,system,function等,具体可以参考openai文档。'content': `${message}`, // 用户输入的内容,可以是文本,也可以是json格式。}]}// 假设已经完成了封装,并进行了导入  const resp= await StreamRequest(content)console.log(resp);// 返回请求头信息resp.onHeadersReceived((e)=>{console.log(e);})// 成功回调 返回流传输信息 返回arrayBufferresp.onChunkReceived((e)=>{e// 进行处理二进制编码const decoder = new TextDecoder('utf-8'); // 创建一个utf-8解码器,用于解码二进制数据为文本。const txt = decoder.decode(e.data); // 解码二进制数据为文本。const a=parseStream(txt)console.log(a); // 打印解码后的文本数据。})}
    

总结

前端进行通过API接口进行请求流式数据,因为在uniapp中是无法通过fetch进行实时的响应的,所以在uniapp中通过对于请求进行拿到他们的hook进行完成了流式数据的接受和实时的渲染.


http://www.ppmy.cn/news/1522514.html

相关文章

src/pyaudio/device_api.c:9:10: fatal error: portaudio.h: 没有那个文件或目录

(venv) shgbitaishgbitai-C9X299-PGF:~/pythonworkspace/ai-accompany$ pip install pyaudio sounddevice Collecting pyaudioDownloading PyAudio-0.2.14.tar.gz (47 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 47.1/47.1 kB 644.…

Linux中的Vim文本编辑器

Linux中的Vim是一个非常强大的文本编辑器,它提供了丰富的命令来支持各种文本编辑操作。以下是一个Vim常用命令的详细总结,涵盖了基本操作、编辑命令、移动光标、查找替换、保存退出等多个方面。 一、基本操作 启动Vim vim:直接启动Vim编辑器…

Rust模块std::thread

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust到底值不值得学,之一 -CSDN博客 Rust到底值不值得学,之二-CSDN博客 Rust多线程编程概述-CSDN博客 12.…

4 路由模式

路由模式 逻辑图 如果我们将生产环境的日志进行处理,而日志是分等级的,我们就按照 error waring info三个等级来讲解 一个消费者是处理【所有】(info,error,warning)的日志,用于做数据仓库&am…

简说目前市面上最流行的“AI Agentic”

背景 当吴恩达在布道完著名的Agent设计模式后 他于不久后又引领了AI界的开发们开始关注另一种高级开发模式,即"Agentic",吴恩达多次反复强调:“Agentic是比Agent更具未来”。 那么什么是Agentic呢? 什么是AI Agentic…

新换了电脑,电脑里常用的6款软件,下载回来继续用

新换了电脑,准备把之前电脑里常用的几款软件都下载回来继续用,独乐乐不如众乐乐,分享一下~ 1、Listen 1 一款开源、免费的音乐播放器,它能够整合多个主流音乐平台的资源,包括网易云音乐、QQ音乐、酷狗音乐、酷我音乐、…

[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程

题目来源 NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。https://www.nssctf.cn/problem [SWPUCTF 2021 新生赛]gift_F12 这个题目简单打开后是一个网页 我们一般按F12或者是右键查…

WorkPlus安全即时通讯:端到端加密开启信息保密新时代

在数字化时代,信息的保密性和安全性变得越发重要。企业和个人需要确保他们的敏感信息和机密通讯不会落入黑客或第三方的手中。为了满足这一需求,WorkPlus安全即时通讯平台应运而生。作为一款拥有端到端加密功能的通讯平台,WorkPlus着重于保护…

小米Vela:端侧AI推理框架

小米Vela是小米公司基于开源实时操作系统NuttX打造的物联网嵌入式软件平台。该平台旨在为各种物联网硬件提供统一的软件服务,支持丰富的组件和易用的框架,以打通碎片化的物联网应用场景。2024年8月在“开源中国开源世界”大会,小米对外公开超…

python 解析数据后保存到excel

openpyxl 特点: 支持读写Excel 2010 xlsx/xlsm/xltx/xltm文件格式。可以操作Excel的几乎所有功能,如样式、图表、图片等。适用于复杂的Excel操作,例如公式、数据验证和条件格式。社区支持较好,文档比较完善。 优点: 功…

MyBatis入门 – 动态SQL

MyBatis入门 – 动态SQL 1.动态SQL介绍 1.1 什么是动态SQL 在原先的JDBC中,开发者需要根据业务的不同要求手动拼接SQL语句,不仅增加开发的复杂度,同时也降低开发效率。而动态SQL则能够根据不同业务场景动态构建查询。动态SQL一般是根据用户…

Java网络编程入门

在现代软件开发中,网络编程是一项不可或缺的技能。Java提供了强大的网络编程支持,使得开发者能够轻松地创建网络应用程序。今天将介绍Java中的网络编程基础,重点讲解Socket和ServerSocket类的使用。 什么是Socket? Socket是网络通…

android系统源码12 修改默认桌面壁纸--SRO方式

1、aosp12修改默认桌面壁纸 代码路径 :frameworks\base\core\res\res\drawable-nodpi 替换成自己的图片即可,不过需要覆盖所有目录下的图片。 由于是静态修改,则需要make一下,重新编译。 2、方法二Overlay方式 由于上述方法有…

[动态规划] 删除并获得点数

给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操…

vue3缺陷

Vue 3 的一些缺陷包括: 1. 兼容性问题:由于 Vue 3 使用了新的响应式系统,与 Vue 2 的代码不兼容。这意味着在迁移现有项目时需要进行一些改动。 2. 学习曲线:Vue 3 引入了一些新的概念和 API,相对于 Vue 2 有一定的学习…

如何利用AI优化知识中台的用户体验

引言 在数字化时代,知识中台作为企业知识管理与服务的重要载体,其用户体验的优劣直接关乎到信息的有效传递、员工的学习效率及企业的整体创新能力。随着人工智能(AI)技术的飞速发展,将AI融入知识中台的设计与优化中&a…

Linux系统高效进程控制的实战技巧

Linux系统高效进程控制的实战技巧 Linux是一种开源的Unix-like操作系统内核,由林纳斯托瓦兹(Linus Torvalds)于1991年首次发布。Linux以其稳定性、安全性和灵活性而著称,广泛应用于服务器、桌面、嵌入式系统等多个领域。在Linux系…

使用Docker快速安装和运行Elasticsearch

Elasticsearch 是一个基于 Lucene 构建的开源搜索引擎,它提供了分布式、多租户能力的全文搜索引擎,具有 HTTP web 接口和无模式的 JSON 文档。在本文中,我们将介绍如何使用 Docker 快速安装和运行 Elasticsearch。 为什么使用 Docker 安装 E…

redis中使用lua脚本

1、现实问题 1.redis采用单线程架构,可以保证单个命令的原子性,但是无法保证一组命令在高并发场景下的原子性。例如: 在串行场景下:A和B的值肯定都是3在并发场景下:A和B的值可能在0-6之间。 2.极限情况下1&#xff1…

Qt Widget核心属性

文章目录 前言enabledgeometrywindowTitlewindowIconwindowOpacitycursorfonttoolTipfocusPolicystyleSheet 前言 Qt中的各种控件,都是继承自QWidget类,了解这个类的属性方法之后,后续的控件也通用 enabled enabled描述了一个控件是否处于…