0
我有一個問題,讓文件上傳工作在我的項目上(PS我對Web編程比較陌生)。我使用NodeJS/Express/Mongoose/Mongo和API /後端的busboy,Angular使用ng-file-upload作爲前端。Angular/Node.js文件上傳只適用於文件<64k
我想實現一個基本的文件上傳/下載,通過該文件存儲在一個貓鼬架構:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var FileSchema = new Schema({
filename: { type: String },
owner: { type: String },
contentType: { type: String },
length: { type: Number },
uploaddate: { type: Date, default: Date.now },
metadata: {},
file: { data: Buffer, contentType: String }
});
module.exports = mongoose.model('Files', FileSchema);
節點API:
api.route('/files')
.post(function (req, res) {
if (req.busboy) {
var newFile = new File();
var part = 0, buf = [], len = 0;
var meta = {};
var md5 = crypto.createHash('md5');
req.busboy.on('field', function (key, value, keyTruncated, valueTruncated) {
console.log('[FIELD] KEY:' + key + ' VALUE:' + value);
if (key == 'owner') newFile.owner = value;
else meta[key] = value;
});
req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
console.log('File [' + fieldname + ']: filename: ' + filename + ', encoding: ' + encoding + ', mimetype: ' + mimetype);
newFile.filename = filename;
//newFile.contentType = mimetype;
file.on('data', function (data) {
console.log('File [' + fieldname + '] got ' + data.length + ' bytes');
buf.push(data);
len = len + data.length;
part++;
});
file.on('end', function() {
newFile.file.data = Buffer.concat(buf, part);
md5.update(newFile.file.data);
newFile.file.contentType = mimetype;
newFile.length = len;
console.log('File [' + fieldname + '] Finished');
meta['md5'] = md5.digest('hex');
newFile.metadata = meta;
newFile.save(function (err, data) {
if (err) console.log(err);
res.json({ _id: newFile._id });
})
});
});
req.pipe(req.busboy);
}
});
這適用於任何完美的罰款文件< 64KB,或在一個上傳卡盤內。我已經根據存儲的值驗證了文件MD5,並從數據庫中檢索並加載了圖像。問題在於何時上傳被分解成塊。發生某些事情導致它以某種方式變形並中斷文件。原始文件的MD5和存儲的文件> 64kb或多個塊的MD5是不同的...
我在搞什麼?
或者如果任何人有任何關於如何更好地執行此功能的建議。
謝謝!
工作就像一個魅力!非常感謝sooo! – Eric