在上传整个文件之前验证文件扩展名 强大 (node.js)
Validate file extension before uploading whole file formidable (node.js)
我有一个用作路由器的 Node.JS 服务器,可以向它发出 post 请求以上传文件,我目前只允许 jpg/png/jpeg 扩展名做的是:
var form = new formidable.IncomingForm(),
files = [],
postToFolder,
source,
size = 0,
dest;
postToFolder = '/path/';
form.on('file', function (field, file) {
var fileType = file.type.split('/').pop();
if (fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg') {
// alot of stuff
}
else{
console.log('invalid filetype');
fs.unlinkSync(file.path);
console.log('Deleted: ' + file.path);
}
此代码有效,但它会将文件上传到 /tmp/ 文件夹,如果它们无效,则必须删除它们。如果我可以在文件完全上传之前检查文件扩展名,那么性能会更好。有人知道怎么做吗?我试过谷歌搜索,但没有成功,发现了一些不适用于 Formidable 的答案。
编辑:
所以我发现这会在它开始之前触发 RIGHT,但它确实开始写入文件,取消它或在它期间破坏服务器导致我的整个文件磁盘被写满几次,文档真的很糟糕所以我找不到任何可以让我 "skip" 文件
的东西
form.on('fileBegin', function(field, file) {
var fileType = file.type.split('/').pop();
if (fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg') {
}
else{
}
});
我在另一个 SO post 中找到了解决方案,它是相同的答案,但很难找到答案,因为我专门寻找在文件上传之前调用的东西。我现在使用的代码(您可以删除 form.on('file'
中的文件类型检查
form.onPart = function (part) {
if(!part.filename || part.filename.match(/\.(jpg|jpeg|png)$/i)) {
this.handlePart(part);
}
else {
console.log(part.filename + ' is not allowed');
}
}
来源uploading files using express.js and node, limiting extensions
编辑:我还想指出,这并不禁止用户将 .exe 重命名为 .jpg 然后他可以通过。
我有一个用作路由器的 Node.JS 服务器,可以向它发出 post 请求以上传文件,我目前只允许 jpg/png/jpeg 扩展名做的是:
var form = new formidable.IncomingForm(),
files = [],
postToFolder,
source,
size = 0,
dest;
postToFolder = '/path/';
form.on('file', function (field, file) {
var fileType = file.type.split('/').pop();
if (fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg') {
// alot of stuff
}
else{
console.log('invalid filetype');
fs.unlinkSync(file.path);
console.log('Deleted: ' + file.path);
}
此代码有效,但它会将文件上传到 /tmp/ 文件夹,如果它们无效,则必须删除它们。如果我可以在文件完全上传之前检查文件扩展名,那么性能会更好。有人知道怎么做吗?我试过谷歌搜索,但没有成功,发现了一些不适用于 Formidable 的答案。
编辑:
所以我发现这会在它开始之前触发 RIGHT,但它确实开始写入文件,取消它或在它期间破坏服务器导致我的整个文件磁盘被写满几次,文档真的很糟糕所以我找不到任何可以让我 "skip" 文件
的东西form.on('fileBegin', function(field, file) {
var fileType = file.type.split('/').pop();
if (fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg') {
}
else{
}
});
我在另一个 SO post 中找到了解决方案,它是相同的答案,但很难找到答案,因为我专门寻找在文件上传之前调用的东西。我现在使用的代码(您可以删除 form.on('file'
中的文件类型检查form.onPart = function (part) {
if(!part.filename || part.filename.match(/\.(jpg|jpeg|png)$/i)) {
this.handlePart(part);
}
else {
console.log(part.filename + ' is not allowed');
}
}
来源uploading files using express.js and node, limiting extensions
编辑:我还想指出,这并不禁止用户将 .exe 重命名为 .jpg 然后他可以通过。