конечный результат, который мне нужен, - это отправка нескольких изображений в веб-браузер из базы данных.
Изображения хранятся в виде BLOB-объектов.
Я знаю, что могу передавать их избазы данных и в файл, а затем я мог бы просто дать URL-адрес файла.
Я также знаю, что я могу передать строку base64 в браузер, чтобы он мог отобразить изображение.
Мой вопроскакой вариант является наиболее оптимальным?Или лучшая практика?Имейте в виду, что если я использую потоковый метод, мне нужно будет проверить, изменилось ли изображение с тех пор, как я в последний раз отображал его ... и если оно изменилось, то я должен повторно вывести его из базы данных.
Я играл с oracldb для узла js и смог успешно извлечь один BLOB-объект в файл, но у меня также возникают проблемы с потоковой передачей нескольких файлов.
Это сообщение из двух вопросов:
Что является наиболее оптимальным: 1. Отправьте строку Base64 - мне нравится этот метод, потому что мне не нужно беспокоиться о потоковой передаче файла и проверке, изменился ли он, поскольку он поступает прямо из базы данных.Меня беспокоит, может ли браузер / nodejs справиться с этим?Я знаю, что эти строки могут быть очень большими.Я также мог бы отправлять более одного изображения одновременно.
Потоковая передача больших двоичных объектов в файлы.
Вторая часть вопроса заключается в том, как я могу получить несколько больших двоичных объектов, приведенных ниже. Это мой код для потоковой передачи только одного файла, я нашел этот пример в github lobstream1.js *.1020 *
https://raw.githubusercontent.com/oracle/node-oracledb/master/examples/lobstream1.js
Сосредоточив внимание на коде:
// Stream a LOB to a file
var dostream = function(lob, cb) {
if (lob.type === oracledb.CLOB) {
console.log('Writing a CLOB to ' + outFileName);
lob.setEncoding('utf8'); // set the encoding so we get a 'string' not a 'buffer'
} else {
console.log('Writing a BLOB to ' + outFileName);
}
var errorHandled = false;
lob.on(
'error',
function(err) {
console.log("lob.on 'error' event");
if (!errorHandled) {
errorHandled = true;
lob.close(function() {
return cb(err);
});
}
});
lob.on(
'end',
function() {
console.log("lob.on 'end' event");
});
lob.on(
'close',
function() {
// console.log("lob.on 'close' event");
if (!errorHandled) {
return cb(null);
}
});
var outStream = fs.createWriteStream(outFileName);
outStream.on(
'error',
function(err) {
console.log("outStream.on 'error' event");
if (!errorHandled) {
errorHandled = true;
lob.close(function() {
return cb(err);
});
}
});
// Switch into flowing mode and push the LOB to the file
lob.pipe(outStream);
};
Исправлен спулинг изображений с помощью этого метода, я немного изменил dostream.
for(var x = 0; x<result.rows.length;x++)
{
outputFileName = x + '.jpg';
console.log(outputFileName);
console.log(x);
var lob = result.rows[x][0];
dostream(lob,outputFileName);
// cb(null,lob);
}
Спасибо залюбая помощь.