<PackageReference Include="Azure.Storage.Blobs" Version="12.26.0" />

MultipartFormDataRequestContent

using Azure.Core.Pipeline; using System; using System.Globalization; using System.IO; using System.Net.Http; using System.Net.Http.Headers; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; namespace Azure.Storage.Common { internal class MultipartFormDataRequestContent { private readonly MultipartFormDataContent _multipartContent; private static readonly Random _random = new Random(); private static readonly char[] _boundaryValues = "0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".ToCharArray(); public string ContentType => _multipartContent.Headers.ContentType.ToString(); internal HttpContent HttpContent => _multipartContent; public MultipartFormDataRequestContent() : this() { _multipartContent = new MultipartFormDataContent(CreateBoundary()); } private static string CreateBoundary() { Span<char> span = new char[70]; byte[] array = new byte[70]; _random.NextBytes(array); int num = 63; for (int i = 0; i < 70; i++) { span[i] = _boundaryValues[array[i] & num]; } return span.ToString(); } public void Add(string content, string name, string filename = null, string contentType = null) { Argument.AssertNotNull(content, "content"); Argument.AssertNotNullOrEmpty(name, "name"); Add((HttpContent)new StringContent(content), name, filename, contentType); } public void Add(int content, string name, string filename = null, string contentType = null) { Argument.AssertNotNull(content, "content"); Argument.AssertNotNullOrEmpty(name, "name"); string content2 = content.ToString("G", CultureInfo.InvariantCulture); Add((HttpContent)new StringContent(content2), name, filename, contentType); } public void Add(long content, string name, string filename = null, string contentType = null) { Argument.AssertNotNull(content, "content"); Argument.AssertNotNullOrEmpty(name, "name"); string content2 = content.ToString("G", CultureInfo.InvariantCulture); Add((HttpContent)new StringContent(content2), name, filename, contentType); } public void Add(float content, string name, string filename = null, string contentType = null) { Argument.AssertNotNull(content, "content"); Argument.AssertNotNullOrEmpty(name, "name"); string content2 = content.ToString("G", CultureInfo.InvariantCulture); Add((HttpContent)new StringContent(content2), name, filename, contentType); } public void Add(double content, string name, string filename = null, string contentType = null) { Argument.AssertNotNull(content, "content"); Argument.AssertNotNullOrEmpty(name, "name"); string content2 = content.ToString("G", CultureInfo.InvariantCulture); Add((HttpContent)new StringContent(content2), name, filename, contentType); } public void Add(decimal content, string name, string filename = null, string contentType = null) { Argument.AssertNotNull(content, "content"); Argument.AssertNotNullOrEmpty(name, "name"); string content2 = content.ToString("G", CultureInfo.InvariantCulture); Add((HttpContent)new StringContent(content2), name, filename, contentType); } public void Add(bool content, string name, string filename = null, string contentType = null) { Argument.AssertNotNull(content, "content"); Argument.AssertNotNullOrEmpty(name, "name"); string content2 = content ? "true" : "false"; Add((HttpContent)new StringContent(content2), name, filename, contentType); } public void Add(Stream content, string name, string filename = null, string contentType = null) { Argument.AssertNotNull(content, "content"); Argument.AssertNotNullOrEmpty(name, "name"); Add((HttpContent)new StreamContent(content), name, filename, contentType); } public void Add(byte[] content, string name, string filename = null, string contentType = null) { Argument.AssertNotNull(content, "content"); Argument.AssertNotNullOrEmpty(name, "name"); Add((HttpContent)new ByteArrayContent(content), name, filename, contentType); } public void Add(BinaryData content, string name, string filename = null, string contentType = null) { Argument.AssertNotNull<BinaryData>(content, "content"); Argument.AssertNotNullOrEmpty(name, "name"); Add((HttpContent)new ByteArrayContent(content.ToArray()), name, filename, contentType); } private void Add(HttpContent content, string name, string filename, string contentType) { if (filename != null) { Argument.AssertNotNullOrEmpty(filename, "filename"); AddFilenameHeader(content, name, filename); } if (contentType != null) { Argument.AssertNotNullOrEmpty(contentType, "contentType"); AddContentTypeHeader(content, contentType); } _multipartContent.Add(content, name); } public static void AddFilenameHeader(HttpContent content, string name, string filename) { ContentDispositionHeaderValue contentDisposition = new ContentDispositionHeaderValue("form-data") { Name = name, FileName = filename }; content.Headers.ContentDisposition = contentDisposition; } public static void AddContentTypeHeader(HttpContent content, string contentType) { MediaTypeHeaderValue contentType2 = new MediaTypeHeaderValue(contentType); content.Headers.ContentType = contentType2; } public override bool TryComputeLength(out long length) { long? contentLength = _multipartContent.Headers.ContentLength; if (contentLength.HasValue) { long num = length = contentLength.GetValueOrDefault(); return true; } length = 0; return false; } public override void WriteTo(Stream stream, CancellationToken cancellationToken = default(CancellationToken)) { _multipartContent.CopyToAsync(stream).EnsureCompleted(); } [AsyncStateMachine(typeof(<WriteToAsync>d__24))] public override Task WriteToAsync(Stream stream, CancellationToken cancellationToken = default(CancellationToken)) { <WriteToAsync>d__24 stateMachine = default(<WriteToAsync>d__24); stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create(); stateMachine.<>4__this = this; stateMachine.stream = stream; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } public override void Dispose() { _multipartContent.Dispose(); } } }