我正在建立一个视频游戏数据库,每个数据库都包含游戏的名称,流派和图像等元素。是否可以将图像放入数据库的json对象?如果没有办法解决这个问题?
答案 0 :(得分:34)
我可以想到以两种方式做到这一点:
将文件存储在任何目录(例如dir1
)的文件系统中并重命名,以确保每个文件的名称都是唯一的(可能是时间戳)(比如说xyz123.jpg
),然后将此名称存储在某些DataBase中。然后在生成JSON时,您将获取此文件名并生成完整的URL(将为http://example.com/dir1/xyz123.png
)并将其插入JSON中。
Base 64编码,它基本上是一种用ASCII文本编码任意二进制数据的方法。每3字节数据需要4个字符,最后可能还有一些填充。基本上每6位输入都用64个字符的字母表编码。 “标准”字母表使用A-Z,a-z,0-9和+和/,其中=作为填充字符。有URL安全的变种。因此,这种方法将允许您将图像直接放在MongoDB中,同时存储它对图像进行编码并在获取图像时进行解码,它有一些自身的缺点:
A。)画布
将图像加载到Image-Object中,将其绘制到画布并将画布转换回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
,{{ 1}},image/webp
B。)FileReader
通过XMLHttpRequest将图像加载为blob,并使用FileReader API将其转换为数据URL。
image/xxx
这种方法
<强> 用法 强>
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();
}
答案 1 :(得分:12)
JSON格式只能包含这些类型的值:
图像属于&#34;二进制&#34;这些都不是。 因此,您无法直接将图像插入JSON。您可以做的是将图像转换为文本表示,然后可以将其用作普通字符串。
实现这一目标的最常见方式是使用名为base64的内容。基本上,它不是将其编码为1
和0
,而是使用64个字符的范围,这使得它的文本表示更紧凑。例如,数字&#39; 64&#39;在二进制中表示为1000000
,而在base64中它只是一个字符:=
。
有多种方法可以在base64中对图像进行编码,具体取决于您是否要执行in the browser。
请注意,如果您正在开发Web应用程序,以二进制形式单独存储图像,并在JSON或其他地方存储这些图像的路径会更有效。这也允许您的客户端浏览器缓存图像。
答案 2 :(得分:4)
使用数据网址方案:https://en.wikipedia.org/wiki/Data_URI_scheme
在这种情况下,您可以直接在html中使用该字符串:With ThisWorkbook.Sheets("CSVImport")
.Rows(1).Copy Destination:=ThisWorkbook.Sheets(strAccount).Cells(2, 1)
答案 3 :(得分:1)
要将文件直接上传到Mongo DB,您可以使用Grid FS。虽然我建议您将文件上传到文件系统中的任何位置,并将图像的URL放在JSON对象中,但是当您调用特定对象的数据时,可以使用URL调用图像。
告诉我你使用的是哪种后端技术?我可以基于此提出更多建议。
答案 4 :(得分:1)
<?php
$target_path = "./Upload/";
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded";
} else {
echo "There was an error uploading the file, please try again!";
}
?>
PHP文件
options("digits.secs"=6)