zoukankan      html  css  js  c++  java
  • vue图片上传---融合裁剪功能

    <template>
    <div class="emCropper-container">
    <el-upload
    class="upload-demo"
    :action="action"
    drag
    :headers="headers"
    name="files"
    :file-list="fileList"
    :auto-upload="false"
    :show-file-list="true"
    :on-change="changeUpload"
    >
    <i class="el-icon-upload" />
    <div class="el-upload__text">点击上传</div>
    <div class="el-upload__tip">支持绝大多数图片格式,单张图片最大支持5MB</div>
    </el-upload>
    <el-dialog title="图片剪裁" :visible.sync="dialogVisible" append-to-body>
    <div class="cropper-content">
    <div class="cropper" style="text-align:center">
    <vueCropper
    ref="cropper"
    :img="option.img"
    :output-size="option.size"
    :output-type="option.outputType"
    :info="true"
    :full="option.full"
    :can-move="option.canMove"
    :can-move-box="option.canMoveBox"
    :original="option.original"
    :auto-crop="option.autoCrop"
    :fixed="option.fixed"
    :fixed-number="option.fixedNumber"
    :center-box="option.centerBox"
    :info-true="option.infoTrue"
    :fixed-box="option.fixedBox"
    />
    </div>
    </div>
    <div slot="footer" class="dialog-footer">
    <el-button @click="dialogVisible = false">取 消</el-button>
    <el-button type="primary" :loading="loading" @click="onsubmit">确认上传</el-button>
    </div>
    </el-dialog>
    </div>
    </template>
    <script>
    import { client } from '@/api/schoolService/tableInfo'
    import { emMixin } from '@/utils/mixins'
    import { dataInitFn, childrenInitFn } from '@/utils/tool'
    import vueBus from '@/utils/vueBus'
    export default {
    name: 'EmCropper',
    mixins: [emMixin],
    data() {
    return {
    fileList: [],
    dialogVisible: false,
    // 裁剪组件的基础配置option
    set: {
    uploadUrl: ''
    },
    option: {
    canMove: true,
    img: '', // 裁剪图片的地址
    info: true, // 裁剪框的大小信息
    outputSize: 0.8, // 裁剪生成图片的质量
    outputType: 'jpeg', // 裁剪生成图片的格式
    canScale: false, // 图片是否允许滚轮缩放
    autoCrop: true, // 是否默认生成截图框
    autoCropWidth: '', // 默认生成截图框宽度
    autoCropHeight: '', // 默认生成截图框高度
    fixedBox: false, // 固定截图框大小 不允许改变
    fixed: true, // 是否开启截图框宽高固定比例
    fixedNumber: [16, 9], // 截图框的宽高比例
    full: true, // 是否输出原图比例的截图
    canMoveBox: true, // 截图框能否拖动
    original: false, // 上传图片按照原始比例渲染
    centerBox: true, // 截图框是否被限制在图片里面
    infoTrue: true // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
    },
    headers: {
    'Content-Type': 'multipart/form-data'
    },
    action: '', // action赋默认值即可
    fileinfo: {},
    uploadFile: [], // 页面显示的数组
    // 防止重复提交
    loading: false,
    previews: {}
    }
    },
    created() {
    this.init()
    },
    methods: {
    init() {
    this.set = dataInitFn(this.set, this.meta)
    this.children = childrenInitFn(this.children, this.componentData)
    },
    // 上传按钮 限制图片大小
    changeUpload(files, fileList, num) {
    const isLt5M = files.size / 1024 / 1024 < 5
    if (!isLt5M) {
    this.$message.error('上传文件大小不能超过 5MB!')
    return false
    }
    // 上传成功后将图片地址赋值给裁剪框显示图片
    this.$nextTick(() => {
    this.option.img = URL.createObjectURL(files.raw)
    this.dialogVisible = true
    })
    },
    // 点击裁剪,这一步是可以拿到处理后的地址
    onsubmit() {
    this.$refs.cropper.getCropBlob((data) => {
    /* this.loading = true*/ // 点击上传按钮时不加载了
    const formData = new FormData()
    formData.append('files', data)
    // 上传阿里云服务器
    process.env.VUE_APP_BASE_API: 后台服务基础地址
    this.set.uploadUrl: 图片上传地址
            client({
    url: process.env.VUE_APP_BASE_API + this.set.uploadUrl,
    params: formData
    }).then(result => {
    if (result.statusCode === 200 && result.data !== '') {
    this.$notify({
    message: 'banner图片上传成功',
    type: 'success'
    })
    vueBus.$emit('getBanner')
    this.dialogVisible = false
    }
    }).catch(err => {
    console.log(err)
    this.loading = false
    })
    })
    }
    }
    }
    </script>
    <style lang="scss" scoped>
    @import "emCropper";
    </style>
    没有人能一路单纯到底,但是要记住,别忘了最初的自己!
  • 相关阅读:
    POJ_3176_Cow_Bowling_(数字三角形)_(动态规划)
    POJ_3662_Telephone_Lines_(二分+最短路)
    POJ_2739_Sum_of_Consecutive_Prime_Numbers_(尺取法+素数表)
    POJ_3685_Matrix_(二分,查找第k大的值)
    POJ_3579_Median_(二分,查找第k大的值)
    欧拉回路
    状态压缩dp(hdu2167,poj2411)
    poj1182食物链(种类并查集)
    并查集
    树形动态规划
  • 原文地址:https://www.cnblogs.com/LindaBlog/p/12212892.html
Copyright © 2011-2022 走看看