我有一个运行withformidable的小函数来接受传入的文件。它就像一个魅力,但我无法在文档中看到有关限制文件类型的任何内容。 https://github.com/felixge/node-formidable 除了这个以外,几乎所有其他内容都被覆盖了。
还有其他人遇到过这个吗?
var form = new formidable.IncomingForm(),
files = [],
fields = [],
returnJson = {};
//setup the incoming
form.uploadDir = GLOBAL.server_settings.user_content;
form.encoding = 'utf-8';
form.maxFieldsSize = 2 * 1024 * 1024;
form.maxFields = 1000;
form.on('field', function(field, value) {
console.log(field, value);
fields.push([field, value]);
})
/* this is where the renaming happens */
.on ('fileBegin', function(name, file){
var fileType = file.type.split('/').pop();
//rename the incoming file
file.path = form.uploadDir + "/" + req.user.id + _ + toolbox.uniqid() + '.' + fileType;
})
.on('file', function(field, file) {
//on file received
console.log(field, file);
files.push([field, file]);
})
.on('progress', function(bytesReceived, bytesExpected) {
//self.emit('progess', bytesReceived, bytesExpected)
var percent = (bytesReceived / bytesExpected * 100) | 0;
process.stdout.write('Uploading: %' + percent + '\r');
})
.on('end', function() {
console.log('-> upload done');
console.log( files );
console.log( fields );
returnJson.file_data = files;
returnJson.fields_data = fields;
res.json( returnJson );
});
form.parse(req);
答案 0 :(得分:2)
所以在玩完所有内容之后结果......如果你没有在文件类型不是你想要的时候设置文件路径,这与限制我的文件类型是一样的。
例如:
//event listeners for the form.parse() below
form.on('field', function(field, value) {
console.log(field, value);
fields.push([field, value]);
})
/* this is where the renaming happens */
.on ('fileBegin', function(name, file){
var fileType = file.type.split('/').pop();
if(fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg' ){
//rename the incoming file
file.path = form.uploadDir + "/" + images_hash + '_' + image_count + '.' + fileType;
//increment image counter for next possible incoming image
++image_count;
} else {
console.log( 'incorrect file type: ' + fileType );
}
})
答案 1 :(得分:0)
您可以通过处理form.onPart()函数来实现。像这样:
fileTypes = ['image/jpeg', 'image/png', 'image/gif'];
form.onPart = part => {
if (fileTypes.indexOf(part.mime) === -1) {
// Here is the invalid file types will be handled.
// You can listen on 'error' event
form._error(new Error('File type is not supported'));
}
if (!part.filename || fileTypes.indexOf(part.mime) !== -1) {
// Let formidable handle the non file-pars and valid file types
form.handlePart(part);
}
};
form.parse(request).on('error', _err => {
// You also pass it through next() to errorHandle function
debug(_err.message); // output: File type is not supported
})
希望有帮助。