2016-08-10 3 views
2

Я использую asp.net web api для загрузки изображений в хранилище azure blob. Код контроллера кода выглядит следующим образом и я нашел поиск в Интернете (не могу вспомнить, где было время назад). В любом случае это отлично работает. Однако, так как другие файлы, кроме изображений, могут быть загружены в лазурь, я бы хотел, чтобы проверить, является ли файл и образ. Я видел, как другие спрашивали об этом, но не смогли реализовать его, используя приведенный ниже код.Как проверить только изображения, загруженные с помощью asp.net web api?

Вопрос

Как проверить, является ли файл образа, используя приведенный ниже код? И если возможно, что было бы лучшей практикой/самым безопасным способом проверки этого? Любая помощь или ввод оцениваются.

EDIT

Обновлено с кодом я пытался реализовать, не работает, хотя

[HttpPost] 
    [Route("api/uploadImage")] 
    [ResponseType(typeof(List<BlobUploadModel>))] 
    public async Task<IHttpActionResult> PostBlobUpload() 
    { 
     try 
     { 
      // This endpoint only supports multipart form data 
      if (!Request.Content.IsMimeMultipartContent("form-data")) 
      { 
       return StatusCode(HttpStatusCode.UnsupportedMediaType); 
      } 

      //Added this code to convert to Byte and check if it is a image 
      Byte[] byteArray = await Request.Content.ReadAsByteArrayAsync(); 
      bool isvalidImage = IsValidImage(byteArray); 

      if (isvalidImage == false) 
      { 
       return BadRequest(); 
      } 


      // Call service to perform upload, then check result to return as content 
      var result = await _service.UploadBlobs(Request.Content); 
      if (result != null && result.Count > 0) 
      { 
       return Ok(result); 
      } 

      // Otherwise 
      return BadRequest(); 
     } 
     catch (Exception ex) 
     { 
      return InternalServerError(ex); 
     } 
    } 



    //Method that is being called to validate if image 
    public static bool IsValidImage(byte[] bytes) 
    { 
     try 
     { 
      using (MemoryStream ms = new MemoryStream(bytes)) 
       Image.FromStream(ms); 
     } 
     catch (ArgumentException) 
     { 
      return false; 
     } 
     return true; 
    } 

ответ

1

Вы должны добавить проверку, как это было предложено в ссылке ниже, чтобы проверить ByteArray, который принимается, в противном случае возврат BadRequest. How to check if a byte array is a valid image?

+0

Как вы думаете, вы можете помочь в реализации этого решения в добавленном мной коде. Я новичок и не знаю, как использовать их вместе, спасибо за ссылку! – mattias

+0

Что вы получаете в Request.Content, можете ли вы отлаживать и проверять? – GauravKP

+0

Думаю, я нашел способ сделать это, не уверен, что лучше всего практиковать. Я добавил код Byte [] byteArray = await Request.Content.ReadAsByteArrayAsync(); так что я тогда могу проверить byteArray с кодом из вашей общей ссылки – mattias

Смежные вопросы