vue element-ui 压缩图片上传

2020-05-11  本文已影响0人  嫑着急
<template>
    <div>
        <el-upload class="upload-demo" :multiple="true" action="https://neibu.qk*****.com"
         :http-request="handlePost" accept="bmg,.png,.jpg,.jpeg" :before-upload="beforeAvatarUpload" :on-success="handleSuccess"
         :on-error="hanldeError" multiple :limit="20">
            <el-button size="small" type="primary">添加图片</el-button>
        </el-upload>
    </div>
</template>
<script>
    //  npm i image-conversion --save

    import {compress,compressAccurately} from "image-conversion";
    export default {
        data() {
            return {

            }
        },
        methods: {
            handlePost(f) {
                var me = this;
                let fd = new FormData()
                fd.append('file', f.file)
                me.$axios.post(this.$url+"/file/uploadimg", fd)
                    .then(function(result) {
                        console.log(result)
                        if (result.data.result == true) {
                            me.$message({
                                message: '上传成功',
                                type: 'success'
                            })
                            // me.userhead = result.data.pojo;
                            // me.imageUrl = "https://neibu.qklshequ.com/bbs" + result.data.pojo;
                        }
                        if (result.data.result == false) {
                            me.$message({
                                message: '上传失败',
                                type: 'error'
                            })
                        }
                    })
            },
            handleSuccess(res, file) {
                console.log(res)
                // 服务器返回结果处理
            },
            hanldeError(res, file) {
                console.log(res)
                // 服务器返回结果处理
            },
            beforeAvatarUpload(file) {
                // console.log(file)
                let isLt2M2 = file.size / 1024 / 1024 < 1
                // console.log(isLt2M2)
                if (!isLt2M2) {
                    this.$message.error('上传头像图片大小不能超过 1MB!');
                    return false
                }else{
                    return new Promise((resolve, reject) => {
                        let _URL = window.URL || window.webkitURL
                        let isLt2M = file.size / 1024 < 50 //                       
                        let img = new Image()
                        img.onload = function() {
                            file.width = img.width
                            file.height = img.height
                            let valid = img.width > 1800
                            if (valid || isLt2M) {
                                compressAccurately(file, {
                                    size: 50,
                                    width: 1800
                                }).then(res => {
                                    resolve(res)
                                })
                            } else resolve(file)
                        }
                        img.src = _URL.createObjectURL(file)
                    })
                }

            }
        }

    }
</script>
<style scoped>

</style>

上一篇下一篇

猜你喜欢

热点阅读