54 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
using System;
 | 
						|
using System.IO;
 | 
						|
using Microsoft.Net.Http.Headers;
 | 
						|
 | 
						|
namespace IRaCIS.Core.API.Utility
 | 
						|
{
 | 
						|
    public static class MultipartRequestHelper
 | 
						|
    {
 | 
						|
        // Content-Type: multipart/form-data; boundary="----WebKitFormBoundarymx2fSWqWSd0OxQqq"
 | 
						|
        // The spec at https://tools.ietf.org/html/rfc2046#section-5.1 states that 70 characters is a reasonable limit.
 | 
						|
        public static string GetBoundary(MediaTypeHeaderValue contentType, int lengthLimit)
 | 
						|
        {
 | 
						|
            var boundary = HeaderUtilities.RemoveQuotes(contentType.Boundary).Value;
 | 
						|
 | 
						|
            if (string.IsNullOrWhiteSpace(boundary))
 | 
						|
            {
 | 
						|
                throw new InvalidDataException("Missing content-type boundary.");
 | 
						|
            }
 | 
						|
 | 
						|
            if (boundary.Length > lengthLimit)
 | 
						|
            {
 | 
						|
                throw new InvalidDataException(
 | 
						|
                    $"Multipart boundary length limit {lengthLimit} exceeded.");
 | 
						|
            }
 | 
						|
 | 
						|
            return boundary;
 | 
						|
        }
 | 
						|
 | 
						|
        public static bool IsMultipartContentType(string contentType)
 | 
						|
        {
 | 
						|
            return !string.IsNullOrEmpty(contentType)
 | 
						|
                   && contentType.IndexOf("multipart/", StringComparison.OrdinalIgnoreCase) >= 0;
 | 
						|
        }
 | 
						|
 | 
						|
        public static bool HasFormDataContentDisposition(ContentDispositionHeaderValue contentDisposition)
 | 
						|
        {
 | 
						|
            // Content-Disposition: form-data; name="key";
 | 
						|
            return contentDisposition != null
 | 
						|
                && contentDisposition.DispositionType.Equals("form-data")
 | 
						|
                && string.IsNullOrEmpty(contentDisposition.FileName.Value)
 | 
						|
                && string.IsNullOrEmpty(contentDisposition.FileNameStar.Value);
 | 
						|
        }
 | 
						|
 | 
						|
        public static bool HasFileContentDisposition(ContentDispositionHeaderValue contentDisposition)
 | 
						|
        {
 | 
						|
            // Content-Disposition: form-data; name="myfile1"; filename="Misc 002.jpg"
 | 
						|
            return contentDisposition != null
 | 
						|
                && contentDisposition.DispositionType.Equals("form-data")
 | 
						|
                && (!string.IsNullOrEmpty(contentDisposition.FileName.Value)
 | 
						|
                    || !string.IsNullOrEmpty(contentDisposition.FileNameStar.Value));
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |