Я работаю на веб-сайте, который хранит изображения в базе данных MongoDB GridFS, а затем может отображать одно из выбранных изображений пользователю.
Часть загрузки уже работает, но у меня возникают проблемы с частью загрузки образа, потому что всякий раз, когда я пытаюсь преобразовать readStream из базы данных в строку, я получаю undefined
в своей консоли.
Я думаю, что проблема заключается в части readStream, более конкретно, преобразовании readStream в String
. Когда я заменил readStream на writeStream, я смог получить идеальную копию загруженного изображения.
Однако мне это не нужно. Мне нужно, чтобы изображение было отправлено на внешний интерфейс.
Я пробовал много разных идей, таких как перемещение createServer и MongoClient.connect
. Я также пробовал разные пакеты, которые предположительно конвертируют stream
прямо в String
.
MongoClient.connect(dbURL, function(err, client){
if(err) throw err;
// setting db name
var db = client.db("formImgs");
// bucket to interact with GridFS
bucket = new mongodb.GridFSBucket(db);
// loop to upload each image
for(var i = 0; i < fileNames.length; i++){
// uploads to the database using file locations
fs.createReadStream("photos/" + fileNames[i]).pipe(bucket.openUploadStream(fileNames[i]))
.on("error", function(e){
// error handling
console.log(e);
}).on("finish", function(){
// success
console.log("Done uploading!");
});
}
const server = http.createServer((req, res) => {
var readStream = fs.createReadStream("photos/LaptopRegistry.png");
bucket.openDownloadStreamByName("LaptopRegistry.png").pipe(readStream);
var bufs = [];
// THIS IS WHERE I THINK MY CODE MESSES UP
readStream.on("data", function(chunk){
bufs.push(chunk);
}).on("end", function(){
var fbuf = Buffer.concat(bufs);
base64 = fbuf.toString("base64");
});
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain");
fs.readFile("index.html", function(err, data) {
res.writeHead(200, {"Content-Type": "text/html"});
res.write(data);
//insert use of base64 string here
});
});
});
});