JavaScript JS 图片转MD5 Img转MD5 文件转MD5 URL文件转MD5 获取原始文件的MD5

首先引入JS文件: 

<script src="https://cdn.jsdelivr.net/npm/spark-md5@3.0.0/spark-md5.min.js"></script>

测试代码:

<script>
    !function () {
        var xhr = new XMLHttpRequest();
        // 也可以使用POST方式,根据接口,测试的图片是百度搜索首页的logo(2019-11-28 17:35)
        xhr.open('GET', 'http://127.0.0.1:8080/bd_logo1.png', true);    
        xhr.responseType = "blob";  // 返回类型blob
        xhr.onload = function () {
            if (this.status === 200) {
                // 获得二进制
                var blob = this.response;
                var reader = new FileReader();
                reader.onload = function (e) {
                    var spark = new SparkMD5.ArrayBuffer()
                    spark.append(e.target.result)
                    console.log("md5:",spark.end())
                }
                //转换成FileReader对象
                reader.readAsArrayBuffer(blob);
            }
        }
        xhr.send();
    }();
</script>

控制台输出:

windows输出:

 

通过这种方式获取的文件MD5是真正的MD5!那种经过canvas转来转去生成的MD5早已经不是原来的MD5了。

当然也可以通过这种方式获得本地文件的md5,具体可参考:https://www.cnblogs.com/jianqingwang/p/6999356.html,当我们看完这篇文章即可把file转成FileReader然后再转换成md5。

注意:通过网络下载(ajax)的文件必须和自己在一个域下否则会报跨域错误(通过设置Access-Control-Allow-Origin可以解决),具体可看控制台

<think>好的,我现在需要帮助用户解决在md-editor-v3中实现点击预览图片的功能。首先,我得回忆一下这个编辑器的相关文档和API。用户提供的引用中提到了md-editor-v3是一个基于Vue3的Markdown编辑器,支持实时预览和图片上传等功能。根据这些信息,我需要确定如何扩展它的功能来实现图片预览。 首先,用户的问题是关于点击预览已插入的图片。默认情况下,Markdown渲染的图片可能只是显示,但点击后不会有放大或预览的效果。所以,需要添加一个事件处理,当用户点击图片时触发预览。 接下来,我需要考虑如何在这个编辑器中捕获图片的点击事件。通常,在Vue组件中,可以通过使用插槽或者自定义渲染来处理。md-editor-v3可能提供了自定义渲染的选项,比如通过`renderer`属性来覆盖默认的渲染方法。例如,可以重写图片的渲染逻辑,在`img`标签上添加点击事件。 然后,当用户点击图片时,需要弹出一个对话框或者使用现有的UI库来展示大图。这里可能需要引入一个图片预览组件,比如使用Element UI的ElImageViewer或者其他第三方库。同时,需要处理图片URL,确保点击的图片地址正确。 另外,还需要考虑图片上传后的路径问题。如果用户上传的图片是相对路径或者需要换,可能需要调整URL的处理方式,确保预览时能正确加载图片。 可能的步骤包括: 1. 使用md-editor-v3的自定义渲染功能,重写图片的渲染方法,添加点击事件。 2. 在点击事件中,收集所有图片URL,并记录当前点击的索引,以便在预览组件中显示正确的图片。 3. 引入一个图片预览组件,当点击时显示该组件,并允许用户切换图片。 4. 处理动态加载的图片,确保在编辑器内容变化时,预览功能仍然有效。 还需要查看官方文档或示例,确认是否有相关的API支持。例如,是否有`renderer`属性允许自定义节点渲染。如果有,那么在渲染图片时,可以返回一个带有点击事件的VNode。 另外,可能需要注意事件冒泡和默认行为,避免影响编辑器的其他功能。例如,阻止图片的默认点击行为,只触发预览。 最后,测试实现的代码,确保在编辑和预览模式下都能正常工作,并且图片上传后也能正确触发预览。</think>### 如何在md-editor-v3中实现点击预览图片功能 #### 实现步骤 1. **绑定图片点击事件** 通过自定义`renderer`覆盖默认的图片渲染逻辑,为`<img>`标签添加点击事件: ```vue <template> <md-editor :renderer="customRenderer" @onImageClick="handlePreview" /> </template> ``` 2. **自定义渲染器配置** 在`customRenderer`中重写图片渲染逻辑,添加`class`标记和数据属性: ```javascript const customRenderer = { img: (src, alt, title) => { return `<img class="previewable-image" src="${src}" data-src="${src}" style="cursor: pointer" />`; } }; ``` 3. **实现预览弹窗** 使用`ElImageViewer`组件(Element Plus)实现大图预览: ```vue <el-image-viewer v-if="showPreview" :url-list="previewImages" :initial-index="previewIndex" @close="showPreview = false" /> ``` 4. **事件处理函数** 通过事件委托捕获图片点击事件并提取图片数据: ```javascript const handlePreview = (e) => { const imgs = document.querySelectorAll('.previewable-image'); const index = Array.from(imgs).findIndex(item => item === e.target); if (index > -1) { previewImages.value = Array.from(imgs).map(img => img.dataset.src); previewIndex.value = index; showPreview.value = true; } }; ``` #### 完整示例代码 ```vue <script setup> import { ref } from 'vue'; import { MdEditor } from 'md-editor-v3'; import 'md-editor-v3/lib/style.css'; import { ElImageViewer } from 'element-plus'; const showPreview = ref(false); const previewImages = ref([]); const previewIndex = ref(0); const customRenderer = { img: (src, alt, title) => { return `<img class="previewable-image" src="${src}" data-src="${src}" style="cursor: pointer;max-width: 100%" />`; } }; const handlePreview = (e) => { const imgs = document.querySelectorAll('.previewable-image'); const index = Array.from(imgs).findIndex(item => item === e.target); if (index > -1) { previewImages.value = Array.from(imgs).map(img => img.dataset.src); previewIndex.value = index; showPreview.value = true; } }; </script> <template> <div class="editor-container"> <md-editor v-model="text" :renderer="customRenderer" @onImageClick="handlePreview" /> <el-image-viewer v-if="showPreview" :url-list="previewImages" :initial-index="previewIndex" @close="showPreview = false" /> </div> </template> ``` #### 关键配置说明 1. **图片路径处理** 使用`data-src`存储原始地址,避免压缩/裁剪后的路径影响预览质量[^4] 2. **性能优化** 通过事件委托机制避免为每张图片单独绑定事件,适合动态内容场景[^2] 3. **样式穿透** 添加`<style scoped>`可覆盖编辑器默认图片样式: ```css :deep(.previewable-image) { transition: transform 0.3s; } :deep(.previewable-image:hover) { transform: scale(1.02); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值