【问题标题】:Transfer request's file from API to API: NestJS(HttpService: Axios) to Python(flask)将请求的文件从 API 传输到 API:NestJS(HttpService: Axios) 到 Python(flask)
【发布时间】:2020-02-29 02:18:45
【问题描述】:

我正在尝试将文件从 nestJS API 传输到 Python Flask API。

此过程将由 Nest API 上的 POST 请求(FormData: 文件)触发。然后nest api应该将文件发送到Python api。

nestJS 的 HttpService 使用 Axios。所以我的目标基本上是从 NodeJS 发送带有 axios 的文件。

FormData 在节点 JS 上不可用,所以我安装了 Nmp FormData

Python

Python 代码,我认为它工作正常,因为 Postman 请求通过没有任何问题。

@app.route('/route', methods=['POST'])
def user():

    params_data = json.load(request.files.get('file'))

    return 'OK'

NestJS

在鸟巢方面,我尝试了很多东西。

但主要思想如下: 使用 formData.getHeaders 作为 axios headers 并将数据放入 axios config 中。

app.controller.ts

    @Post()
    uploadFile(@Req() request: Request) {
        // request is Express request
        const formData: any = new FormData();
        let newFile;
        if (request.hasOwnProperty('file')) {
            newFile = (request as any).file; // This is working 
        }
        formData.append('file', newFile.buffer, 'filename');

        return this.appService.launchOptim(formData);
    }

app.service.ts

  public launchOptim(modelData: FormData) {

    const axiosConfig: AxiosRequestConfig = {
      headers: modelData.getHeaders(),
      data: modelData,
    };


    return this.http.post('http://localhost:5000/route', modelData, axiosConfig)
               .pipe(map(result => result.data));

  }

然后,使用该配置,python 代码中的request.files 始终为空。

如何使用 axios 将请求的文件正确传输到另一个 api ?

关于这个话题的问题: Axios issue 也试过这个 Axios fix

【问题讨论】:

  • 嘿雨果,你有没有设法让这个工作?我也有类似的要求……不过对我来说,我不控制其他 API。
  • 我们使用了另一种解决方案。我帮不上忙,对不起:'(

标签: javascript node.js flask axios nestjs


【解决方案1】:
@Post()
@UseInterceptors(FileInterceptor('file'))
uploadFile(@Req() request: Request, @UploadedFile() file,) {
    var FormData = require("form-data");
    const formData = new FormData();
    formData.append('file', file.buffer, { filename: file.originalname });
    const headers = {
        ...formData.getHeaders(),
        "Content-Length": formData.getLengthSync()
    };
    await axios.post(requestAPI, formData, { headers });
}

【讨论】:

  • 这个例子很有用,但可以使用一些信息。您能否专门编辑您的帖子,说明提问者需要更改哪些内容才能完成这项工作,以便他们(以及最终解决这个问题的未来人员)能够更好地了解最终用户出了什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
相关资源
最近更新 更多