// java
// 返回体是ResponseEntity<ByteArrayResource>
Path pathFile = Paths.get(path); // path为视频文件
byte[] data = Files.readAllBytes(pathFile);
ByteArrayResource resource = new ByteArrayResource(data);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName);
return ResponseEntity.ok()
.headers(headers)
.contentLength(data.length)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
// 前端(模拟ajax请求,关键就是获取请求体,如果不是bolb对象要转成bolb对象,再用URL.createObjectURL生成url)
videoReady(url) {
let xhr = new XMLHttpRequest();
xhr.open('GET',url, true);
xhr.setRequestHeader('Accept', 'application/octet-stream');
xhr.setRequestHeader('token', author.token);
xhr.responseType = 'blob';
xhr.onload = function() {
if (this.status == 200) {
const blob = this.response;
let url = URL.createObjectURL(blob); //基于Blob对象生成一个URL
let videoElement = document.getElementById('myVideo');
videoElement.src = url;
} else {
console.error('文件出错');
}
};
xhr.onerror = function() {
console.error('请求出错!');
};
xhr.send();
}
// 组件被销毁后
beforeDestroy() {
URL.revokeObjectURL(url)
}