#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. Это не так.