NodeJS 缓冲区 Base64 文件限制

NodeJS Buffer Base64 File Limits

尝试使用 Base64 上传图像,但如果字符串很长,则存储图像的底部为空白。

upload.js

var uuid = require('node-uuid');
var fs = require('fs');

exports.uploadImage = function(base64Str, callback) {
    var filename = uuid.v1()+'.png';
    var bitmap = new Buffer(base64Str, 'base64');
    fs.writeFileSync(filename, bitmap);
    callback(filename);
};

server.js

var fs = require('fs');
var restify = require('restify');  
var server = restify.createServer();
server.use(restify.bodyParser());

var upload = require('./modules/upload');

server.post('/images', function(req, res) {
    upload.uploadImage(req.params.myImage, function(filename) {
        console.log('processing image');
        res.send(filename);
        res.end();
    });
});

server.listen(3000);

它适用于长度为 499016 字节的字符串,但不适用于长度为 847508 字节的字符串。是否有记录的大小限制,如果没有,我如何上传和取消编码更长的字符串?

您可能达到了请求大小限制。一种替代方法是将您的图片上传为 multipart/form-data。您可以使用 restify.bodyParser 中的 mapFiles 选项来执行此操作,并且您可以通过在 Postman 表单数据中选择文件而不是文本来测试它。

已编辑: fs.rename 出于测试目的,此处可能更有意义。在实际应用中,您可能希望将上传的文件保存在其他地方,也许在 s3 上。

var fs = require('fs');
var restify = require('restify');
var server = restify.createServer();
server.use(restify.bodyParser({
    mapFiles: true
}));

var uuid = require('node-uuid');
var fs = require('fs');

var uploadImage = function(path, callback) {
    var filename = uuid.v1() + '.png';
    fs.rename(path, filename, function(err) {
        if (err) {
            throw err;
        }
        callback(filename);
    });
};

server.post('/images', function(req, res) {
    uploadImage(req.files.myImage.path, function(filename) {
        res.send(filename);
        res.end();
    });
});

server.listen(3000);