0

我使用spring RestTemplate 调用第三方服务,</p>

ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);

结果如下:

forEntity status:200 headers: content-type=audio/wav body:"RIFFä,,,xxxxxxx......"

响应是在此处输入图像描述 主体似乎是 wav 数据,我想将数据保存到 wav 文件。

如果我直接去chrome中的链接,就可以玩了,下载。

4

2 回答 2

0

改为使用RestTemplate.execute,它允许您附加 a ResponseExtractor,您可以在其中访问response bodywhich an InputStream,我们将其InputStream写入文件

   restTemplate.execute(
            url, 
            HttpMethod.GET,
            request -> {}, 
            response -> {
                //get response body as inputstream
                InputStream in = response.getBody();
                //write inputstream to a local file
                Files.copy(in, Paths.get("C:/path/to/file.wav"), StandardCopyOption.REPLACE_EXISTING);
                return null;
            }
    );
于 2021-01-25T15:08:12.603 回答
0

在 JavaString中,a 与byte[]数组不同。因此,将音频内容(二进制数据)视为字符串(即文本数据)是有问题的。
相反,您应该将响应正文作为byte[]. 然后您可以将字节保存到文件中。例如像这样:

ResponseEntity<byte[]> entity = restTemplate.getForEntity(url, byte[].class);
byte[] body = entity.getBody();
Path path = Paths.get("example.wav");
Files.write(path, body);
于 2021-01-25T15:48:24.670 回答