我正在使用邮递员向服务器发送以下请求:
我尝试使用以下代码访问应用程序中的图像:
app.js
var express = require('express');
var bodyParser = require('body-parser');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
app.use(bodyParser.raw({
type: 'image/png',
limit: '10mb'
}));
app.use('/', indexRouter);
app.use('/users', usersRouter);
module.exports = app;
index.js(路由器)
var express = require('express');
const router = express.Router();
var Jimp = require('jimp');
/* GET home page. */
router.get('/', function(req, res) {
res.render('index', { title: 'Express' });
});
router.post('/a', function(req, res) {
var image = req.body;
try{
Jimp.read(image, (err, input) => {
if (err) throw err;
input.sepia();
input.getBuffer(Jimp.AUTO, (err, output) => {
if(err) throw err;
res.writeHead(200, {'Content-Type': 'image/png' });
return res.end(output, 'binary');
});
});
}catch (err){
return res.status(400).send(`Error: ${err.message}`).end();
}
});
module.exports = router;
我首先使用表单(在express-fileupload
库的帮助下)发送图像,并且效果很好,所以我知道问题必须出在var image = req.body
行之前。
为了使Jimp函数(图像处理库)正常工作,图像必须是表示png图像的缓冲区。
运行console.log(image)
时,控制台将输出{}
。
有人可以向我展示一种以二进制文件形式发送png作为缓冲区的方法吗?
答案 0 :(得分:0)
没关系,我只需要将请求中的Content-Type标头更改为image / png -.-
答案 1 :(得分:0)
可以用lib multer重写功能吗?
const multer = require('multer')
const storage = multer.memoryStorage()
const upload = multer({ storage: storage })
router.post('/a', upload.single('image'), function(req, res, next) {
const image = req.file.buffer
});
还是强大?
var formidable = require('formidable' );
router.post('/a', (req, res) => {
const form = new formidable.IncomingForm();
form.parse(req, (error, fields, files) => {
const image = files.image;
})
});