FileName.cs 870 B

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