sse流式接口请求一般可以使用插件:@microsoft/fetch-event-source
但是如果遇到要传一段录音文件,使用上面的插件就无法处理了,可以使用下面的方法实现传流文件
// 假设有一个文件输入框 const fileInput = document.querySelector('input[type="file"]'); // 创建 FormData const formData = new FormData(); formData.append('audio', fileInput.files[0]); // 发送请求并处理流式响应 fetch('/transcribe', { method: 'POST', body: formData }) .then(response => { const reader = response.body.getReader(); const decoder = new TextDecoder(); function processStream() { return reader.read().then(({done, value}) => { if (done) { console.log('流读取完成'); return; } // 解码收到的数据 const text = decoder.decode(value); // 分割成单独的 SSE 消息 const messages = text.split('\n\n'); for (const message of messages) { if (message.startsWith('data: ')) { try { const data = JSON.parse(message.slice(6)); if (data.duration) { console.log('音频时长:', data.duration); } else if (data.text) { console.log('转写文本:', data.text); } else if (data.comments) { console.log('评论:', data.comments); } else if (data.final) { console.log('转写结束'); return; } } catch (e) { console.error('解析消息失败:', e); } } } return processStream(); }); } return processStream(); }) .catch(error => { console.error('请求错误:', error); });
标签:const,log,text,接口,return,流式,sse,console,data From: https://www.cnblogs.com/wjs0509/p/18675402