segmentfault在这里发布问题的时候图片粘贴自动上传到官方服务器是怎么做到的?
求大神指点实现原理和js,谢谢!
我自己试过把图片转为base64的格式,但是会有跨域问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var img = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1504502384804&di=d324be6014719b796d7bbacbf1ef6a05&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimgad%2Fpic%2Fitem%2Fb7fd5266d0160924ddfdc911de0735fae7cd34db.jpg";
//var img = "https://127.0.0.1/base64/1.jpg";
function getBase64Image(img) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height);
var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase();
var dataURL = canvas.toDataURL("image/"+ext);
return dataURL;
}
var image = new Image();
image.crossOrigin = '*';
image.src = img;
image.onload = function(){
var base64 = getBase64Image(image);
console.log(base64);
}
</script>
</body>
</html>
paste
事件处理“粘贴”。事件
event
中,通过event.clipboardData.items
可以拿到内容。item
的getAsFile()
方法可以得到一个blob
对象。新浏览器,可以通过
FormData
直接处理这个blob
对象(直接以multipart
方式提交了)。大概的代码:
srv.upload
大概是: