gpt4 book ai didi

javascript - 如何设置编码文件上传

转载 作者:可可西里 更新时间:2023-11-01 10:30:07 25 4
gpt4 key购买 nike

我正在使用 angular-file-upload , 当我上传一个不是 txt 的文档,比如图片、pdf 或 doc 文档,我尝试下载它时,文件与我上传的文件不同(看图片),我'我不确定这是否是因为上传文件时编码错误..

enter image description here左边的文件是原始文件。

客户端:

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 文件事件中的编码变量是'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);
}
});
});
};

后端:获取...

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.');
}
});
};

如何设置正确的编码?或者不是编码问题?

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

提前致谢。

个人资料:我正在使用 gridFS 将文档存储在 mongoDB 中。

最佳答案

您通过将数据缓冲区附加到字符串 doc.content 来隐式地将二进制数据转换为 UTF-8。

您可能应该做的是确保架构中的content 字段设置为Buffer 然后您只需concatenate file chunk Buffers保持二进制数据完好无损。示例:

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

关于javascript - 如何设置编码文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27452259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com