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);
尝试使用 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);