如何设置编码file upload

我正在使用angular度file upload ,当我上传一个非TXT的文件,如图片,PDF或DOC文件,我尝试下载,文件是不同于我上传的文件看图片),我不确定这是否是因为上传文件时出现错误的编码。

在这里输入图像描述 左边的文件是原始文件。

客户端:

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(); }; 

后端POST …

在这里,busboy文件事件中的编码variables是'7bit' ..

 exports.uploadDocument = function(req,res){ req.pipe(req.busboy); var doc = new DocumentModel(); req.busboy.on('file',function(fieldname, file, filename, encoding, contentType){ doc.contentType = contentType; doc.encoding= encoding; doc.filename= filename; doc.content = ''; doc.size = 0; file.on('data',function(data){ doc.content += data; doc.size += data.length; }); }); //updating req.body with busboy parameters req.busboy.on('field',function(fieldname,val){ req.body[fieldname] = val; }); req.busboy.on('finish', function() { if(req.body.hasOwnProperty('filename')){ doc.friendlyName = req.body.filename; } if(req.body.hasOwnProperty('objectType')){ doc.reference.objectType = req.body.objectType; } if(req.body.hasOwnProperty('elementId')){ doc.reference._id= req.body.elementId; } doc.save(function(err,savedFile){ if(err){ res.json(500,err.message); }else{ res.json(200,doc); } }); }); }; 

后端:GET …

 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中。

通过将数据缓冲区附加到doc.content (这是一个string),可以将二进制数据隐式转换为UTF-8。

你应该做的是确保模式中的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); });