在浏览器中显示图像
Display image in browser
因此,我正在尝试在其他人已创建的数据库中显示保存在 MSSQL 中的图像。
本来这个列是IMAGE类型的,用Sequelize我转成了varbinary(MAX)。是的,我丢失了数据,但它仅用于测试
然后我再次插入图像并尝试在我的 fotos.handlebars 上显示它。
这就是结果:
printResult.png
有什么方法可以让图像代替这些字符出现吗?
我的代码:
型号Fotos.JS:
const db = require('./db')
const Fotos = db.sequelize.define('Fotos', {
COD_PESSOA:{
type: db.Sequelize.INTEGER
},
Sequencia:{
type: db.Sequelize.INTEGER
},
Foto:{
type: db.Sequelize.BLOB
},
Padrao:{
type: db.Sequelize.INTEGER
}
}, {
timestamps: false
})
module.exports = Fotos
//Fotos.sync({force: true})
fotos.handlebars:
<h1>Fotos:</h1>
{{#each fotos}}
<h2>{{dataValues.Foto}}</h2>
<hr>
{{/each}}
app.js:
const express = require('express')
const app = express()
const handlebars = require('express-handlebars')
const bodyParser = require('body-parser')
const Fotos = require('./models/Fotos')
//template engine
app.engine('handlebars', handlebars({defaultLayout: 'main'}))
app.set('view engine', 'handlebars')
//body-parser
app.use(bodyParser.urlencoded({extended: false}))
app.use(bodyParser.json())
//Rotas
app.use('/fotos', (req, res)=>{
//res.send('teste rota')
Fotos.findAll().then((fotos)=>{
res.render('fotos', {fotos: fotos})
}).catch((erro)=>{
res.send(erro)
})
})
app.listen(8081, ()=>{
console.log('Servidor Rodando')
})
您是否尝试过将 blob 作为图像的 src
?在代码中,您将它放在文本 h2
中,因此它将打印 blob 文本,因为它是二进制的,看起来像乱码。
const urlCreator = window.URL || window.webkitURL;
const imageUrl = urlCreator.createObjectURL(dataValues.Foto);
const image = new Image();
image.addEventListener("onload", () => {
//append the image in your body page
}
image.src = imageUrl;
尝试类似的东西
编辑:
您可以使用 handlebars 助手将 blob 转换为 URL
Handlebars.registerHelper('blobToUrl', function(blob) {
var urlCreator = window.URL || window.webkitULR;
var imageUrl = urlCreator.createObjectURL(blob);
return imageUrl;
});
然后这样做
<h1>Fotos:</h1>
{{#each fotos}}
<img src="{{blobToUrl dataValues.Foto}}"></img>
<hr>
{{/each}}
因此,我正在尝试在其他人已创建的数据库中显示保存在 MSSQL 中的图像。
本来这个列是IMAGE类型的,用Sequelize我转成了varbinary(MAX)。是的,我丢失了数据,但它仅用于测试
然后我再次插入图像并尝试在我的 fotos.handlebars 上显示它。
这就是结果:
printResult.png
有什么方法可以让图像代替这些字符出现吗?
我的代码:
型号Fotos.JS:
const db = require('./db')
const Fotos = db.sequelize.define('Fotos', {
COD_PESSOA:{
type: db.Sequelize.INTEGER
},
Sequencia:{
type: db.Sequelize.INTEGER
},
Foto:{
type: db.Sequelize.BLOB
},
Padrao:{
type: db.Sequelize.INTEGER
}
}, {
timestamps: false
})
module.exports = Fotos
//Fotos.sync({force: true})
fotos.handlebars:
<h1>Fotos:</h1>
{{#each fotos}}
<h2>{{dataValues.Foto}}</h2>
<hr>
{{/each}}
app.js:
const express = require('express')
const app = express()
const handlebars = require('express-handlebars')
const bodyParser = require('body-parser')
const Fotos = require('./models/Fotos')
//template engine
app.engine('handlebars', handlebars({defaultLayout: 'main'}))
app.set('view engine', 'handlebars')
//body-parser
app.use(bodyParser.urlencoded({extended: false}))
app.use(bodyParser.json())
//Rotas
app.use('/fotos', (req, res)=>{
//res.send('teste rota')
Fotos.findAll().then((fotos)=>{
res.render('fotos', {fotos: fotos})
}).catch((erro)=>{
res.send(erro)
})
})
app.listen(8081, ()=>{
console.log('Servidor Rodando')
})
您是否尝试过将 blob 作为图像的 src
?在代码中,您将它放在文本 h2
中,因此它将打印 blob 文本,因为它是二进制的,看起来像乱码。
const urlCreator = window.URL || window.webkitURL;
const imageUrl = urlCreator.createObjectURL(dataValues.Foto);
const image = new Image();
image.addEventListener("onload", () => {
//append the image in your body page
}
image.src = imageUrl;
尝试类似的东西
编辑: 您可以使用 handlebars 助手将 blob 转换为 URL
Handlebars.registerHelper('blobToUrl', function(blob) {
var urlCreator = window.URL || window.webkitULR;
var imageUrl = urlCreator.createObjectURL(blob);
return imageUrl;
});
然后这样做
<h1>Fotos:</h1>
{{#each fotos}}
<img src="{{blobToUrl dataValues.Foto}}"></img>
<hr>
{{/each}}