使用nodeJS提高发送静态图像的速度

时间:2017-06-15 09:05:39

标签: javascript node.js image express

我有一个典型的客户端/服务器应用程序,我可以将图像发送到服务器,我需要在客户端上使用不同大小的图像。

所以目前我正在使用Picasso和android来加载图像,而对于nodeJS,我将图像作为静态文件提供,因为它们保存在静态文件所在的文件夹中。

我的问题是:有没有办法提高发送静态文件的速度(只是图像),还是可以使用我目前对静态文件的代码来减小它们的大小?

app.use(express.static(path.join(__dirname, 'public')));

目前我从客户端收到的图像为 base64 ,在服务器上我将其转换为如下位图:

var bitmap = new Buffer(req.body.base64,'base64');

并将该位图存储在我用作静态文件夹的公共文件夹上,我不直接将图像存储在数据库中,因为这是不好的做法,我只是保存路径,每次我想要检索我知道里面的图像它所在的静态文件夹。

因此,每次在我的客户端上,我想要检索一个foto,我只需要知道什么是静态路径,仅此而已。

为了更好地理解,我留下了我保存照片的1个控制器的代码。

控制器

sendPicture: function (req, res, next) {
        var plant = null
        if (req.params.id != 0) {
            plant = req.params.id;
        }
        var bitmap = new Buffer(req.body.base64, 'base64');
        var lat = req.body.lat;
        var lon = req.body.lon;
        var alt = req.body.alt;
        var date = req.body.date;
        var flowerName;
        var pathId = shortid.generate();
        var userId = req.userId;

        if (plant != null) {
            Plant.findOne({
                where: { id: req.params.id }
            }).then(function (plant) {
                if (!plant) {
                    return 'not found';
                }
                flowerName = plant.specie;
            }).then(function () {

                var pathToSave = __dirname + "/../public/images/" + flowerName + "/" + pathId + req.params.id + "-" + userId + ".jpg";
                var path = "images/" + flowerName + "/" + pathId + req.params.id + "-" + userId + ".jpg"


                fsPath.writeFile(pathToSave, bitmap, function (err) {
                    if (err) {
                        console.log(err.stack);
                        return err;
                    }
                    Foto.create({
                        image: path,
                        userId: userId,
                        plantId: req.params.id,
                        lat: req.body.lat,
                        lon: req.body.lon,
                        alt: req.body.alt,
                        date: date,
                    }).then(function () {
                        return res.status(200).json({ message: "foto created" });
                    }).catch(function (err) {
                        console.log(err.stack);
                    })

                });
            });
        }

0 个答案:

没有答案