首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将mp3文件从Java后台发送到前端,并在Vue.js前端播放

如何将mp3文件从Java后台发送到前端,并在Vue.js前端播放
EN

Stack Overflow用户
提问于 2021-01-25 14:40:02
回答 1查看 507关注 0票数 0

我们有一个Spring Boot java后端和一个Vue.js前端。后端API代码调用外部接口获取MP3,Vue.js前端调用后端API获取mp3文件并播放。现在,浏览器有时会表现出不稳定的行为,有时会因为CORS问题而不播放mp3。

正因为如此,我想在后端下载文件,并返回字节到前端。我对前端非常陌生,想知道从后端下载mp3的最好方法是什么,mp3文件应该以什么格式发送到前端,以及如何使用javascript(vue)将字节转换为mp3。

请注意,文件大小非常小。该文件是小于5秒的mp3文件,所以我不想将该文件存储在服务器中。

EN

回答 1

Stack Overflow用户

发布于 2021-01-26 01:21:27

在Spring中,你可以返回一个字节数组:

代码语言:javascript
复制
File f = new File("/path/to/the/file");
byte[] file = Files.readAllBytes(f.toPath());

HttpHeaders headers = new HttpHeaders();
headers.set("Content-Disposition", "attachment; filename=\"" + f.getName() +".wav\"");
ResponseEntity<byte[]> response = new ResponseEntity(file, headers, HttpStatus.OK);

return response;

然后在javascript中获取它,如下所示:

代码语言:javascript
复制
import fileDownload from 'js-file-download';

const { data } =  await axios.get(`http://api.url`, {
        responseType: 'arraybuffer',
        headers: { 'Accept': '*/*', 'Content-Type': 'audio/wav' }
    }).then(resp => resp);
    const blob = new Blob([data], {
        type: 'audio/wav'
    })
    const url = URL.createObjectURL(blob);

    fetch(url)
        .then(res => res.blob())
        .then(blob => fileDownload(blob, 'your_filename'))
        .catch(e => console.log('ERROR DOWNLOADING AUDIO FILE'));

我使用了React和axios,但我希望您能处理;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65880004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档