Загрузить изображение в URI, используя HttpClient - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок ie о вещах, связанных с http, поэтому я немного сложен.

То, что я хочу, это просто, мне нужно POST, загрузить изображение на сервер, как это : http://web.com/imageGalerry.

Я думаю, что это не слишком сложно , но я не знаю, почему я не получаю ошибки и до сих пор я не уверен, как продолжить (потому что изображение не загрузить на самом деле), это мой код:

public async Task<object> UpdateGalleryResources(IFormFile file, int idResouce)
        {
            byte[] data;
            string result = "";
            ByteArrayContent bytes;
            var urlToPost = "http://hello.uk/imagegallery/resources/" + 00+ "/" + file.FileName;

            MultipartFormDataContent multiForm = new MultipartFormDataContent();

            try
            {
                using (var client = new HttpClient())
                {
                    using (var br = new BinaryReader(file.OpenReadStream()))
                    {
                        data = br.ReadBytes((int)file.OpenReadStream().Length);
                    }

                    bytes = new ByteArrayContent(data);
                    multiForm.Add(bytes, "file", file.FileName);
                    //multiForm.Add(new StringContent("value1"), "key1");
                    //multiForm.Add(new StringContent("value2"), "key2");


                    var res = await client.PostAsync(urlToPost, multiForm);
                    return res;
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.ToString());
            }
        }

Это представление:

<form action="/Galley/UpdateGallery"  method="post" class="dropzone" id="myDropzone">

    <input type="hidden" value="1" name="idResource" />

</form>

и Dropzone js Я использую для обработки представления:

document.addEventListener("DOMContentLoaded", function () {

    // access Dropzone here
    //dropzone.js detecta la version 'camelized' cuando el div tiene la clase dropzone
    Dropzone.options.myDropzone = {
        addRemoveLinks: true,
        //autoProcessQueue: false,
.....
       }

И вот код ошибки, который я получаю от return res

  {StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.HttpConnection+HttpConnectionResponseContent, Headers:
{
  Server: Microsoft-IIS/8.5
  X-Powered-By: ASP.NET
  Date: Thu, 23 Apr 2020 08:22:52 GMT
  Content-Type: text/html
  Content-Length: 1282
}}

Это то, что я проверяю в режиме отладки, все, что я думаю, выглядит правильно: enter image description here

Можете ли вы помочь мне в том, что я делаю неправильно? Спасибо.

1 Ответ

1 голос
/ 23 апреля 2020

В прошлом я считал, что следующие две части кода важны при загрузке изображений в контроллер ASP. Net в виде IFormFile

. В теге формы в вашем представлении добавьте атрибут enctype.

<form enctype="multipart/form-data" othertags="..."></form>

Для объяснения того, что означает multipart / form-data: Что означает enctype = 'multipart / form-data'?

Затем добавьте правильное привязка к параметрам вашего контроллера

public async Task<object> UpdateGalleryResources([FromForm]IFormFile file, int idResouce)

Я не уверен, как это будет работать с dropzone, но если IFormFile в контроллере выглядит как ноль, возможно, стоит попробовать

...