欢迎光临
我们一直在努力

文件拖拽上传的原理

拖拽主要用到两个事件 dragover drop

// box为被拖放的区域
box.addEventListener('dragover', function (e) {
  e.preventDefault(); // 必须阻止默认事件
}, flase);

box.addEventListener('drop', function (e) {
  e.preventDefault(); // 阻止默认事件
  var file = e.dataTransfer.files[0]; //获取文件
  // code
}, false);

预览,主要是文件转换为base64,或者blob,或者canvas

file -> base64

// file为前面获得的
var reader = new FileReader();
reader.onload = function(e) {
  var img = new Image;
  img.src = this.result;  // this.result 为base64
  // 加到dom
};
reader.readAsDataURL(file);

file -> blob

// file为前面获得的
var url = window.URL.createObjectURL(file);
var img = new Image;
img.src = url;
// 加到dom

上传 需要用到FormData模拟表单数据 或直接form上传

不做处理直接ajax上传

var xhr = new XMLHttpRequest,
    fd = new FormData;

xhr.open('POST', 'url', true);  // 'url'
//可以通过progress事件监听上传进度
xhr.onload = function() {
  // 上传完成
}
// 
fd.append('file', file); // 'file'
xhr.send(fd);

如果图片上传前要修改,如对图片进行裁剪,旋转等操作(前端),一般是转化为canvas处理。
随后根据后台可能把canvas转成base64字符串上传或转成blob对象上传,SF上有就不具体写了,可参考:http://segmentfault.com/a/1190000000754560

赞(0)
版权归原作者所有,如有侵权请告知。达维营-前端网 » 文件拖拽上传的原理

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址