ajax multer传递含图片的数据,multer+Ajax(es6版)实现免跳转上传图片

//index.js

let image = document.getElementsByTagName('img')[0];

let progress = document.getElementById('progress');

let file = document.getElementById('photo');

file.addEventListener('change', function (event) {

let upfile = this.files;

if (upfile.length == 0) {

return;

}

uploadFile(upfile[0]);

readAsDataURL(upfile[0], image);

}, false)//文件change事件自动上传文件

function readAsDataURL(file, image) {//前台预览

let reader = new FileReader();

reader.readAsDataURL(file);

reader.onload = function (e) {

image.src = this.result;

}

image.style.display = 'block';

}

function uploadFile(file) {//Ajax发送图片

let formData = new FormData();

formData.append('image', file);//注意这里和后端的multer的array参数相匹配, 否则后台读不到读片信息

console.log(formData.get('image'))

Ajax('POST', '/file_upload', formData, progress).then(function (data) {

console.log(`success: ${data}`);

}, function (data) {

console.log(`fail: ${data}`);

})

}

function Ajax(method, url, data, progress = null) {

return new Promise(function (resolve, reject) {

let xhr = new XMLHttpRequest();

xhr.onreadystatechange = function () {

if (xhr.readyState === 4) {

try {//设置了超时时间, 防止由于该条件(即readystate等于4)成立, 进入该判断块, 下面的status读取不到, 导致抛出错误

if (xhr.status >= 200 || xhr.status < 300 || xhr.status == 304) {

resolve(xhr.responseText);

} else {

reject(new Error(xhr.statusText));

}

} catch (error) {

reject(new Error('Time out!'));

}

}

}

if (progress !== null) {//进度条

xhr.upload.onprogress = function (event) {

progress.innerText = `uploaded ${event.loaded} of ${event.total} bytes. percent ${Math.floor(event.loaded / event.total * 100)}%`

}

}

xhr.timeout = 7000;//超时7秒

xhr.ontimeout = function () {

alert('time out!');

}

method = method.toUpperCase();

if (method == 'GET') {

xhr.open("GET", url);

xhr.send();

} else if (method == 'POST') {

xhr.open("POST", url, true);

//xhr.setRequestHeader('Content-Type', 'multipart/form-data');//这里不必设置了, 因为前面使用了FormData

xhr.send(data);

} else {

reject(new Error('method error'));

}

})

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值