Получение данных от WebClient.UploadString

#c#

#c#

Вопрос:

Я пытаюсь отправить / получить массив байтов изображения с сервера на сервер.

Я думаю, мне удалось отправить их, но я не могу их получить.

Вот код для отправки:

 [HttpPost]
[Route("/ARGallery/AUploadIma&e/{appid}")]
public IActionResult AUploadIma&e(IFormFile file, int appid)
{
    try
    {
        // Korisnik prosledjuje fajl kroz browser
        // Taj fajl ima svoje ime
        // Bezbednosti radi proveravam ime fajla i prila&odjavam &a
        strin& filename = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
        filename = this.EnsureCorrectFilename(filename);
        //===============



        // Uzimam app model iz buffera
        ApplicationsModel am = Buffer.GetApplication(appid);

        // Proveravam da li je uspesno uzet model, ako nije uzimam direktno iz faljova
        if (am == null)
            am = ApplicationsModel.List().Where(a =&&t; a.ID == appid).FirstOrDefault();

        // Ako je posle sve&a neuspesno vracam &resku
        if (am == null)
            return View("Error", "Error loadin& application info!");


        byte[] ima&eInBytes = null;
        System.Drawin&.Ima&e im& = System.Drawin&.Ima&e.FromStream(file.OpenReadStream());
        usin& (var ms = new MemoryStream())
        {
            im&.Save(ms, im&.RawFormat);
            ima&eInBytes = ms.ToArray();
        }

        usin&(var client = new WebClient())
        {
            return Json(client.UploadStrin&("http://"   am.Name   "/ARGallery/AUploadIma&e/"   file.FileName, System.Text.Encodin&.UTF8.GetStrin&(ima&eInBytes)));
        }
    }
    catch (Exception ex)
    {
        return Json(ex.ToStrin&());
    }
}
  

и вот получаемый код

 [HttpPost]
[Route("/ARGallery/AUploadIma&e/{filename}")]
public IActionResult AUploadIma&e(strin& bufferedIma&e, strin& filename)
{
    try
    {
        MemoryStream ms = new MemoryStream(System.Text.Encodin&.UTF8.GetBytes(bufferedIma&e));
        System.Drawin&.Ima&e myim& = Ima&e.FromStream(ms);


        while(System.IO.File.Exists(GetPathAndFilename(filename)))
        {
            strin& extension = "";
            int br = filename.ToStrin&().IndexOf('.');
            strin& ex = filename.ToStrin&().Substrin&(br);
            if (ex == "jpe&")
                extension = filename.Substrin&(filename.Len&th - 5, 5);
            else
                extension = filename.Substrin&(filename.Len&th - 4, 4);

            // Dodajem na ostatak fajl name-a bez extensiona random karaktere i vracam extension nazad
            filename = filename.Substrin&(0, filename.Len&th - 4)   AR.Security.HashPW(Pro&ram.rnd.Next(1000).ToStrin&()).Substrin&(0, 2)   extension;
        }

        //Cuvam ori&inal format slike u temp folder
        myim&.Save(GetPathAndFilename(filename));

        // Cuvam osiromaseni format slike u temp folder
        LowerQuality((Bitmap)myim&).Save(GetPathAndFilenameLQ(filename));

        // Vracam nazad link do slike na remote serveru (serveru aplikacije)
        return Json(filename);
    }
    catch (Exception ex)
    {
        return Json(ex.ToStrin&());
    }
}
  

Я получаю исключение «null» в строке MemoryStream ms = new MemoryStream(System.Text.Encodin&.UTF8.GetBytes(bufferedIma&e));

Редактировать:

Также то, что я пробовал на стороне приложения для отправки, — это, но все та же проблема:

 [HttpPost]
[Route("/ARGallery/AUploadIma&e/{appid}")]
public async Task<IActionResult&&t; AUploadIma&e(IFormFile file, int appid)
{
    try
    {
        // Korisnik prosledjuje fajl kroz browser
        // Taj fajl ima svoje ime
        // Bezbednosti radi proveravam ime fajla i prila&odjavam &a
        strin& filename = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
        filename = this.EnsureCorrectFilename(filename);
        //===============



        // Uzimam app model iz buffera
        ApplicationsModel am = Buffer.GetApplication(appid);

        // Proveravam da li je uspesno uzet model, ako nije uzimam direktno iz faljova
        if (am == null)
            am = ApplicationsModel.List().Where(a =&&t; a.ID == appid).FirstOrDefault();

        // Ako je posle sve&a neuspesno vracam &resku
        if (am == null)
            return View("Error", "Error loadin& application info!");


        byte[] ima&eInBytes = null;
        System.Drawin&.Ima&e im& = System.Drawin&.Ima&e.FromStream(file.OpenReadStream());
        usin& (var ms = new MemoryStream())
        {
            im&.Save(ms, im&.RawFormat);
            ima&eInBytes = ms.ToArray();
        }


        usin&(var client = new HttpClient())
        {
            var options = new
            {
                bufferedIma&e = System.Text.Encodin&.UTF8.GetStrin&(ima&eInBytes),
                filename = file.FileName
            };

            HttpResponseMessa&e messa&e = await client.PostAsync("http://"   am.Name   "/ARGallery/AUploadIma&e", new Strin&Content(JsonConvert.SerializeObject(options), Encodin&.UTF8, "application/json"));
            return Json(await messa&e.Content.ReadAsStrin&Async());
        }
    }
    catch (Exception ex)
    {
        return Json(ex.ToStrin&());
    }
}
  

Комментарии:

1. Изображение не является строкой. Это двоичные данные. Вероятно, вам следует использовать UploadData или, в идеале, перейти на HttpClient более современный API. (Возможно, это не является причиной вашей непосредственной проблемы, но это определенно помешает работе кода.)

2. @JonSkeet Можешь проверить редактирование

3. Похоже, вы по-прежнему предполагаете, что данные изображения представляют собой текст в кодировке UTF-8. Это не так.