Advertisement
Guest User

Untitled

a guest
May 27th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.09 KB | None | 0 0
  1. using System.IO;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using API.Services;
  5. using Microsoft.AspNetCore.Hosting;
  6. using Microsoft.AspNetCore.Http;
  7. using Microsoft.AspNetCore.Mvc;
  8. using Models.Places.Repositories;
  9. using Model = Models.Places;
  10.  
  11. namespace API.Controllers
  12. {
  13.     [Route("upload")]
  14.     public sealed class UploadController : ControllerBase
  15.     {
  16.         private readonly IHostingEnvironment hostingEnvironment;
  17.         private readonly IPlaceRepository placeRepository;
  18.  
  19.         public UploadController(IHostingEnvironment hostingEnvironment, IPlaceRepository placeRepository)
  20.         {
  21.             this.hostingEnvironment = hostingEnvironment;
  22.             this.placeRepository = placeRepository;
  23.         }
  24.        
  25.         /// <summary>
  26.         /// Загружает аватарку заведения
  27.         /// </summary>
  28.         /// <param name="id">Идентификатор заведения</param>
  29.         /// <param name="avatar">Картинка аватарки</param>
  30.         /// <param name="cancellationToken"></param>
  31.         /// <response code="200">Созданная аватарка</response>
  32.         /// <response code="400">Если аватарку забыли указать, или она оказалась некорректной</response>
  33.         [HttpPost]
  34.         [Route("")]
  35.         [ProducesResponseType(200)]
  36.         [ProducesResponseType(400)]
  37.         public async Task<IActionResult> UploadAvatarAsync(string id, IFormFile avatar, CancellationToken cancellationToken)
  38.         {
  39.             cancellationToken.ThrowIfCancellationRequested();
  40.            
  41.             if (id == null)
  42.             {
  43.                 var error = ServiceErrorResponses.BodyIsMissing(nameof(id));
  44.                 return BadRequest(error);
  45.             }
  46.            
  47.             if (avatar == null)
  48.             {
  49.                 var error = ServiceErrorResponses.BodyIsMissing(nameof(avatar));
  50.                 return BadRequest(error);
  51.             }
  52.  
  53.             const int maxFileLength = 1024 * 512;
  54.             var extension = Path.GetExtension(avatar.FileName);
  55.             var path = $"/avatars/{id}{extension}";
  56.             var stream = avatar.OpenReadStream();
  57.  
  58.             if (avatar.Length > 0 && avatar.Length <= maxFileLength && ImageValidationService.IsImage(stream))
  59.             {
  60.                 using (var fileStream = new FileStream($"{hostingEnvironment.WebRootPath}{path}", FileMode.Create))
  61.                 {
  62.                     await avatar.CopyToAsync(fileStream, cancellationToken).ConfigureAwait(false);
  63.                 }
  64.                
  65.                 var placePatchInfo = new Model.PlacePatchInfo(id, null, path);
  66.                 await placeRepository.PatchAsync(placePatchInfo, cancellationToken).ConfigureAwait(false);
  67.             }
  68.             else
  69.             {
  70.                 var error = ServiceErrorResponses.InvalidImageData(nameof(avatar));
  71.                 return BadRequest(error);
  72.             }
  73.  
  74.             var clientAvatar = new ClientModels.Avatar(path);
  75.             return Ok(clientAvatar);
  76.         }
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement