/aspnetcore/mvc/models/file-uploads/samples/3.x/SampleApp/Utilities/MultipartRequestHelper.cs

https://github.com/aspnet/AspNetCore.Docs · C# · 53 lines · 42 code · 7 blank · 4 comment · 11 complexity · 5941cf54e3dc829fdce5ca06bfccd554 MD5 · raw file

  1. using System;
  2. using System.IO;
  3. using Microsoft.Net.Http.Headers;
  4. namespace SampleApp.Utilities
  5. {
  6. public static class MultipartRequestHelper
  7. {
  8. // Content-Type: multipart/form-data; boundary="----WebKitFormBoundarymx2fSWqWSd0OxQqq"
  9. // The spec at https://tools.ietf.org/html/rfc2046#section-5.1 states that 70 characters is a reasonable limit.
  10. public static string GetBoundary(MediaTypeHeaderValue contentType, int lengthLimit)
  11. {
  12. var boundary = HeaderUtilities.RemoveQuotes(contentType.Boundary).Value;
  13. if (string.IsNullOrWhiteSpace(boundary))
  14. {
  15. throw new InvalidDataException("Missing content-type boundary.");
  16. }
  17. if (boundary.Length > lengthLimit)
  18. {
  19. throw new InvalidDataException(
  20. $"Multipart boundary length limit {lengthLimit} exceeded.");
  21. }
  22. return boundary;
  23. }
  24. public static bool IsMultipartContentType(string contentType)
  25. {
  26. return !string.IsNullOrEmpty(contentType)
  27. && contentType.IndexOf("multipart/", StringComparison.OrdinalIgnoreCase) >= 0;
  28. }
  29. public static bool HasFormDataContentDisposition(ContentDispositionHeaderValue contentDisposition)
  30. {
  31. // Content-Disposition: form-data; name="key";
  32. return contentDisposition != null
  33. && contentDisposition.DispositionType.Equals("form-data")
  34. && string.IsNullOrEmpty(contentDisposition.FileName.Value)
  35. && string.IsNullOrEmpty(contentDisposition.FileNameStar.Value);
  36. }
  37. public static bool HasFileContentDisposition(ContentDispositionHeaderValue contentDisposition)
  38. {
  39. // Content-Disposition: form-data; name="myfile1"; filename="Misc 002.jpg"
  40. return contentDisposition != null
  41. && contentDisposition.DispositionType.Equals("form-data")
  42. && (!string.IsNullOrEmpty(contentDisposition.FileName.Value)
  43. || !string.IsNullOrEmpty(contentDisposition.FileNameStar.Value));
  44. }
  45. }
  46. }