使用Express中的Multer设置响应状态?

时间:2018-10-16 10:07:17

标签: node.js http express multer

我正在使用Multer作为Express中间件。在我的示例中,我正在检查文件扩展名和mimetype是否正确(对于wave文件),如果不正确,我想用415进行响应。但是,我不知道如何使用Multer的<i> getSelectedImages = (selectedImages, currentImage)=>{ const image = this.state.uri let uploadBlob = null let mime = 'image/jpg' const originalXMLHttpRequest = window.XMLHttpRequest; const originalBlob = window.Blob; window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest window.Blob = RNFetchBlob.polyfill.Blob const imageRef = firebase.storage().ref('posts').child(this.state.uri) RNFetchBlob.fs.readFile(image, 'base64') .then((data) => { return Blob.build(data, { type: `${mime};BASE64` }) }) .then((blob) => { uploadBlob = blob return imageRef.put(blob, { contentType: mime }) }) .then(() => { uploadBlob.close() window.XMLHttpRequest = originalXMLHttpRequest ; window.Blob = originalBlob return imageRef.getDownloadURL() }) .then((url) => { firebase.database().ref('groub').child(params.chat).child('message').push({ createdAt:firebase.database.ServerValue.TIMESTAMP, image:url, user:{ _id:params.id, name:params.name, }, }) alert('Upload Sukses') }) .catch((error) => { console.log(error); }) } </i>来执行此操作,因此我正在检查文件是否存在于路由器处理程序的请求对象中,这有点尴尬。另外也许将来我想实现不同的fileFilter和错误代码。是否有建议的模式用于在Express中使用Multer设置响应状态?

fileFilter

1 个答案:

答案 0 :(得分:1)

您可以这样做:

const upload = multer({
    dest: 'uploads/',
    fileFilter: function (req, file, cb) {
        const filetypes = /wave|wav/;
        const mimetype = filetypes.test(file.mimetype);
        const extname = filetypes.test(
            path.extname(file.originalname).toLowerCase());

        if (mimetype && extname) {
            cb(undefined, true);
        } else {
            req.notWAVEMimeType = 'Only audio/wav files are supported.';
            return cb(undefined, false);
        }
    }
});

router.post('/', upload.single('wave'), (req, res) => {
    if (req.notWAVEMimeType) {
        return res.status(415).end(req.notWAVEMimeType);
    }

    // Do some async task with file
    return res.sendStatus(200);
});

通过请求对象上的notWAVEMimeType属性,您可以将错误消息返回到POST方法。据此,您可以添加其他mime类型,然后检查req的相关属性的存在。