Skip to content

Commit 8268566

Browse files
committed
utf-8 media type header parse fix
1 parent e86c5ea commit 8268566

File tree

7 files changed

+58
-2
lines changed

7 files changed

+58
-2
lines changed

src/NetCoreStack.Proxy/Binders/BodyContentBinder.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using NetCoreStack.Contracts;
33
using System;
44
using System.Collections.Generic;
5+
using System.Diagnostics;
56
using System.IO;
67
using System.Linq;
78
using System.Net.Http;
@@ -27,7 +28,21 @@ protected virtual void AddFile(string key, MultipartFormDataContent multipartFor
2728
{
2829
formFile.CopyTo(ms);
2930
var fileContent = new ByteArrayContent(ms.ToArray());
30-
fileContent.Headers.ContentType = new MediaTypeHeaderValue(formFile.ContentType) { CharSet = Encoding.UTF8.WebName };
31+
32+
if (MediaTypeHeaderValue.TryParse(formFile.ContentType, out MediaTypeHeaderValue media))
33+
{
34+
if (media.CharSet == null)
35+
{
36+
media.CharSet = Encoding.UTF8.WebName;
37+
}
38+
39+
fileContent.Headers.ContentType = media;
40+
}
41+
else
42+
{
43+
// TODO Log
44+
}
45+
3146
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue(formData)
3247
{
3348
Name = formFile.Name,
11.1 KB
Binary file not shown.

test/NetCoreStack.Proxy.Tests/NetCoreStack.Proxy.Tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
<None Update="ObjFile.txt">
3030
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
3131
</None>
32+
<None Update="SampleĞüişçWord.docx">
33+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
34+
</None>
3235
</ItemGroup>
3336

3437
</Project>

test/NetCoreStack.Proxy.Tests/ProxyCreationTests.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,31 @@ public async Task GetSingleFileWithKeyTemplate()
159159
Assert.True(true);
160160
}
161161

162+
[Fact]
163+
public async Task GetSingleFileWithKeyTemplateAndUtf8()
164+
{
165+
var proxy = Resolver.GetService<IFileProxyApi>();
166+
167+
await proxy.UploadAsync(new FileProxyUploadContext
168+
{
169+
Directory = "5a6ee0791653ff2348f1cd32",
170+
Files = new[]
171+
{
172+
TestHelper.GetFormFile("files", "SampleĞüişçWord.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document; charset=utf-8")
173+
}
174+
});
175+
176+
Assert.True(true);
177+
}
178+
162179
[Fact]
163180
public async Task TaskSingleFileModel()
164181
{
165182
var guidelineApi = Resolver.GetService<IGuidelineApi>();
166183

167184
var model = new SingleFileModel
168185
{
169-
File = TestHelper.GetFormFile("file")
186+
File = TestHelper.GetFormFile("file", "SampleĞüişçWord.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document; charset=utf-8")
170187
};
171188

172189
await guidelineApi.TaskSingleFileModel(model);
11.1 KB
Binary file not shown.

test/NetCoreStack.Proxy.Tests/TestHelper.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Microsoft.Extensions.Primitives;
99
using Microsoft.Net.Http.Headers;
1010
using Moq;
11+
using NetCoreStack.Mvc.Helpers;
1112
using NetCoreStack.Proxy.Test.Contracts;
1213
using System;
1314
using System.Collections.Generic;
@@ -112,5 +113,25 @@ public static FormFile GetFormFile(string name, string fileName = "")
112113

113114
return formFile;
114115
}
116+
117+
public static FormFile GetFormFile(string name, string fileName, string contentType = null)
118+
{
119+
var bytes = File.ReadAllBytes(fileName);
120+
var length = bytes.Length;
121+
var ms = new MemoryStream(bytes);
122+
123+
contentType = contentType ?? MimeTypeHelper.Resolve(Path.GetExtension(fileName));
124+
125+
var formFile = new FormFile(ms, 0, length, name, fileName)
126+
{
127+
Headers = new HeaderDictionary
128+
{
129+
[HeaderNames.ContentType] = contentType,
130+
[HeaderNames.ContentDisposition] = $"form-data; name=\"{name}\"; filename=\"{fileName}\""
131+
}
132+
};
133+
134+
return formFile;
135+
}
115136
}
116137
}
0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)