Aka*_*wal 6 javascript binary-data fs node.js
我试图将请求的二进制体写入文件并失败.该文件是在服务器上创建的,但我无法打开它.我在Ubuntu上收到'致命错误:不是png'.以下是我提出请求的方式:
curl --request POST --data-binary "@abc.png" 192.168.1.38:8080
Run Code Online (Sandbox Code Playgroud)
以下是我试图用文件保存它的方法.第一个片段是用于将所有数据附加在一起的中间件,第二个是请求处理程序:
中间件:
app.use(function(req, res, next) {
req.rawBody = '';
req.setEncoding('utf-8');
req.on('data', function(chunk) {
req.rawBody += chunk;
});
req.on('end', function() {
next();
});
});
Run Code Online (Sandbox Code Playgroud)
处理器:
exports.save_image = function (req, res) {
fs.writeFile("./1.png", req.rawBody, function(err) {
if(err) {
console.log(err);
} else {
console.log("The file was saved!");
}
});
res.writeHead(200);
res.end('OK\n');
};
Run Code Online (Sandbox Code Playgroud)
这里有一些可能有用的信息.在中间件中,如果我记录rawBody的长度,它看起来是正确的.我真的很困惑如何正确保存文件.我所需要的只是朝着正确的方向努力.
这是一个完整的、可以运行的 Express 应用程序。我用它打了一下curl --data-binary @photo.jpg localhost:9200,效果很好。
var app = require("express")();
var fs = require("fs");
app.post("/", function (req, res) {
var outStream = fs.createWriteStream("/tmp/upload.jpg");
req.pipe(outStream);
res.send();
});
app.listen(9200);
Run Code Online (Sandbox Code Playgroud)
我只是将请求直接传送到文件系统。至于你的实际问题,我的第一个猜测是req.setEncoding('utf-8');utf-8 适用于文本数据而不是二进制数据。
| 归档时间: |
|
| 查看次数: |
2102 次 |
| 最近记录: |