Skip to content

Commit ea02516

Browse files
committed
better file support
1 parent a0dc0e2 commit ea02516

File tree

119 files changed

+10627
-328
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+10627
-328
lines changed

modules/openapi-generator/src/main/resources/csharp/libraries/generichost/api.mustache

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -471,14 +471,15 @@ namespace {{packageName}}.{{apiPackage}}
471471
{{/headerParams}}
472472
{{#formParams}}
473473
{{#-first}}
474-
MultipartContent multipartContentLocalVar = new MultipartContent();
474+
MultipartFormDataContent multipartContentLocalVar = new MultipartFormDataContent();
475475

476476
httpRequestMessageLocalVar.Content = multipartContentLocalVar;
477477

478478
List<KeyValuePair<string{{nrt?}}, string{{nrt?}}>> formParameterLocalVars = new List<KeyValuePair<string{{nrt?}}, string{{nrt?}}>>();
479479

480-
multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars));{{/-first}}{{^isFile}}{{#required}}
481-
480+
{{/-first}}
481+
{{^isFile}}
482+
{{#required}}
482483
formParameterLocalVars.Add(new KeyValuePair<string{{nrt?}}, string{{nrt?}}>("{{baseName}}", ClientUtils.ParameterToString({{paramName}})));
483484

484485
{{/required}}
@@ -490,16 +491,46 @@ namespace {{packageName}}.{{apiPackage}}
490491
{{/isFile}}
491492
{{#isFile}}
492493
{{#required}}
493-
multipartContentLocalVar.Add(new StreamContent({{paramName}}));
494+
{{#isContainer}}
495+
foreach (global::System.IO.Stream streamLocalVar in {{paramName}})
496+
{
497+
var streamContentLocalVar = new StreamContent(streamLocalVar);
498+
multipartContentLocalVar.Add(streamContentLocalVar, "{{baseName}}");
499+
}
500+
501+
{{/isContainer}}
502+
{{^isContainer}}
503+
var streamContentLocalVar = new StreamContent({{paramName}});
504+
multipartContentLocalVar.Add(streamContentLocalVar, "{{baseName}}");
494505

506+
{{/isContainer}}
495507
{{/required}}
496508
{{^required}}
497509
if ({{paramName}}.IsSet)
498-
multipartContentLocalVar.Add(new StreamContent({{paramName}}.Value));
510+
{
511+
{{#isContainer}}
512+
foreach (global::System.IO.Stream streamLocalVar in {{paramName}}.Value)
513+
{
514+
var streamContentLocalVar = new StreamContent(streamLocalVar);
515+
multipartContentLocalVar.Add(streamContentLocalVar, "{{baseName}}");
516+
}
517+
{{/isContainer}}
518+
{{^isContainer}}
519+
var streamContentLocalVar = new StreamContent({{paramName}}.Value);
520+
multipartContentLocalVar.Add(streamContentLocalVar, "{{baseName}}");
521+
{{/isContainer}}
522+
}
499523

500524
{{/required}}
501525
{{/isFile}}
502526
{{/formParams}}
527+
{{#formParams}}
528+
{{#-first}}
529+
if (formParameterLocalVars.Count > 0)
530+
multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars));
531+
532+
{{/-first}}
533+
{{/formParams}}
503534
{{#bodyParam}}
504535
{{#required}}
505536
httpRequestMessageLocalVar.Content = ({{paramName}}{{^required}}.Value{{/required}} as object) is System.IO.Stream stream

modules/openapi-generator/src/test/resources/3_0/csharp/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,46 @@ paths:
316316
description: file to upload
317317
type: string
318318
format: binary
319+
'/pet/{petId}/uploadImages':
320+
post:
321+
tags:
322+
- pet
323+
summary: uploads an images
324+
description: ''
325+
operationId: uploadFiles
326+
parameters:
327+
- name: petId
328+
in: path
329+
description: ID of pet to update
330+
required: true
331+
schema:
332+
type: integer
333+
format: int64
334+
responses:
335+
'200':
336+
description: successful operation
337+
content:
338+
application/json:
339+
schema:
340+
$ref: '#/components/schemas/ApiResponse'
341+
security:
342+
- petstore_auth:
343+
- 'write:pets'
344+
- 'read:pets'
345+
requestBody:
346+
required: true
347+
content:
348+
multipart/form-data:
349+
schema:
350+
type: object
351+
properties:
352+
files:
353+
type: array
354+
items:
355+
type: string
356+
format: binary
357+
required:
358+
- files
319359
/store/inventory:
320360
get:
321361
tags:

samples/client/petstore/csharp/generichost/net10/FormModels/api/openapi.yaml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,40 @@ paths:
326326
summary: uploads an image
327327
tags:
328328
- pet
329+
/pet/{petId}/uploadImages:
330+
post:
331+
description: ""
332+
operationId: uploadFiles
333+
parameters:
334+
- description: ID of pet to update
335+
explode: false
336+
in: path
337+
name: petId
338+
required: true
339+
schema:
340+
format: int64
341+
type: integer
342+
style: simple
343+
requestBody:
344+
content:
345+
multipart/form-data:
346+
schema:
347+
$ref: "#/components/schemas/uploadFiles_request"
348+
required: true
349+
responses:
350+
"200":
351+
content:
352+
application/json:
353+
schema:
354+
$ref: "#/components/schemas/ApiResponse"
355+
description: successful operation
356+
security:
357+
- petstore_auth:
358+
- write:pets
359+
- read:pets
360+
summary: uploads an images
361+
tags:
362+
- pet
329363
/store/inventory:
330364
get:
331365
description: Returns a map of status codes to quantities
@@ -2748,6 +2782,16 @@ components:
27482782
format: binary
27492783
type: string
27502784
type: object
2785+
uploadFiles_request:
2786+
properties:
2787+
files:
2788+
items:
2789+
format: binary
2790+
type: string
2791+
type: array
2792+
required:
2793+
- files
2794+
type: object
27512795
testEnumParameters_request_enum_form_string_array_inner:
27522796
default: $
27532797
enum:

samples/client/petstore/csharp/generichost/net10/FormModels/docs/apis/PetApi.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2*
1313
| [**UpdatePetWithForm**](PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data |
1414
| [**UploadFile**](PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image |
1515
| [**UploadFileWithRequiredFile**](PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) |
16+
| [**UploadFiles**](PetApi.md#uploadfiles) | **POST** /pet/{petId}/uploadImages | uploads an images |
1617

1718
<a id="addpet"></a>
1819
# **AddPet**
@@ -341,3 +342,38 @@ uploads an image (required)
341342

342343
[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md)
343344

345+
<a id="uploadfiles"></a>
346+
# **UploadFiles**
347+
> ApiResponse UploadFiles (List<System.IO.Stream> files, long petId)
348+
349+
uploads an images
350+
351+
352+
### Parameters
353+
354+
| Name | Type | Description | Notes |
355+
|------|------|-------------|-------|
356+
| **files** | **List&lt;System.IO.Stream&gt;** | | |
357+
| **petId** | **long** | ID of pet to update | |
358+
359+
### Return type
360+
361+
[**ApiResponse**](ApiResponse.md)
362+
363+
### Authorization
364+
365+
[petstore_auth](../README.md#petstore_auth)
366+
367+
### HTTP request headers
368+
369+
- **Content-Type**: multipart/form-data
370+
- **Accept**: application/json
371+
372+
373+
### HTTP response details
374+
| Status code | Description | Response headers |
375+
|-------------|-------------|------------------|
376+
| **200** | successful operation | - |
377+
378+
[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md)
379+

samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -764,16 +764,17 @@ public async Task<IGetCountryApiResponse> GetCountryAsync(string country, System
764764
? "/country"
765765
: string.Concat(HttpClient.BaseAddress.AbsolutePath, "/country");
766766

767-
MultipartContent multipartContentLocalVar = new MultipartContent();
767+
MultipartFormDataContent multipartContentLocalVar = new MultipartFormDataContent();
768768

769769
httpRequestMessageLocalVar.Content = multipartContentLocalVar;
770770

771771
List<KeyValuePair<string, string>> formParameterLocalVars = new List<KeyValuePair<string, string>>();
772772

773-
multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars));
774-
775773
formParameterLocalVars.Add(new KeyValuePair<string, string>("country", ClientUtils.ParameterToString(country)));
776774

775+
if (formParameterLocalVars.Count > 0)
776+
multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars));
777+
777778
httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri;
778779

779780
string[] contentTypes = new string[] {

samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4281,14 +4281,12 @@ public async Task<ITestEndpointParametersApiResponse> TestEndpointParametersAsyn
42814281
? "/fake"
42824282
: string.Concat(HttpClient.BaseAddress.AbsolutePath, "/fake");
42834283

4284-
MultipartContent multipartContentLocalVar = new MultipartContent();
4284+
MultipartFormDataContent multipartContentLocalVar = new MultipartFormDataContent();
42854285

42864286
httpRequestMessageLocalVar.Content = multipartContentLocalVar;
42874287

42884288
List<KeyValuePair<string, string>> formParameterLocalVars = new List<KeyValuePair<string, string>>();
42894289

4290-
multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars));
4291-
42924290
formParameterLocalVars.Add(new KeyValuePair<string, string>("number", ClientUtils.ParameterToString(number)));
42934291

42944292
formParameterLocalVars.Add(new KeyValuePair<string, string>("pattern_without_delimiter", ClientUtils.ParameterToString(patternWithoutDelimiter)));
@@ -4298,7 +4296,10 @@ public async Task<ITestEndpointParametersApiResponse> TestEndpointParametersAsyn
42984296
formParameterLocalVars.Add(new KeyValuePair<string, string>("double", ClientUtils.ParameterToString(varDouble)));
42994297

43004298
if (binary.IsSet)
4301-
multipartContentLocalVar.Add(new StreamContent(binary.Value));
4299+
{
4300+
var streamContentLocalVar = new StreamContent(binary.Value);
4301+
multipartContentLocalVar.Add(streamContentLocalVar, "binary");
4302+
}
43024303

43034304
if (callback.IsSet)
43044305
formParameterLocalVars.Add(new KeyValuePair<string, string>("callback", ClientUtils.ParameterToString(callback.Value)));
@@ -4327,6 +4328,9 @@ public async Task<ITestEndpointParametersApiResponse> TestEndpointParametersAsyn
43274328
if (varString.IsSet)
43284329
formParameterLocalVars.Add(new KeyValuePair<string, string>("string", ClientUtils.ParameterToString(varString.Value)));
43294330

4331+
if (formParameterLocalVars.Count > 0)
4332+
multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars));
4333+
43304334
List<TokenBase> tokenBaseLocalVars = new List<TokenBase>();
43314335
httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri;
43324336

@@ -4625,18 +4629,21 @@ public async Task<ITestEnumParametersApiResponse> TestEnumParametersAsync(Option
46254629
if (enumHeaderStringArray.IsSet)
46264630
httpRequestMessageLocalVar.Headers.Add("enum_header_string_array", ClientUtils.ParameterToString(enumHeaderStringArray.Value));
46274631

4628-
MultipartContent multipartContentLocalVar = new MultipartContent();
4632+
MultipartFormDataContent multipartContentLocalVar = new MultipartFormDataContent();
46294633

46304634
httpRequestMessageLocalVar.Content = multipartContentLocalVar;
46314635

46324636
List<KeyValuePair<string, string>> formParameterLocalVars = new List<KeyValuePair<string, string>>();
46334637

4634-
multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet)
4638+
if (enumFormString.IsSet)
46354639
formParameterLocalVars.Add(new KeyValuePair<string, string>("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value)));
46364640

46374641
if (enumFormStringArray.IsSet)
46384642
formParameterLocalVars.Add(new KeyValuePair<string, string>("enum_form_string_array", ClientUtils.ParameterToString(enumFormStringArray.Value)));
46394643

4644+
if (formParameterLocalVars.Count > 0)
4645+
multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars));
4646+
46404647
httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri;
46414648

46424649
string[] contentTypes = new string[] {
@@ -5534,18 +5541,19 @@ public async Task<ITestJsonFormDataApiResponse> TestJsonFormDataAsync(string par
55345541
? "/fake/jsonFormData"
55355542
: string.Concat(HttpClient.BaseAddress.AbsolutePath, "/fake/jsonFormData");
55365543

5537-
MultipartContent multipartContentLocalVar = new MultipartContent();
5544+
MultipartFormDataContent multipartContentLocalVar = new MultipartFormDataContent();
55385545

55395546
httpRequestMessageLocalVar.Content = multipartContentLocalVar;
55405547

55415548
List<KeyValuePair<string, string>> formParameterLocalVars = new List<KeyValuePair<string, string>>();
55425549

5543-
multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars));
5544-
55455550
formParameterLocalVars.Add(new KeyValuePair<string, string>("param", ClientUtils.ParameterToString(param)));
55465551

55475552
formParameterLocalVars.Add(new KeyValuePair<string, string>("param2", ClientUtils.ParameterToString(param2)));
55485553

5554+
if (formParameterLocalVars.Count > 0)
5555+
multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars));
5556+
55495557
httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri;
55505558

55515559
string[] contentTypes = new string[] {

0 commit comments

Comments
 (0)