FileName.cs 746 B

12345678910111213141516171819202122232425262728
  1. using System.Security.Cryptography;
  2. namespace RunnersMeet.Server.Persistence;
  3. public class FileName
  4. {
  5. public string Hash { get; }
  6. public string DisplayName { get; }
  7. private FileName(string hash, string displayName)
  8. {
  9. Hash = hash;
  10. DisplayName = displayName;
  11. }
  12. public string GetPath()
  13. {
  14. return Path.Combine(Hash.Substring(0, 2), Hash.Substring(2, 2), Hash);
  15. }
  16. public static async Task<FileName> FromFormUploadAsync(IFormFile file, string? displayName, CancellationToken cancellationToken = default)
  17. {
  18. var sha1 = SHA1.Create();
  19. var hash = Convert.ToHexString(await sha1.ComputeHashAsync(file.OpenReadStream(), cancellationToken));
  20. return new FileName(hash, displayName ?? file.FileName);
  21. }
  22. }