在使用ant-design-vue的upload组件时,无法显示加密图片,经过测试,凡是带参数的图片地址都无法显示缩略图。
base64
这个组件是基于ant-design改写的,在issues中发现了解决办法 #10102
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
export const base64Url = function (url) { let xhr = new XMLHttpRequest() xhr.onload = function () { let reader = new FileReader() reader.onloadend = function () { self.postMessage(reader.result) } reader.readAsDataURL(xhr.response) } xhr.open('GET', url) xhr.responseType = 'blob' xhr.send() }
|
通过ajax
获取图片,并将图片转为base64
。
Web Worker
但是由于我开发的业务页面中有大量图片,如果每个图片都这样操作,页面会有些卡顿。所以需要进行优化。
我选择使用Web Worker
,关于Web Worker
可以查看阮一峰老师的文章:
创建一个生成Web Worker
的函数:
1 2 3 4 5 6 7 8 9 10 11
|
export const createWorker = (f, args) => { var blob = new Blob(['(' + f.toString() + ')("' + args + '")']) var url = window.URL.createObjectURL(blob) var worker = new Worker(url) return worker }
|
调用
1 2 3 4 5 6
| let myWorker = createWorker(base64Url, url)
myWorker.onmessage = (data) => { console.log(data.data) myWorker.terminate() }
|