#javascript #node.js #mongodb #http #gridfs
#javascript #node.js #mongodb #http #gridfs
Вопрос:
Я работаю над веб-сайтом, который хранит изображения в базе данных MongoDB GridFS, а затем может отображать одно из выбранных изображений для пользователя.
Часть загрузки уже работает, но у меня возникают проблемы с загрузкой части изображения, потому что всякий раз, когда я пытаюсь преобразовать поток чтения из базы данных в строку, я попадаю undefined
в свою консоль.
Я думаю, что проблема связана с частью потока чтения, точнее, с преобразованием из потока чтения в String
. Когда я заменил поток чтения на поток записи, я смог загрузить идеальную копию своего изображения.
Однако мне это не нужно. Мне нужно, чтобы изображение было отправлено во внешний интерфейс.
Я перепробовал много разных идей, таких как перемещение createServer и MongoClient.connect
. Я также пробовал разные пакеты, которые предположительно преобразуют stream
прямой в a 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
});
});
});
});