Javascript 如何设置编码文件上载

Javascript 如何设置编码文件上载,javascript,angularjs,node.js,mongodb,busboy,Javascript,Angularjs,Node.js,Mongodb,Busboy,我正在使用,当我上传一个不是txt的文档,如图片、pdf或文档,并尝试下载时,该文件与我上传的文件不同(查看图片),我不确定这是否是因为上传文件时编码错误 左边的文档是原始文件 客户: var uploader = $scope.uploader = new FileUploader({ scope: $scope, url: '/file/upload/', method:'POST', headers: { 'X-XSRF-TOKEN': 'some tok

我正在使用,当我上传一个不是txt的文档,如图片、pdf或文档,并尝试下载时,该文件与我上传的文件不同(查看图片),我不确定这是否是因为上传文件时编码错误

左边的文档是原始文件

客户:

var uploader = $scope.uploader = new FileUploader({
   scope: $scope,
   url: '/file/upload/',
   method:'POST',
   headers: {
    'X-XSRF-TOKEN': 'some token'
   }
});

$scope.upload = function(){
    uploader.queue.forEach(function(item){
        item.formData = [
        {'filename': 'friendlyName' },
        {'objectType': 'element' },
        {'elementId': 'someId'}
        ];
    });
    uploader.uploadAll();
};
后端帖子

在这里,busboy文件事件中的编码变量是'7bit'。。 后端:获取

exports.downloadDocument = function(req,res){
    var id = mongoose.Types.ObjectId(req.params.documentId);
        DocumentModel.findOneAsync({_id:id}).then(
        function(doc){
            console.log('doc', doc);
            if(doc!==undefined){
                DocumentModel.getFile(doc.fileInfoId).then(function(binaryData){
                    res.setHeader('x-timestamp', Date.now());
                    res.setHeader('x-sent',true);
                    res.setHeader('Content-disposition', 'attachment; filename=' + doc.filename);
                    res.setHeader('Content-Type',doc.contentType);
                    res.send(binaryData);   
                }).error(function(e){
                    res.status(500).send(e.message);
                });
            }
            else{
                res.status(404).send('file not found.');
            }
        });
};
如何设置正确的编码?还是不是编码问题

这是我在尝试查看下载的文件时遇到的错误。

提前谢谢

PD:
我正在使用gridFS将文档存储在mongoDB中。

您正在将二进制数据隐式转换为UTF-8,方法是将数据缓冲区添加到
doc.content
,这是一个字符串

您可能应该做的是确保模式中的
content
字段设置为
Buffer
,然后只需保持二进制数据完整即可。例如:

var bufs = [];
doc.size = 0;
file.on('data',function(data) {
  bufs[bufs.length] = data;
  doc.size += data.length;
}).on('end', function() {
  doc.content = Buffer.concat(bufs, doc.size);
});
var bufs = [];
doc.size = 0;
file.on('data',function(data) {
  bufs[bufs.length] = data;
  doc.size += data.length;
}).on('end', function() {
  doc.content = Buffer.concat(bufs, doc.size);
});