【问题标题】:How to proxy multiple file upload using NodeJs?如何使用 NodeJs 代理多个文件上传?
【发布时间】:2021-12-25 01:54:50
【问题描述】:

好的,所以我需要代理从我的 express 节点应用程序上传的文件数组到远程 PHP Api。

理想情况下,我会使用接近 Nginx 代理的东西,因为它与节点具有相同的模块。

如果没有,我会模仿表单重新发送。

您能帮忙找到最好的方法吗?

【问题讨论】:

    标签: node.js express file-upload proxy multipartform-data


    【解决方案1】:

    所以,我没有发现如何代理请求本身,就像 nginx 一样,但至少我想出了如何将请求及其所有数据重定向到不同的源。

    所以,这里我们使用 express-fileupload 从 req 中获取文件数据,并使用 form-data 创建表单并发送数据。

    import app from '@app';
    import { authMw as checkJwtAndAddToRequest } from '@middleware/Auth';
    import { Router } from 'express';
    
    import fileupload, { UploadedFile } from "express-fileupload";
    
    import FormData from 'form-data';
    
    //add this MW to add files to you'r req
    
    app.use(checkJwtAndAddToRequest)
    app.use(fileupload());
    
    app.post('/upload', (req, res) => {
        const uploadableFiles: UploadedFile[] | UploadedFile | undefined = req.files?.formFieldName;
    
        if(!uploadableFiles) {
            throw Error('Pls add files to upload them');
        }
    
        //Transorm single file to same form as an array of files
        const files: UploadedFile[] = Array.isArray(uploadableFiles) ? uploadableFiles : Array<UploadedFile>(uploadableFiles);
    
        //create form
        const form = new FormData();
    
        //add files
        files.forEach(
            file => form.append('files[]', file.data.toString(), file.name)
        )
    
        //Submit 
        form.submit({
            protocol: 'http:',
            host: process.env.API_URL,
            path: '/api-path-for/file/upload',
            method: 'POST',
            headers: {
                //Add auth token if needed
                authorization: `Bearer ${String(req.body.jwtToken)}`
            }
        }, (err, response) => {
            if(err) {
                //handle error 
                res.status(503).send('File server is currently unavailable');
            }
            //return remote response to original client
            response.pipe(res)
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2018-08-09
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      相关资源
      最近更新 更多