Repository navigation
Expand file tree
/
Copy pathProgram.cs
More file actions
95 lines (72 loc) · 2.88 KB
/
Copy pathProgram.cs
File metadata and controls
95 lines (72 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
using ASPNETCoreLargeFileUploadExamples;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Net.Http.Headers;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<KestrelServerOptions>(options =>
{
options.Limits.MaxRequestBodySize = null;
options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(600);
});
builder.Services.Configure<FormOptions>(options =>
{
options.ValueLengthLimit = int.MaxValue;
options.MultipartBodyLengthLimit = long.MaxValue;
options.MultipartBoundaryLengthLimit = int.MaxValue;
options.MultipartHeadersCountLimit = int.MaxValue;
options.MultipartHeadersLengthLimit = int.MaxValue;
});
var app = builder.Build();
app.MapGet("/", () => Results.Extensions.Html(PageHtml.IndexHtml));
app.MapGet("/uploadcomplete", () => "Upload Complete");
app.MapPost("/upload-iformfile", async ([FromForm] IFormFile file) =>
{
var path = Path.Combine(@"C:\Temp", Path.GetRandomFileName());
await using var stream = File.Create(path);
await file.CopyToAsync(stream);
return Results.Redirect("/uploadcomplete");
});
app.MapPost("/upload-bodyreader", async (HttpRequest request) =>
{
var reader = request.BodyReader;
var path = Path.Combine(@"C:\Temp", Path.GetRandomFileName());
//await using var stream = File.Create(path);
while (true)
{
var result = await reader.ReadAsync();
var buffer = result.Buffer;
//await stream.WriteAsync(buffer.ToArray());
//await stream.FlushAsync();
reader.AdvanceTo(buffer.Start, buffer.End);
if (result.IsCompleted)
{
break;
}
}
return Results.Redirect("/UploadComplete");
});
app.MapPost("/upload-multipartreader", async (HttpRequest request) =>
{
var formOptions = new FormOptions();
var boundary = MultipartRequestHelper.GetBoundary(MediaTypeHeaderValue.Parse(request.ContentType), formOptions.MultipartBoundaryLengthLimit);
var reader = new MultipartReader(boundary, request.Body);
var section = await reader.ReadNextSectionAsync();
while (section != null)
{
var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out var contentDisposition);
if (hasContentDispositionHeader)
{
var path = Path.Combine(@"C:\Temp", Path.GetRandomFileName());
await using var fileStream = File.Create(path);
await using var memoryStream = new MemoryStream();
await section.Body.CopyToAsync(memoryStream);
await fileStream.WriteAsync(memoryStream.ToArray());
}
section = await reader.ReadNextSectionAsync();
}
return Results.Redirect("/uploadcomplete");
});
Console.WriteLine($"Process ID: {Environment.ProcessId}");
app.Run();