对于包含multipart/form-data的表单,我有一个有效的OpenAPI规范,其中包含一个文件和一个附加的文本字段。(generated from NestJS-Swagger, documented here)
它在Swagger UI中工作,但是我不知道如何让API为typescript-axios生成的OpenAPI代码工作。
这是OpenAPI YAML
"/users/files":
post:
operationId: UsersController_addPrivateFile
summary: "..."
parameters: []
requestBody:
required: true
content:
multipart/form-data:
schema:
"$ref": "#/components/schemas/UploadFileDto"..。
UploadFileDto:
type: object
properties:
file:
type: file
properties:
file:
type: string
format: binary
description: "..."
example: "'file': <any-kind-of-binary-file>"
user_id:
type: string
description: "..."
example: cus_IPqRS333voIGbS
required:
- file
- user_id下面是它在Swagger UI中的工作方式

Axios的输出似乎与API有关(我省略了这些函数中不相关的部分
public usersControllerAddPrivateFile(file: object, userId: string) {
return UsersApiFp(this.configuration)
.usersControllerAddPrivateFile(file, userId)
.then((request) => request(this.axios, this.basePath));
}
async usersControllerAddPrivateFile(file, userId){
const localVarAxiosArgs = await UsersApiAxiosParamCreator(
configuration,
).usersControllerAddPrivateFile(file, userId);
return (...) => {
const axiosRequestArgs = {
...localVarAxiosArgs.options,
...
};
return axios.request(axiosRequestArgs);
};
}
usersControllerAddPrivateFile(file, userId){
...
const localVarFormParams = new FormData();
localVarFormParams.append('file', file as any);
localVarFormParams.append('user_id', userId as any);
localVarHeaderParameter['Content-Type'] = 'multipart/form-data';
...
}我像这样调用函数
onFileUpload = () => {
const formData = new FormData();
formData.append('file', this.state.selectedFile);
const usersApi = new UsersApi();
usersApi.usersControllerAddPrivateFile(formData,this.state.data.user_id,);
};在客户端和服务器上的登录都显示正文是missing...despite文件和用户ID都存在


发布于 2020-12-01 09:48:20
查看生成的代码,您会发现该函数只需要原始文件,并将其捆绑在表单数据中:
usersControllerAddPrivateFile(file, userId){
...
const localVarFormParams = new FormData();
localVarFormParams.append('file', file as any);
localVarFormParams.append('user_id', userId as any);
localVarHeaderParameter['Content-Type'] = 'multipart/form-data';
...
}因此只需从更新函数调用
onFileUpload = () => {
const formData = new FormData();
formData.append('file', this.state.selectedFile);
const usersApi = new UsersApi();
usersApi.usersControllerAddPrivateFile(formData,this.state.data.user_id,);
};至
const usersApi = new UsersApi();
usersApi.usersControllerAddPrivateFile(
this.state.selectedFile,
this.state.data.user_id,
);解决了这个问题
https://stackoverflow.com/questions/65083436
复制相似问题