前端向Java后端请求blob、arraybuffer类型的数据流

项目需求描述:

前端需要获取后端音频文件,但遇到跨域问题,不能直接使用url获取,需求必须使用流将文件传到前端。因此,考虑Java后端读取音频文件,然后向前端发送数据流,前端按后端发送类型将数据接收,并合成其格式文件。

后端代码举例

 @ResponseBody
 @PostMapping("/getWavFile")
 public ResponseEntity<byte[]> getUserVoiceprint(String fileName){
	 if(fileName == null || fileName == ""){
	     return null;
	 }
	 try{
	     String vpPath = "E:/files/wav/" + fileName + ".wav";
	     File f = new File(vpPath);
	     if(f.exists()){
	         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;
	     }else{
	         return null;
	     }
	 } catch (IOException e) {
	     e.printStackTrace();
	 }
	 return null;
 }

前端代码举例

引入axios.min.js文件

<script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
 axios({
     method:"post",
     url: "/getWavFile",
     params: {fileName: wavName},
     responseType:'arraybuffer',
     headers: { 'Accept': '*/*', 'Content-Type': 'audio/wav' }
 }).then(data => {
     if(data.data.byteLength > 0){
         blob = new Blob([data.data], {type: 'audio/wav'});
         let audio = document.createElement('audio');
         audio.src = URL.createObjectURL(blob);
         audio.play();
     }else{
         alert("未查询到记录");
     }
 }).catch(function() {
     alert("未查询到记录");
 });

其中,responseType:‘arraybuffer’,写成responseType:'blob’也可以;method也可以使用get,但此时不能使用params传参。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值