图片来自 MySql,Nodejs 进入缓冲区数组
Image from MySql with Nodejs coming in buffer array
请帮我解决以下问题。
我已经在我的数据库中将一些图像保存在类型为 blod 的列中(图像为 .png)。现在我想提出一个请求(我正在使用 POSTMAN 程序进行测试)但我进入了 Json 一种类型的缓冲区数组,里面有一些数字。
我怎样才能让图片随处显示?
app.get('/getCountries', (req, res) => {
const queryString = "SELECT name,flag_png,info FROM countries"
getConnection().query(queryString, (err, results, fields) => { <br/>
if(err){<br/>
console.log('Failed to get request' + err);<br/>
res.sendStatus(500);<br/>
}else{<br/>
console.log('The get request succesfully');<br/>
res.json(results);<br/>
//res.end()<br/>
}<br/>
})<br/>
})<br/>
我现在也在想,将图像保存在数据库中可能不是一个好主意,最好将其保存在服务器中。您对此有何看法?
除非图像数量相对较少,否则不建议将图像存储在数据库中(因为数据库性能会随着行大小和行数的增加而下降)。如果您有大量图像,最好存储在您的文件系统上并公开一个 API 供网页访问图像,您可以从中检索图像的 URL 列表你的数据库。
包括
const http = require('http');
const express = require('express');
const path = require('path');
const logger = require('morgan');
const app = express();
const mysql = require('mysql');
const url = require('url');
const fs = require('fs');
const path = require('path');
const localPool = mysql.createPool({
host: 'some_host',
user: 'some_user',
password: 'some_password',
database: 'some_database'
});
app.use(logger('dev'));
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(express.static(path.join(__dirname, 'public')));
通过存储在数据库中的图像 ID 获取图像的代码
// to get image ID's
app.get('/getCountries', (req, res) => {
// return multiple results
const queryString = 'SELECT name,flag,info FROM countries WHERE some_expression';
localPool.query(queryString, (err, results) => {
if(err) {
res.status(500).end();
} else if (results.length === 0) {
res.status(404).end();
} else {
// note here I have a field called flag which contains and "ID" for the image.
res.json(results);
}
});
});
// to get the image by the ID
app.get('/getImage', (req, res) => {
// get image id from url like: /getImage?id=91238129537
const id = (url.parse(req.url, true).query).id;
fs.readFile(path.resolve(`someDirectory/${id}`), { flag: 'r' }, (err, data) => {
if (err) {
res.status(404).end();
} else {
res.set('Content-Type', 'image');
res.end(data, 'binary');
}
});
});
编码为 return 来自您数据库的图像
app.get('/getCountries', (req, res) => {
// use LIMIT or WHERE to avoid a large set of results
const queryString = "SELECT name,flag_png,info FROM countries WHERE some_expression LIMIT 1";
localPool.query(queryString, (err, results) => {
if(err) {
res.status(500).end();
} else if (results.length === 0) {
res.status(404).end();
} else {
res.set('Content-Type', 'image/png');
res.end(results[0].flag_png, 'binary');
}
})
});
const server = http.createServer(app).listen(3000);
请帮我解决以下问题。
我已经在我的数据库中将一些图像保存在类型为 blod 的列中(图像为 .png)。现在我想提出一个请求(我正在使用 POSTMAN 程序进行测试)但我进入了 Json 一种类型的缓冲区数组,里面有一些数字。
我怎样才能让图片随处显示?
app.get('/getCountries', (req, res) => {
const queryString = "SELECT name,flag_png,info FROM countries"
getConnection().query(queryString, (err, results, fields) => { <br/>
if(err){<br/>
console.log('Failed to get request' + err);<br/>
res.sendStatus(500);<br/>
}else{<br/>
console.log('The get request succesfully');<br/>
res.json(results);<br/>
//res.end()<br/>
}<br/>
})<br/>
})<br/>
我现在也在想,将图像保存在数据库中可能不是一个好主意,最好将其保存在服务器中。您对此有何看法?
除非图像数量相对较少,否则不建议将图像存储在数据库中(因为数据库性能会随着行大小和行数的增加而下降)。如果您有大量图像,最好存储在您的文件系统上并公开一个 API 供网页访问图像,您可以从中检索图像的 URL 列表你的数据库。
包括
const http = require('http');
const express = require('express');
const path = require('path');
const logger = require('morgan');
const app = express();
const mysql = require('mysql');
const url = require('url');
const fs = require('fs');
const path = require('path');
const localPool = mysql.createPool({
host: 'some_host',
user: 'some_user',
password: 'some_password',
database: 'some_database'
});
app.use(logger('dev'));
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(express.static(path.join(__dirname, 'public')));
通过存储在数据库中的图像 ID 获取图像的代码
// to get image ID's
app.get('/getCountries', (req, res) => {
// return multiple results
const queryString = 'SELECT name,flag,info FROM countries WHERE some_expression';
localPool.query(queryString, (err, results) => {
if(err) {
res.status(500).end();
} else if (results.length === 0) {
res.status(404).end();
} else {
// note here I have a field called flag which contains and "ID" for the image.
res.json(results);
}
});
});
// to get the image by the ID
app.get('/getImage', (req, res) => {
// get image id from url like: /getImage?id=91238129537
const id = (url.parse(req.url, true).query).id;
fs.readFile(path.resolve(`someDirectory/${id}`), { flag: 'r' }, (err, data) => {
if (err) {
res.status(404).end();
} else {
res.set('Content-Type', 'image');
res.end(data, 'binary');
}
});
});
编码为 return 来自您数据库的图像
app.get('/getCountries', (req, res) => {
// use LIMIT or WHERE to avoid a large set of results
const queryString = "SELECT name,flag_png,info FROM countries WHERE some_expression LIMIT 1";
localPool.query(queryString, (err, results) => {
if(err) {
res.status(500).end();
} else if (results.length === 0) {
res.status(404).end();
} else {
res.set('Content-Type', 'image/png');
res.end(results[0].flag_png, 'binary');
}
})
});
const server = http.createServer(app).listen(3000);