我的是Java后臺(tái)返回的小程序鏈接在瀏覽器里可以播放,但是和其他MP3鏈接播放界面不太一樣,顯示的是一個(gè)直播,且訪問鏈接返回的Transfer-Encoding= chunked,這樣是不行的,正確的在Java后臺(tái)代碼里設(shè)置方法:
設(shè)置關(guān)鍵:response.setContentLengthLong(file.length()); // ?? 關(guān)鍵:設(shè)置 Content-Length
//讀取文件
@GetMapping("/getAudioFile/{id:.+}")
private String getFile(@PathVariable String id, HttpServletRequest request, HttpServletResponse response) throws Exception {
ServletOutputStream out = null;
FileInputStream ips = null;
String path = (new File(request.getServletContext().getRealPath("/"))).getParent() + "/upload" + request.getContextPath() + "/" + "audioFile" + "/" + id;
File file = new File(path);
if (file.exists()) {
try {
//獲取存放路徑
ips = new FileInputStream(new File(path));
response.setContentType(String.valueOf(MediaType.parseMediaType("audio/mpeg")));//可以在瀏覽器直接播放
response.setContentLengthLong(file.length()); // ?? 關(guān)鍵:設(shè)置 Content-Length
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "inline");// inline 表示內(nèi)聯(lián)顯示,可以在瀏覽器直接播放
// 可選:支持緩存或調(diào)試
response.setHeader("Accept-Ranges", "bytes"); // 明確告知支持 Range 請(qǐng)求
out = response.getOutputStream();
//讀取文件流
int len = 0;
byte[] buffer = new byte[1024 * 10];
while ((len = ips.read(buffer)) != -1){
out.write(buffer,0,len);
}
out.flush();
} catch (Exception e){
e.printStackTrace();
} finally {
if (out != null) {
out.close();
ips.close();
}
}
return "1";
} else {
System.out.println("文件不存在");
return "0";
}
}