概述
需求:因为公司图片上传接口和手机客户端上传接口用的是同一个,所以前端要和手机端一样使用二进制的方式进行图片上传。在进行二进制图片上传的时候遇到了几个坑:
第一个是如果后台定义的请求类型是contentType:application/octet-stream的二进制类型就不能用jquery封装的ajax进行请求,否则会报错,建议用原生ajax请求。
第二个是你需要用法哦两个H5的方法readAsArrayBuffer和Blob,前者是将文件读取并缓存至二进制的缓存区后者是将文件读取并存放至Blob对象中且必须以数组的形式。
代码:
$('body').on('change', '#uploadImg', function () {//上传图片
let file = this.files[0];
let reader = new FileReader();
reader.readAsArrayBuffer(file);//安字节读取文件并存储至二进制缓存区
reader.onload = function (e) {
let result = e.target.result;
// let blob = new Blob([result]);//存储二进制数据
// let url = URL.createObjectURL(blob);//生成本地图片地址用于图片预览
let request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState === 4) {
if (request.status === 200) {
parent.modal.operModal({
info: '成功',
className: 'H5Product'
})
$('.imgWrap').attr('data-url', address);
$('.imgWrap').html(`<img src="${address}">`);
} else {
parent.modal.operModal({
info: '失败',
className: 'H5Product'
})
}
} else {
console.log('others')
}
}
request.open('PUT', host);//host是阿里云返回的图片存储地址,即你要请求的地址
request.setRequestHeader('Content-Type', 'application/octet-stream');
request.send(result);
}
})
另外,这是我的微信:ChenYuJ,前端新人一枚,希望有些共同前进的朋友。
最后
以上就是清爽小猫咪为你收集整理的js上传二进制图片的全部内容,希望文章能够帮你解决js上传二进制图片所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复