springboot RestTemplate 调用 url 和 https 响应 headers(content-type:audio/wav) ,如何保存为 *.wav 文件?
springboot RestTemplate call url and https response headers(content-type:audio/wav) ,how to save as *.wav file?
我使用spring RestTemplate调用Third-party服务,
ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
这样的结果:
forEntity
status:200
headers:
content-type=audio/wav
body:"RIFFä,xxxxxxx ......"
响应是 enter image description here
body好像是wav数据,我想把数据存成wav文件。
如果我直接进入chrome中的link,就可以播放和下载了。
改用RestTemplate.execute
,它允许您附加一个ResponseExtractor
,您可以在其中访问response body
,其中一个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;
}
);
在 Java 中,String
与 byte[]
数组不同。
因此处理音频内容(这是二进制数据)
作为一个字符串(即文本数据)正在乞求问题。
相反,您应该将响应主体作为 byte[]
。
然后您可以将字节保存到文件中。
例如像这样:
ResponseEntity<byte[]> entity = restTemplate.getForEntity(url, byte[].class);
byte[] body = entity.getBody();
Path path = Paths.get("example.wav");
Files.write(path, body);
我使用spring RestTemplate调用Third-party服务,
ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
这样的结果:
forEntity status:200 headers: content-type=audio/wav body:"RIFFä,xxxxxxx ......"
响应是 enter image description here body好像是wav数据,我想把数据存成wav文件。
如果我直接进入chrome中的link,就可以播放和下载了。
改用RestTemplate.execute
,它允许您附加一个ResponseExtractor
,您可以在其中访问response body
,其中一个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;
}
);
在 Java 中,String
与 byte[]
数组不同。
因此处理音频内容(这是二进制数据)
作为一个字符串(即文本数据)正在乞求问题。
相反,您应该将响应主体作为 byte[]
。
然后您可以将字节保存到文件中。
例如像这样:
ResponseEntity<byte[]> entity = restTemplate.getForEntity(url, byte[].class);
byte[] body = entity.getBody();
Path path = Paths.get("example.wav");
Files.write(path, body);