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));
 | |
|         }
 | |
|     }
 | |
| }
 |