想要在OpenShift
中将JPG二进制正文数据保存到文件系统。但不知何故收到的信息将被转换。你知道为什么吗? node.js是否可能将数据视为文本并对其进行编码/解码?
var myServer = http.createServer(function(request, response)
{
var data = '';
request.on('data', function (chunk){
data += chunk;
});
request.on('end',function(){
var date = new Date();
var url_parts = url.parse(request.url,true);
if(url_parts.pathname == '/setImage') {
if(data != null && data.length > 0) {
fs.writeFile('/var/lib/openshift/555dd1415973ca1660000085/app-root/data/asset/' + url_parts.query.filename, data, 'binary', function(err) {
if (err) throw err
console.log(date + ' File saved. ' + url_parts.query.filename + ' ' + data.length)
response.writeHead(200)
response.end()
})
}
}
答案 0 :(得分:5)
您正在使用字符串初始化data
,因此将chunk
与+=
添加到其中也会将块转换为字符串(需要进行字符编码)。< / p>
相反,您应该将块收集为Buffer
的数组,并使用Buffer.concat()
创建最终的缓冲区:
var chunks = [];
request.on('data', function (chunk){
chunks.push(chunk);
});
request.on('end', function() {
var data = Buffer.concat(chunks);
...
});