使用Layui上传图片,并进行压缩(非原创,证实可用)
这边是html
<div class="popBox pop_m"><span class="closePopBt">关闭</span>
<div class="hr20"></div>
<form class="layui-form" action="">
<a href="javascript:void(0)" class="aLine margin_r15 uploadpic_btn">图片</a>
<div class="upload_piclist"> </div>
</div>
<div class="popBottomBt"> <a href="javascript:void(0)" class="button send_smit">发送</a> </div>
</form>
</div>
贴上我自己的代码
<script>
function canvasDataURL(file, callback) { //压缩转化为base64
var reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = function (e) {
const img = new Image()
const quality = 0.5 // 图像质量
const canvas = document.createElement('canvas')
const drawer = canvas.getContext('2d')
img.src = this.result
img.onload = function () {
canvas.width = img.width
canvas.height = img.height
drawer.drawImage(img, 0, 0, canvas.width, canvas.height)
convertBase64UrlToBlob(canvas.toDataURL(file.type, quality), callback);
}
}
}
function convertBase64UrlToBlob(urlData, callback) { //将base64转化为文件格式
const arr = urlData.split(',')
const mime = arr[0].match(/:(.*?);/)[1]
const bstr = atob(arr[1])
let n = bstr.length
const u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
callback(new Blob([u8arr], {
type: mime
}));
}
layui.use(['layer','upload'],function() {
var form = layui.form
,upload = layui.upload;
$(".closePopBt").on("click", function(){
var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
parent.layer.close(index); //再执行关闭
});
//多图片上传
var upload = layui.upload;
upload.render({
elem: '.uploadpic_btn',
url: '/workflow/comment/upload',
accept: 'images', //只允许传图片
// size: 10240, //限制文件大小,单位 KB
multiple: true,
auto:false,
choose:function(obj){
var files = obj.pushFile();
var filesArry = [];
for (var key in files) { //将上传的文件转为数组形式
filesArry.push(files[key])
}
var index = filesArry.length - 1;
var file = filesArry[index]; //获取最后选择的图片,即处理多选情况
if (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion.split(";")[1]
.replace(/[ ]/g, "").replace("MSIE", "")) < 9) {
return obj.upload(index, file)
}
canvasDataURL(file, function (blob) {
var aafile = new File([blob], file.name, {
type: file.type
})
var isLt1M;
if (file.size < aafile.size) {
isLt1M = file.size
} else {
isLt1M = aafile.size
}
if (isLt1M / 1024 / 1024 > 2) {
return layer.alert('图片压缩之后还是大于2M,请压缩之后上传!');
} else {
if (file.size < aafile.size) {
return obj.upload(index, file)
}
obj.upload(index, aafile)
}
})
},
before: function(obj) {
//预读本地文件示例,不支持ie8
// obj.preview(function(index, file, result) {
//
// });
},
done: function(res) {
//上传完毕
$('.upload_piclist').append('<div class="uploadpic"><div class="pic"><img src="' + res.info.path_url + '" alt="' + res.info.title + '" class="layui-upload-img"></div><span attr_old_name='+res.info.title+' attr_new_name='+res.info.new_name+' path='+res.info.path+' class="delpic_bt"></span></div>')
}
});
浙公网安备 33010602011771号