Vue.js,下载后动态显示图片
Vue.js, show image dynamically after downloading it
我在 Vue.js / Node.js (express.js)
工作
并在通过 GET 请求(通过 Axios)从服务器下载图像后尝试显示图像。
该文件是由用户上传的,因此我们不知道它的详细信息(长度等)。
并且下载后需要给用户展示。
服务器收到下载请求后,简单地从磁盘中获取文件并将其放入响应中:
(req, res) => {
...
res.download(file)
}
到目前为止我在客户端做了这个,
下载文件后,我将其转换为 Base64 字符串:
Buffer.from(response.data, 'binary').toString('base64')
(GET 请求的响应)
并尝试像这样在我的模板上显示它:
:src="'data:image/png;base64,' + myBase64string"
而且一点都不成功!
非常感谢任何意见、建议、帮助等。
new Vue({
el: '#app',
data () {
return {
src: null
}
},
mounted () {
let self = this
fetch("https://thumbs.dreamstime.com/z/freely-accessible-examination-exposition-mosaic-ar-figures-mosaic-st-petersburg-russia-june-freely-accessible-119320551.jpg")
.then((response) => {
response.blob().then(blobResponse => {
let reader = new FileReader();
reader.readAsDataURL(blobResponse);
reader.onloadend = function() {
let base64data = reader.result;
let img = document.createElement('img')
img.src = base64data
self.$refs['img-container'].appendChild(img)
}
})
})
}
})
img {
height: 300px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div ref="img-container"></div>
</div>
在@Shivam Singh 和这个方便的 git 回购的大力帮助下
download-file.js,
我可以解决这个问题。
请求(Axios请求)的响应类型应该是
响应类型:'blob'
从服务器接收数据后,我简单地使用下面的这行代码生成一个 DOM 字符串,然后将其作为 src 放置到图像标签中:
const imageUrl = window.URL.createObjectURL(new Blob([response.data]))
<img :src="imageUrl ">
根据this link URL.createObjectURL方法,创建一个DOM字符串,其中包含一个URL表示参数中给定的对象。 URL 生命周期与创建它的 window 中的文档相关联。
我在 Vue.js / Node.js (express.js)
工作
并在通过 GET 请求(通过 Axios)从服务器下载图像后尝试显示图像。
该文件是由用户上传的,因此我们不知道它的详细信息(长度等)。
并且下载后需要给用户展示。
服务器收到下载请求后,简单地从磁盘中获取文件并将其放入响应中:
(req, res) => {
...
res.download(file)
}
到目前为止我在客户端做了这个,
下载文件后,我将其转换为 Base64 字符串:
Buffer.from(response.data, 'binary').toString('base64')
(GET 请求的响应)
并尝试像这样在我的模板上显示它:
:src="'data:image/png;base64,' + myBase64string"
而且一点都不成功!
非常感谢任何意见、建议、帮助等。
new Vue({
el: '#app',
data () {
return {
src: null
}
},
mounted () {
let self = this
fetch("https://thumbs.dreamstime.com/z/freely-accessible-examination-exposition-mosaic-ar-figures-mosaic-st-petersburg-russia-june-freely-accessible-119320551.jpg")
.then((response) => {
response.blob().then(blobResponse => {
let reader = new FileReader();
reader.readAsDataURL(blobResponse);
reader.onloadend = function() {
let base64data = reader.result;
let img = document.createElement('img')
img.src = base64data
self.$refs['img-container'].appendChild(img)
}
})
})
}
})
img {
height: 300px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div ref="img-container"></div>
</div>
在@Shivam Singh 和这个方便的 git 回购的大力帮助下
download-file.js,
我可以解决这个问题。
请求(Axios请求)的响应类型应该是
响应类型:'blob'
从服务器接收数据后,我简单地使用下面的这行代码生成一个 DOM 字符串,然后将其作为 src 放置到图像标签中:
const imageUrl = window.URL.createObjectURL(new Blob([response.data]))
<img :src="imageUrl ">
根据this link URL.createObjectURL方法,创建一个DOM字符串,其中包含一个URL表示参数中给定的对象。 URL 生命周期与创建它的 window 中的文档相关联。