0

我正在尝试使用 mongoose 和 GridFS 检索存储在 mongoDB 中的一组图像。我将文件名存储在一个数组中并循环检索每个文件名并将其存储在本地路径中。但是,只有最后一个图像被下载和存储,循环正确执行,但每次迭代只执行最后一个文件名。

这里 gfs.exist() 中的文件名始终是 sony4 并且在每次迭代时都会执行,并且只会下载。

const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors');
const app = express()
const mongoose = require('mongoose')
var gridfs = require('gridfs-stream');
var fs = require('fs');
mongoose.Promise = Promise
gridfs.mongo = mongoose.mongo;

mongoose.connect('mongodb://localhost:27017/CompanyDetails', { useNewUrlParser: true })
    .then(() => console.log("mongoose is up"))

let connection = mongoose.connection;

connection.on('error', function (err) {
    console.log(err);
})

app.use(cors())
app.use(bodyParser.json())

connection.once('open', () => {

    var gfs = gridfs(connection.db);
    app.get('/api/download', async (req, res) => {


        var filenames = ['asus1.jpg', 'asus2.jpg', 'asus3.jpg', 'asus4.jpg',
            'dell1.jpg', 'dell2.jpeg', 'dell3.jpg', 'dell4.png',
            'hp1.jpg', 'hp2.jpg', 'hp3.jpg', 'hp4.jpg',
            'lenovo1.jpg', 'lenovo2.jpg', 'lenovo3.jpg', 'lenovo4.jpg',
            'sony1.jpg', 'sony2.jpg', 'sony3.jpg', 'sony4.jpg'];

        for (var i = 0; i < filenames.length; i++) {
            var filename = filenames[i];
            console.log(filenames[i]);

            // Check file exist on MongoDB
            gfs.exist({ filename: filename }, (err, file) => {
                if (err || !file) {
                    res.status(404).send('File Not Found');
                    return
                }

                var readstream = gfs.createReadStream({ filename: filename });
                var fs_write_stream = fs.createWriteStream('D:/data/db/images/' + filename);
                readstream.pipe(fs_write_stream);
            });
        }
    });
})

app.listen(1234, () => console.log("Server listening at 1234"))
4

0 回答 0