我正在构建一个可以接收文件并检查上载文件的实际文件类型的API。这是为了避免用户通过将文件扩展名从.exe更改为.png来上传假的.png文件。
这是我的nodejs代码:
const functions = require('firebase-functions');
//<----------Setup Express, cors and router to call API by public--------------->
const express = require('express'); // call express
const app = express(); // define our app using express
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
const router = express.Router();
const cors = require('cors')({ origin: true }); // Automatically allow cross-origin requests
//>----------Done: Setup Express, CORS and router to call API by public--------<
//<----------Setup multer to catch uploaded file--------------->
const multer = require('multer');
const upload = multer();
//>----------Done: Setup multer to catch uploaded file--------<
//<----------Setup file-type to process file--------------->
const readChunk = require('read-chunk');
const fileType = require('file-type');
//>----------Done: Setup file-type to process file--------<
var returnSuccess = {
resultCode: 1,
resultDesc: '',
resultData: '',
dataCount: 0,
resultAction: '',
timeStamp: Date.now()
}
var returnFailed = {
resultCode: -1,
resultDesc: '',
resultAction: '',
timeStamp: Date.now()
}
router.post('/fileChecker', upload.array(), function (req, res, next) {
console.log('Initilize FileChecker')
var files = []
var checkResults = []
var file = req.file
files = req.files
console.log(file)
console.log(files)
if (files.length > 0) {
files.map(element => {
try {
const buffer = readChunk.sync(element, 0, 4100);
checkResults.push(fileType(buffer));
}
catch (err) {
console.log(err)
var returnMsg = returnFailed
returnMsg.resultDesc = err
returnMsg.resultAction = 'fileChecker'
returnMsg.timeStamp = Date.now()
res.status(500).send(returnMsg)
}
})
var returnMsg = returnSuccess
returnMsg.timeStamp = Date.now()
returnMsg.resultDesc = 'success'
res.status(200).send(returnMsg)
}
res.status(200).send('Processed Ntg')
});
//------------------------function seperator------------------------------>
router.get('/', function (req, res) {
return res.status(200).send('Tata! Get into API d')
})
//------------------------function seperator------------------------------>
router.get('/subAPI', function (req, res) {
return res.status(200).send('Tata! Get into sub-API d')
})
//------------------------function seperator------------------------------>
app.use(cors)
app.use(router)
exports.api = functions.https.onRequest(app)
我当前的问题
当我将文件发布到api / fileChecker时,req.file或req.files总是未定义或为空数组。
我如何进行POST:
我正在使用POSTMAN发送带有表单数据主体的POST命令,并附加了2个文件(空密钥和文件作为值)
同时,我需要一些帮助来检查我的代码对于file-type
处理是否正确。我按照npm文档进行编码,但仍然无法验证。
谢谢。