- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在为视频游戏创建一个数据库,每个数据库都包含游戏名称、类型和图像等元素。是否可以将图像放入数据库的 json 对象中?如果没有,有没有办法解决这个问题?
最佳答案
我可以考虑两种方式:
将文件存储在文件系统中的任何目录(例如 dir1
)并重命名它以确保每个文件的名称都是唯一的(可能是时间戳)(例如 xyz123.jpg
),然后将此名称存储在某个数据库中。然后在生成 JSON 时,您提取此文件名并生成一个完整的 URL(将是 http://example.com/dir1/xyz123.png
)并将其插入 JSON。
Base 64 Encoding,它基本上是一种在 ASCII 文本中编码任意二进制数据的方法。每 3 个字节的数据需要 4 个字符,最后可能还有一些填充。本质上,输入的每 6 位都以 64 个字符的字母表编码。 “标准”字母表使用 A-Z、a-z、0-9 和 + 和/,其中 = 作为填充字符。有 URL 安全的变体。所以这种方法可以让你把你的图片直接放到MongoDB里面,存储的时候对图片进行编码,获取的时候解码,它有一些自己的缺点:
A.) Canvas
将图像加载到 Image-Object 中,将其绘制到 Canvas 上并将 Canvas 转换回 dataURL。
function convertToDataURLviaCanvas(url, callback, outputFormat){
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function(){
var canvas = document.createElement('CANVAS');
var ctx = canvas.getContext('2d');
var dataURL;
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
callback(dataURL);
canvas = null;
};
img.src = url;
}
用法
convertToDataURLviaCanvas('http://bit.ly/18g0VNp', function(base64Img){
// Base64DataURL
});
支持的输入格式image/png
、image/jpeg
、image/jpg
、image/gif
、image/bmp
, image/tiff
, image/x-icon
, image/svg+xml
, image/webp
, 图像/xxx
B.) 文件阅读器
通过 XMLHttpRequest 将图像加载为 blob,并使用 FileReader API 将其转换为数据 URL。
function convertFileToBase64viaFileReader(url, callback){
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onload = function() {
var reader = new FileReader();
reader.onloadend = function () {
callback(reader.result);
}
reader.readAsDataURL(xhr.response);
};
xhr.open('GET', url);
xhr.send();
}
这种方法
用法
convertFileToBase64viaFileReader('http://bit.ly/18g0VNp', function(base64Img){
// Base64DataURL
});
关于javascript - 如何将图像文件放入 json 对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34485420/
我是一名优秀的程序员,十分优秀!