У меня есть действующая спецификация OpenAPI для формы с multipart/form-data
, содержащей файл и дополнительное текстовое поле. (сгенерировано из NestJS-Swagger, задокументировано здесь)
Он работает из пользовательского интерфейса Swagger, но я не могу понять, как получить код API, сгенерированный генератором OpenAPI для работы typescript-axios
.
Вот 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,);
};
регистрация как на клиенте, так и на сервере показывает, что тело отсутствует ... несмотря на то, что файл и идентификатор пользователя присутствуют