diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index 6f5140495c1d..674c842e4093 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -69,7 +69,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("number", "double?"); typeMapping.put("datetime", "DateTime?"); typeMapping.put("date", "DateTime?"); - typeMapping.put("file", "String"); + typeMapping.put("file", "Stream"); typeMapping.put("array", "List"); typeMapping.put("list", "List"); typeMapping.put("map", "Dictionary"); diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index 0ae71bda25c0..870bf8495618 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -39,7 +39,7 @@ namespace {{packageName}}.Client { private Dictionary defaultHeaderMap = new Dictionary(); public Object CallApi(String Path, RestSharp.Method Method, Dictionary QueryParams, String PostBody, - Dictionary HeaderParams, Dictionary FormParams, Dictionary FileParams, String[] AuthSettings) { + Dictionary HeaderParams, Dictionary FormParams, Dictionary FileParams, String[] AuthSettings) { var response = Task.Run(async () => { var resp = await CallApiAsync(Path, Method, QueryParams, PostBody, HeaderParams, FormParams, FileParams, AuthSettings); return resp; @@ -48,7 +48,7 @@ namespace {{packageName}}.Client { } public async Task CallApiAsync(String Path, RestSharp.Method Method, Dictionary QueryParams, String PostBody, - Dictionary HeaderParams, Dictionary FormParams, Dictionary FileParams, String[] AuthSettings) { + Dictionary HeaderParams, Dictionary FormParams, Dictionary FileParams, String[] AuthSettings) { var request = new RestRequest(Path, Method); @@ -71,8 +71,9 @@ namespace {{packageName}}.Client { request.AddParameter(param.Key, param.Value); // add file parameter, if any - foreach(KeyValuePair param in FileParams) - request.AddFile(param.Key, param.Value); + foreach(KeyValuePair param in FileParams) + request.AddFile(param.Value.Name, param.Value.Writer, param.Value.FileName, param.Value.ContentType); + if (PostBody != null) { request.AddParameter("application/json", PostBody, ParameterType.RequestBody); // http body (model) parameter @@ -109,6 +110,21 @@ namespace {{packageName}}.Client { return str; } + /// + /// Create FileParameter based on Stream + /// + /// parameter name + /// Stream + /// FileParameter + public FileParameter ParameterToFile(string name, Stream stream) + { + if (stream is FileStream) { + return FileParameter.Create(name, StreamToByteArray(stream), ((FileStream)stream).Name); + } else { + return FileParameter.Create(name, StreamToByteArray(stream), "temp_name_here"); + } + } + /// /// if parameter is DateTime, output in ISO8601 format /// if parameter is a list of string, join the list with "," @@ -136,10 +152,8 @@ namespace {{packageName}}.Client { public object Deserialize(string content, Type type, IList headers=null) { if (type.GetType() == typeof(Object)) { // return an object return (Object)content; - } else if (type.Name == "FileStream") { // return a file (full path) - // e.g. Content-Disposition: attachment; filename=checkimage.jpp - String fileName; - String filePath; + } else if (type.Name == "Stream") { + String fileName, filePath; if (String.IsNullOrEmpty (Configuration.TempFolderPath)) { filePath = System.IO.Path.GetTempPath (); } else { @@ -154,8 +168,8 @@ namespace {{packageName}}.Client { } else { fileName = filePath + Guid.NewGuid().ToString(); } - System.IO.File.WriteAllText (fileName, content); - return fileName; + File.WriteAllText (fileName, content); + return new FileStream(fileName, FileMode.Open); } else if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) { // return a datetime object return DateTime.Parse(content, null, System.Globalization.DateTimeStyles.RoundtripKind); } else if (type.Name == "String" || type.Name.StartsWith("System.Nullable")) { // return primitive @@ -231,6 +245,26 @@ namespace {{packageName}}.Client { } + /// + /// convert a stream to byte array (byte[]) + /// Ref: http://stackoverflow.com/questions/221925/creating-a-byte-array-from-a-stream + /// + /// input stream + /// Array of Byte + public byte[] StreamToByteArray(Stream input) + { + byte[] buffer = new byte[16*1024]; + using (MemoryStream ms = new MemoryStream()) + { + int read; + while ((read = input.Read(buffer, 0, buffer.Length)) > 0) + { + ms.Write(buffer, 0, read); + } + return ms.ToArray(); + } + } + /// /// Encode string in base64 format /// diff --git a/modules/swagger-codegen/src/main/resources/csharp/api.mustache b/modules/swagger-codegen/src/main/resources/csharp/api.mustache index 7092f66a60c5..3ede1c783a19 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/api.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/api.mustache @@ -100,14 +100,14 @@ namespace {{packageName}}.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; {{#queryParams}} if ({{paramName}} != null) queryParams.Add("{{baseName}}", ApiClient.ParameterToString({{paramName}})); // query parameter {{/queryParams}} {{#headerParams}} if ({{paramName}} != null) headerParams.Add("{{baseName}}", ApiClient.ParameterToString({{paramName}})); // header parameter {{/headerParams}} - {{#formParams}}if ({{paramName}} != null) {{#isFile}}fileParams.Add("{{baseName}}", ApiClient.ParameterToString({{paramName}}));{{/isFile}}{{^isFile}}formParams.Add("{{baseName}}", ApiClient.ParameterToString({{paramName}})); // form parameter{{/isFile}} + {{#formParams}}if ({{paramName}} != null) {{#isFile}}fileParams.Add("{{baseName}}", ApiClient.ParameterToFile("{{baseName}}", {{paramName}}));{{/isFile}}{{^isFile}}formParams.Add("{{baseName}}", ApiClient.ParameterToString({{paramName}})); // form parameter{{/isFile}} {{/formParams}} {{#bodyParam}}postBody = ApiClient.Serialize({{paramName}}); // http body (model) parameter {{/bodyParam}} @@ -122,10 +122,7 @@ namespace {{packageName}}.Api { throw new ApiException ((int)response.StatusCode, "Error calling {{nickname}}: " + response.Content, response.Content); } - {{#returnType}} // if return type is "String" (not "string"), it implies a Filestream and should return the file path - String returnTypeString = "{{{returnType}}}"; - Type returnType = returnTypeString == "String" ? typeof(FileStream) : typeof({{{returnType}}}); - return ({{{returnType}}}) ApiClient.Deserialize(response.Content, returnType, response.Headers);{{/returnType}}{{^returnType}}return;{{/returnType}} + {{#returnType}}return ({{{returnType}}}) ApiClient.Deserialize(response.Content, typeof({{{returnType}}}), response.Headers);{{/returnType}}{{^returnType}}return;{{/returnType}} } /// @@ -148,14 +145,14 @@ namespace {{packageName}}.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; {{#queryParams}} if ({{paramName}} != null) queryParams.Add("{{baseName}}", ApiClient.ParameterToString({{paramName}})); // query parameter {{/queryParams}} {{#headerParams}} if ({{paramName}} != null) headerParams.Add("{{baseName}}", ApiClient.ParameterToString({{paramName}})); // header parameter {{/headerParams}} - {{#formParams}}if ({{paramName}} != null) {{#isFile}}fileParams.Add("{{baseName}}", ApiClient.ParameterToString({{paramName}}));{{/isFile}}{{^isFile}}formParams.Add("{{baseName}}", ApiClient.ParameterToString({{paramName}})); // form parameter{{/isFile}} + {{#formParams}}if ({{paramName}} != null) {{#isFile}}fileParams.Add("{{baseName}}", ApiClient.ParameterToFile("{{baseName}}", {{paramName}}));{{/isFile}}{{^isFile}}formParams.Add("{{baseName}}", ApiClient.ParameterToString({{paramName}})); // form parameter{{/isFile}} {{/formParams}} {{#bodyParam}}postBody = ApiClient.Serialize({{paramName}}); // http body (model) parameter {{/bodyParam}} diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs index 2974cb6932b5..96f6f93af57a 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs @@ -122,7 +122,7 @@ namespace IO.Swagger.Api { /// Additional data to pass to server /// file to upload - void UploadFile (long? petId, string additionalMetadata, String file); + void UploadFile (long? petId, string additionalMetadata, Stream file); /// /// uploads an image @@ -131,7 +131,7 @@ namespace IO.Swagger.Api { /// Additional data to pass to server /// file to upload - Task UploadFileAsync (long? petId, string additionalMetadata, String file); + Task UploadFileAsync (long? petId, string additionalMetadata, Stream file); } @@ -202,7 +202,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -240,7 +240,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -277,7 +277,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -315,7 +315,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -352,7 +352,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; if (status != null) queryParams.Add("status", ApiClient.ParameterToString(status)); // query parameter @@ -371,10 +371,7 @@ namespace IO.Swagger.Api { throw new ApiException ((int)response.StatusCode, "Error calling FindPetsByStatus: " + response.Content, response.Content); } - // if return type is "String" (not "string"), it implies a Filestream and should return the file path - String returnTypeString = "List"; - Type returnType = returnTypeString == "String" ? typeof(FileStream) : typeof(List); - return (List) ApiClient.Deserialize(response.Content, returnType, response.Headers); + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); } /// @@ -393,7 +390,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; if (status != null) queryParams.Add("status", ApiClient.ParameterToString(status)); // query parameter @@ -429,7 +426,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; if (tags != null) queryParams.Add("tags", ApiClient.ParameterToString(tags)); // query parameter @@ -448,10 +445,7 @@ namespace IO.Swagger.Api { throw new ApiException ((int)response.StatusCode, "Error calling FindPetsByTags: " + response.Content, response.Content); } - // if return type is "String" (not "string"), it implies a Filestream and should return the file path - String returnTypeString = "List"; - Type returnType = returnTypeString == "String" ? typeof(FileStream) : typeof(List); - return (List) ApiClient.Deserialize(response.Content, returnType, response.Headers); + return (List) ApiClient.Deserialize(response.Content, typeof(List), response.Headers); } /// @@ -470,7 +464,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; if (tags != null) queryParams.Add("tags", ApiClient.ParameterToString(tags)); // query parameter @@ -510,7 +504,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -528,10 +522,7 @@ namespace IO.Swagger.Api { throw new ApiException ((int)response.StatusCode, "Error calling GetPetById: " + response.Content, response.Content); } - // if return type is "String" (not "string"), it implies a Filestream and should return the file path - String returnTypeString = "Pet"; - Type returnType = returnTypeString == "String" ? typeof(FileStream) : typeof(Pet); - return (Pet) ApiClient.Deserialize(response.Content, returnType, response.Headers); + return (Pet) ApiClient.Deserialize(response.Content, typeof(Pet), response.Headers); } /// @@ -554,7 +545,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -595,7 +586,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -640,7 +631,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -683,7 +674,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -726,7 +717,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -754,7 +745,7 @@ namespace IO.Swagger.Api { /// Additional data to pass to server /// file to upload - public void UploadFile (long? petId, string additionalMetadata, String file) { + public void UploadFile (long? petId, string additionalMetadata, Stream file) { // verify the required parameter 'petId' is set @@ -769,13 +760,13 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; if (additionalMetadata != null) formParams.Add("additionalMetadata", ApiClient.ParameterToString(additionalMetadata)); // form parameter - if (file != null) fileParams.Add("file", ApiClient.ParameterToString(file)); + if (file != null) fileParams.Add("file", ApiClient.ParameterToFile("file", file)); @@ -799,7 +790,7 @@ namespace IO.Swagger.Api { /// Additional data to pass to server /// file to upload - public async Task UploadFileAsync (long? petId, string additionalMetadata, String file) { + public async Task UploadFileAsync (long? petId, string additionalMetadata, Stream file) { // verify the required parameter 'petId' is set @@ -814,13 +805,13 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; if (additionalMetadata != null) formParams.Add("additionalMetadata", ApiClient.ParameterToString(additionalMetadata)); // form parameter - if (file != null) fileParams.Add("file", ApiClient.ParameterToString(file)); + if (file != null) fileParams.Add("file", ApiClient.ParameterToFile("file", file)); diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs index 14188799013e..90ec2487d9d3 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs @@ -133,7 +133,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -151,10 +151,7 @@ namespace IO.Swagger.Api { throw new ApiException ((int)response.StatusCode, "Error calling GetInventory: " + response.Content, response.Content); } - // if return type is "String" (not "string"), it implies a Filestream and should return the file path - String returnTypeString = "Dictionary"; - Type returnType = returnTypeString == "String" ? typeof(FileStream) : typeof(Dictionary); - return (Dictionary) ApiClient.Deserialize(response.Content, returnType, response.Headers); + return (Dictionary) ApiClient.Deserialize(response.Content, typeof(Dictionary), response.Headers); } /// @@ -172,7 +169,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -207,7 +204,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -226,10 +223,7 @@ namespace IO.Swagger.Api { throw new ApiException ((int)response.StatusCode, "Error calling PlaceOrder: " + response.Content, response.Content); } - // if return type is "String" (not "string"), it implies a Filestream and should return the file path - String returnTypeString = "Order"; - Type returnType = returnTypeString == "String" ? typeof(FileStream) : typeof(Order); - return (Order) ApiClient.Deserialize(response.Content, returnType, response.Headers); + return (Order) ApiClient.Deserialize(response.Content, typeof(Order), response.Headers); } /// @@ -248,7 +242,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -288,7 +282,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -306,10 +300,7 @@ namespace IO.Swagger.Api { throw new ApiException ((int)response.StatusCode, "Error calling GetOrderById: " + response.Content, response.Content); } - // if return type is "String" (not "string"), it implies a Filestream and should return the file path - String returnTypeString = "Order"; - Type returnType = returnTypeString == "String" ? typeof(FileStream) : typeof(Order); - return (Order) ApiClient.Deserialize(response.Content, returnType, response.Headers); + return (Order) ApiClient.Deserialize(response.Content, typeof(Order), response.Headers); } /// @@ -332,7 +323,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -371,7 +362,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -412,7 +403,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs index 86549479e320..0e3ed36c5950 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs @@ -194,7 +194,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -232,7 +232,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -269,7 +269,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -307,7 +307,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -344,7 +344,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -382,7 +382,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -420,7 +420,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; if (username != null) queryParams.Add("username", ApiClient.ParameterToString(username)); // query parameter @@ -440,10 +440,7 @@ namespace IO.Swagger.Api { throw new ApiException ((int)response.StatusCode, "Error calling LoginUser: " + response.Content, response.Content); } - // if return type is "String" (not "string"), it implies a Filestream and should return the file path - String returnTypeString = "string"; - Type returnType = returnTypeString == "String" ? typeof(FileStream) : typeof(string); - return (string) ApiClient.Deserialize(response.Content, returnType, response.Headers); + return (string) ApiClient.Deserialize(response.Content, typeof(string), response.Headers); } /// @@ -463,7 +460,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; if (username != null) queryParams.Add("username", ApiClient.ParameterToString(username)); // query parameter @@ -499,7 +496,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -535,7 +532,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -575,7 +572,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -593,10 +590,7 @@ namespace IO.Swagger.Api { throw new ApiException ((int)response.StatusCode, "Error calling GetUserByName: " + response.Content, response.Content); } - // if return type is "String" (not "string"), it implies a Filestream and should return the file path - String returnTypeString = "User"; - Type returnType = returnTypeString == "String" ? typeof(FileStream) : typeof(User); - return (User) ApiClient.Deserialize(response.Content, returnType, response.Headers); + return (User) ApiClient.Deserialize(response.Content, typeof(User), response.Headers); } /// @@ -619,7 +613,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -659,7 +653,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -702,7 +696,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -743,7 +737,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; @@ -784,7 +778,7 @@ namespace IO.Swagger.Api { var queryParams = new Dictionary(); var headerParams = new Dictionary(); var formParams = new Dictionary(); - var fileParams = new Dictionary(); + var fileParams = new Dictionary(); String postBody = null; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs index a6b5c3a91da9..04228fad38c4 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs @@ -39,7 +39,7 @@ namespace IO.Swagger.Client { private Dictionary defaultHeaderMap = new Dictionary(); public Object CallApi(String Path, RestSharp.Method Method, Dictionary QueryParams, String PostBody, - Dictionary HeaderParams, Dictionary FormParams, Dictionary FileParams, String[] AuthSettings) { + Dictionary HeaderParams, Dictionary FormParams, Dictionary FileParams, String[] AuthSettings) { var response = Task.Run(async () => { var resp = await CallApiAsync(Path, Method, QueryParams, PostBody, HeaderParams, FormParams, FileParams, AuthSettings); return resp; @@ -48,7 +48,7 @@ namespace IO.Swagger.Client { } public async Task CallApiAsync(String Path, RestSharp.Method Method, Dictionary QueryParams, String PostBody, - Dictionary HeaderParams, Dictionary FormParams, Dictionary FileParams, String[] AuthSettings) { + Dictionary HeaderParams, Dictionary FormParams, Dictionary FileParams, String[] AuthSettings) { var request = new RestRequest(Path, Method); @@ -71,8 +71,9 @@ namespace IO.Swagger.Client { request.AddParameter(param.Key, param.Value); // add file parameter, if any - foreach(KeyValuePair param in FileParams) - request.AddFile(param.Key, param.Value); + foreach(KeyValuePair param in FileParams) + request.AddFile(param.Value.Name, param.Value.Writer, param.Value.FileName, param.Value.ContentType); + if (PostBody != null) { request.AddParameter("application/json", PostBody, ParameterType.RequestBody); // http body (model) parameter @@ -109,6 +110,21 @@ namespace IO.Swagger.Client { return str; } + /// + /// Create FileParameter based on Stream + /// + /// parameter name + /// Stream + /// FileParameter + public FileParameter ParameterToFile(string name, Stream stream) + { + if (stream is FileStream) { + return FileParameter.Create(name, StreamToByteArray(stream), ((FileStream)stream).Name); + } else { + return FileParameter.Create(name, StreamToByteArray(stream), "temp_name_here"); + } + } + /// /// if parameter is DateTime, output in ISO8601 format /// if parameter is a list of string, join the list with "," @@ -136,10 +152,8 @@ namespace IO.Swagger.Client { public object Deserialize(string content, Type type, IList headers=null) { if (type.GetType() == typeof(Object)) { // return an object return (Object)content; - } else if (type.Name == "FileStream") { // return a file (full path) - // e.g. Content-Disposition: attachment; filename=checkimage.jpp - String fileName; - String filePath; + } else if (type.Name == "Stream") { + String fileName, filePath; if (String.IsNullOrEmpty (Configuration.TempFolderPath)) { filePath = System.IO.Path.GetTempPath (); } else { @@ -154,8 +168,8 @@ namespace IO.Swagger.Client { } else { fileName = filePath + Guid.NewGuid().ToString(); } - System.IO.File.WriteAllText (fileName, content); - return fileName; + File.WriteAllText (fileName, content); + return new FileStream(fileName, FileMode.Open); } else if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) { // return a datetime object return DateTime.Parse(content, null, System.Globalization.DateTimeStyles.RoundtripKind); } else if (type.Name == "String" || type.Name.StartsWith("System.Nullable")) { // return primitive @@ -236,6 +250,26 @@ namespace IO.Swagger.Client { } + /// + /// convert a stream to byte array (byte[]) + /// Ref: http://stackoverflow.com/questions/221925/creating-a-byte-array-from-a-stream + /// + /// input stream + /// Array of Byte + public byte[] StreamToByteArray(Stream input) + { + byte[] buffer = new byte[16*1024]; + using (MemoryStream ms = new MemoryStream()) + { + int read; + while ((read = input.Read(buffer, 0, buffer.Length)) > 0) + { + ms.Write(buffer, 0, read); + } + return ms.ToArray(); + } + } + /// /// Encode string in base64 format /// diff --git a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs index 3bc490c9a585..1c38cae6799f 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs +++ b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs @@ -1,10 +1,12 @@  - + - - + + + + diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs index bc8fe0fb7578..33530cb0b993 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs @@ -119,7 +119,8 @@ namespace SwaggerClient.TestPet { PetApi petApi = new PetApi (); //NOTE: please provide a valid file (full path) - petApi.UploadFile(petId, "new form name", "/var/tmp/small.gif"); + FileStream fileStream = new FileStream("/var/tmp/small.gif", FileMode.Open); + petApi.UploadFile(petId, "new form name", fileStream); } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll index b9ffd217f0c5..b7164e27ba63 100755 Binary files a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll and b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll differ diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb index 2269827753b4..1faa990e2045 100644 Binary files a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb and b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb differ diff --git a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.csproj.FilesWrittenAbsolute.txt b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.csproj.FilesWrittenAbsolute.txt index ff57f8c80e39..9afb7990f577 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.csproj.FilesWrittenAbsolute.txt +++ b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.csproj.FilesWrittenAbsolute.txt @@ -1,8 +1,8 @@ /Users/williamcheng/Code/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/.NETFramework,Version=v4.5.AssemblyAttribute.cs +/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/nunit.framework.dll +/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/Newtonsoft.Json.dll +/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/RestSharp.dll /Users/williamcheng/Code/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb /Users/williamcheng/Code/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll /Users/williamcheng/Code/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll /Users/williamcheng/Code/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll.mdb -/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/nunit.framework.dll -/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/Newtonsoft.Json.dll -/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/RestSharp.dll diff --git a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll index b9ffd217f0c5..b7164e27ba63 100755 Binary files a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll and b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll differ diff --git a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll.mdb b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll.mdb index 2269827753b4..1faa990e2045 100644 Binary files a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll.mdb and b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll.mdb differ