如何使用html5 canvas畫布對本地視訊進行截圖並上傳至伺服器
阿新 • • 發佈:2019-01-02
前端程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>截圖系統</title>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv=”X-UA-Compatible” content=”IE=edge,chrome=1″/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
</head>
<body style="width: 100%;height: 100%">
<div align="center">
<video style="width: 1920px;height: 1080px" id="video" controls>Your browser can't support HTML5 Audio</video >
<p><input type="file" id="file" onchange="onInputFileChange()"><input class="cut" type="button" value="截圖" id="buttons_cut" onclick="cut()"></p>
<canvas id="canvas"></canvas>
</div>
<script>
// 開啟本地視訊
function onInputFileChange() {
var file = document.getElementById('file').files[0];
var url = URL.createObjectURL(file);
console.log(url);
document.getElementById("video").src = url;
}
// 使用canvas對視訊進行截圖
function cut(){
var canvas = document.getElementById('canvas');
var video = document.getElementById('video');
console.log('視訊尺寸:'+video.style.width+'*'+video.style.height);
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
console.log(canvas.width);
console.log(canvas.height);
var ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0,1920,1080);
var base64 = canvas.toDataURL('images/png');
upload(base64);
}
// 上傳圖片
function upload(image) {
var imgFile=dataURLtoFile(image,"img.png");
var xhr=new XMLHttpRequest();
var fd=new FormData();
xhr.open('POST','/springStudy/user/multifiles');
fd.append("multipartFile",imgFile);
xhr.send(fd);
console.log('上傳json!')
}
//將圖片Base64 轉成檔案
function dataURLtoFile(dataurl, filename) {
console.log("轉檔案")
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, {type:mime});
}
</script>
</body>
</html>
spring mvc後端程式碼:
@RequestMapping(value = "/multifiles")
public void receivefiles(HttpServletRequest request, HttpServletResponse response, @ModelAttribute UploadFile uploadFile){
System.out.println("收到請求");
MultipartFile multipartFile=uploadFile.getMultipartFile();
String filename=multipartFile.getOriginalFilename();
try{
System.out.println(request.getServletContext().getRealPath("/image"));
// path="G:tomcatupload"
File file=new File(path,String.valueOf(System.currentTimeMillis())+filename);
if(!file.exists()){
}
multipartFile.transferTo(file);
}catch (IOException e){
e.printStackTrace();
}
}