我有一个典型的客户端/服务器应用程序,我可以将图像发送到服务器,我需要在客户端上使用不同大小的图像。
所以目前我正在使用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);
})
});
});
}