mysql - 如何在 React 页面上显示存储在 MySQL 中的图像
问题描述
我在 MySQL 中有图像。试图在我的 React 页面上显示一个,因此配置了 Express。数据库中的图片存储为 mediumblob 并以 base64 编码。那里看起来像
iVBORw0KGgoAAAANSUhEUgAABQAAAAPACAYAAABq3NR5AAAgAElEQVR4AezBCZzXc+I4/uf70zSmTMd0rIqwSWzLLiK5i9....
所以我配置 Express 来获取这些数据:
const mysql = require("mysql");
const bodyParser = require("body-parser");
const express = require("express");
const app = express( );
const port = 4000;
app.use(bodyParser.json( ));
var mysqlConnection = mysql.createConnection({
host: "host",
user: "user",
password: "password",
database: "db"
});
mysqlConnection.connect((err) => {
if (!err) {
console.log("DB Connected");
} else {
console.log("DB Connection Failed " + err.message);
}
});
app.get("/rf", (req, res, next) => {
mysqlConnection.query(
"SELECT photo FROM photo WHERE id=365",
function(err, results, fields) {
if (err) throw err;
res.set("Access-Control-Allow-Origin", "*");
res.send(results);
}
);
});
app.listen(port, ( ) => {
console.log(`Listening at http://localhost:${port}`);
});
当尝试在 http://localhost:4000/rf 获取数据时,我收到的不是 base64 字符串,而是 Unit8Array,它看起来像:
[{“照片”:{“类型”:“缓冲区”,“数据”:[105,86,66,79,82,119,48,75,71,103,111,65,65,65,65,78,83,85,104, 69....
而且我无法在页面上显示它。请帮助我,或者给我解决这个问题的样本。
解决方案
大概您想在您的网页中放置一个看起来像这样的图像标签。
<img src="http://localhost:4000/rf" />
并让您的 /rf 端点传送图像。如果不是这种情况,请编辑您的问题。
为此,您必须使用正确的 MIME 类型将二进制图像传送到浏览器。首先从Base64解码,然后设置MIME类型,然后发送。这样的代码可能会有所帮助。
function(err, results, fields) {
if (err) throw err;
if (results && results.length >= 1) { /* results is an array */
const imgdata = Buffer.from(results[0].photo, 'base64')
res.type('png').send(imgdata)
}
请注意,大多数浏览器都会接受 JPEG。GIF 和 PNG,只要它们具有任何一种有效的 MIME 类型(image/png
例如)。这对您来说是幸运的,因为您看起来不像将每个图像的 MIME 类型存储在表中。
而且,顺便说一句,使用npm cors包来做你的 CORS工作,而不是在你自己的代码中插入额外的 CORS 标头。CORS 是 xxx 脖子上要调试的一个痛点,包已经调试好了。
最后,请注意,将图像存储在数据库中的扩展性很差。如果您获得大量流量,您不希望您的 MySQL 服务器成为瓶颈。最好将图像放在静态文件系统中,并将它们的路径存储在数据库中。
推荐阅读
- javascript - Joi 中 any.when() 的异常行为
- android - 如何从 GeoFire 中检索持续更新的位置数据并将其放在 Google 地图上?
- sql - pgadmin 4 文本字段截止
- python - 谷歌作者资料抓取
- python - 将任务发送给特定的芹菜工人
- c# - Pathoschild/FluentHttpClient 使用 Polly 为自定义重试协调提供错误
- reporting-services - SSRS 无法识别 .NET Framework 类库
- angular - NgRx Action Payload 没有达到效果 - 没有错误
- curl - 在颤动中使用 Dio 的 POST 问题
- apache-spark - 分布式规则引擎