multipart/form-data support
This commit is contained in:
66
Network/Platforms/iOS/Structs/NSMultipartFormData.cs
Normal file
66
Network/Platforms/iOS/Structs/NSMultipartFormData.cs
Normal file
@ -0,0 +1,66 @@
|
||||
using Foundation;
|
||||
|
||||
namespace Blahblah.Library.Network;
|
||||
|
||||
class NSMultipartFormData
|
||||
{
|
||||
public const string DefaultMimeType = "application/octet-stream";
|
||||
|
||||
public NSMutableData Data => boundaryData;
|
||||
|
||||
readonly string boundary;
|
||||
readonly NSMutableData boundaryData;
|
||||
|
||||
public string ContentType => $"{NetworkHelper.ContentFormData}; boundary={boundary}";
|
||||
|
||||
public NSMultipartFormData()
|
||||
{
|
||||
var data = new byte[12];
|
||||
for (var i = 0; i < 12; i++)
|
||||
{
|
||||
data[i] = (byte)(Random.Shared.Next(0x30, 0x3a));
|
||||
}
|
||||
var id = Convert.ToBase64String(data);
|
||||
boundary = $"----WebKitFormBoundary{id}";
|
||||
boundaryData = new NSMutableData();
|
||||
}
|
||||
|
||||
public void AddTextField(string name, string value)
|
||||
{
|
||||
// Content-Type: text/plain; charset=ISO-8859-1
|
||||
// Content-Transfer-Encoding: 8bit
|
||||
|
||||
var field = $"--{boundary}\r\n" +
|
||||
$"Content-Disposition: form-data; name=\"{name}\"\r\n\r\n" +
|
||||
$"{value}\r\n";
|
||||
boundaryData.AppendData(NSData.FromString(field, NSStringEncoding.UTF8));
|
||||
}
|
||||
|
||||
public void AddDataField(string name, Stream data, string? fileName = null, string mimeType = DefaultMimeType)
|
||||
{
|
||||
if (fileName == null)
|
||||
{
|
||||
fileName = "";
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(fileName))
|
||||
{
|
||||
fileName = $"; filename=\"{fileName}\"";
|
||||
}
|
||||
var field = $"--{boundary}\r\n" +
|
||||
$"Content-Disposition: form-data; name=\"{name}\"{fileName}\r\n" +
|
||||
$"Content-Type: {mimeType}\r\n\r\n";
|
||||
boundaryData.AppendData(NSData.FromString(field, NSStringEncoding.UTF8));
|
||||
|
||||
var stream = NSData.FromStream(data);
|
||||
if (stream != null)
|
||||
{
|
||||
boundaryData.AppendData(stream);
|
||||
}
|
||||
boundaryData.AppendData(NSData.FromString("\r\n"));
|
||||
}
|
||||
|
||||
public void AddEnd()
|
||||
{
|
||||
boundaryData.AppendData(NSData.FromString($"--{boundary}--"));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user