67 lines
1.9 KiB
C#
67 lines
1.9 KiB
C#
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}--"));
|
|
}
|
|
}
|