单图上传预览

//html部分
<div class="">
    <label class="col-sm-2 control-label">活动图片</label>
    <div class="col-sm-9">
        <img  id="img0" style="width: 100px;height: 100px" src=""><input type="file" name="file" id="file0" /><span style='color:red' id="span_flie0"></span>
    </div>
</div>

//JS部分
<script>
    //jquery上传图片前预览
    $("#file0").change(function(){
        var objUrl = getObjectURL(this.files[0]) ;
        console.log("objUrl = "+objUrl) ;
        if (objUrl) {
            $("#img0").attr("src", objUrl) ;
        }
    }) ;
    //建立一個可存取到該fileurl
    function getObjectURL(file) {
        var url = null ;
        if (window.createObjectURL!=undefined) { // basic
            url = window.createObjectURL(file) ;
        } else if (window.URL!=undefined) { // mozilla(firefox)
            url = window.URL.createObjectURL(file) ;
        } else if (window.webkitURL!=undefined) { // webkit or chrome
            url = window.webkitURL.createObjectURL(file) ;
        }
        return url ;
    }
</script>
<think>嗯,用户想用element-ui实现上传和实时预览。首先,我得回忆一下element-ui的组件。记得Upload组件可以处理文件上传,但预览可能需要配合其他组件。 用户提到的是片,所以可能需要限制上传数量为1,并且在上传后替换旧片。需要设置action属性,指向后端的接口地址。不过如果是测试,可能先设为"#",暂时不处理上传逻辑。 然后是预览部分。用户上传片后,需要立即显示预览。可以用el-image组件来展示片,结合缩略功能。可能需要用到file-list属性来获取上传的文件列表,然后提取URL。 另外,用户可能需要点击片放大查看。记得element-ui的el-image-viewer可以实现预览,但官方文档中好像没有直接导出这个组件,可能需要按需引入。比如使用import('element-ui/packages/image/src/image-viewer')来动态加载。 还需要处理删除功能,当用户点击删除标时,清空已上传片。可能需要监听on-remove事件,并更新fileList为空数组。 要注意的是,上传前可能需要校验文件类型,比如只允许jpg、png等片格式。可以用before-upload钩子函数,检查文件类型,并给出提示。 另外,样式方面,可能需要调整上传按钮和预览片的布局,使用flex布局让它们水平排列。限制上传组件的显示方式为片卡片,并隐藏文件列表,通过自定义的缩略来展示。 可能遇到的问题包括:预览不显示,可能是因为file-list中的url没有正确生成。需要使用URL.createObjectURL方法来创建本地预览链接。同时,记得在组件销毁时释放这些URL,避免内存泄漏。 还有,用户可能希望在上传后,后端返回的片地址也能显示出来,这时候可能需要在上传成功的回调中更新fileList,但如果是片,可能需要替换现有的文件。 总之,步骤大概是:配置el-upload组件,处理上传前后的钩子,生成预览URL,使用el-image显示片,并集成el-image-viewer实现点击放大。同时处理删除和文件类型校验。</think>根据Element-UI组件库特性,实现单图上传预览功能可按照以下步骤进行: ### 一、基础组件配置 ```html <el-upload action="#" list-type="picture-card" :show-file-list="false" :on-success="handleSuccess" :before-upload="beforeUpload"> <img v-if="imageUrl" :src="imageUrl" class="preview-image"> <i v-else class="el-icon-plus"></i> </el-upload> ``` ### 二、关键参数说明 1. `list-type="picture-card"` 设置卡片式上传样式 2. `:show-file-list="false"` 隐藏默认文件列表 3. 使用`imageUrl`变量存储Base64格式的预览 ### 三、核心方法实现 ```javascript data() { return { imageUrl: '' } }, methods: { beforeUpload(file) { const isImage = /^image\/(jpeg|png|gif|webp)$/.test(file.type) if (!isImage) { this.$message.error('仅支持JPG/PNG/GIF格式') } return isImage }, handleSuccess(res, file) { this.imageUrl = URL.createObjectURL(file.raw) }, // 预览方法(需在components中注册el-image-viewer) handlePreview() { this.$refs.previewDialog.show() } } ``` ### 四、片放大功能 添加预览对话框组件: ```html <el-dialog :visible.sync="previewVisible" width="60%"> <el-image-viewer v-if="previewVisible" :url-list="[imageUrl]" @close="previewVisible = false"/> </el-dialog> ``` ### 五、样式优化建议 ```css .preview-image { width: 148px; height: 148px; object-fit: contain; } .el-upload--picture-card { border: 1px dashed #d9d9d9; display: inline-flex; align-items: center; } ``` ### 六、注意事项 1. 生产环境需替换`action`为真实上传接口 2. 使用`URL.revokeObjectURL()`释放内存[^2] 3. 可添加`on-exceed`处理多文件限制[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值