Загрузите PDF/изображение/любой файл в ASP.NET Core 8, где файл поступает из HttpResponseMessage.Content веб-API.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Загрузите PDF/изображение/любой файл в ASP.NET Core 8, где файл поступает из HttpResponseMessage.Content веб-API.

Сообщение Anonymous »

У меня возникла проблема с загрузкой файла в ASP.NET Core или, возможно, я пишу неправильный код.
У меня есть веб-API ASP.NET Core с некоторыми методы для GetAllFiles, Upload и Download файлов.
В контроллере моего API есть один метод для загрузки файла (код показан здесь):

Код: Выделить всё

[HttpGet("{id}")]
public async Task DownloadFile(Guid id)
{
var fileInDb = pdfRepository.GetByIdAsync(x => x.Pdf_Pk == id, false);

if (fileInDb == null)
{
return NotFound();
}

// var fileName = _data.PdfDetail.Where(x => x.Pdf_Pk == id).Select(x => x.FileName).FirstOrDefault();
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "root\\Files", fileInDb.Result.FileName);
var provider = new FileExtensionContentTypeProvider();

if (!provider.TryGetContentType(filePath, out var contentType))
{
contentType = "application/octet-stream";
}

var bytes = await System.IO.File.ReadAllBytesAsync(filePath);
return File(bytes, contentType, Path.GetFileName(filePath));
}
Здесь я возвращаю файл.
Я вызываю этот метод из контроллера моего веб-приложения.
Код для загрузки:

Код: Выделить всё

public async Task Download(Guid Id)
{
return RedirectToAction("Index" ,await PdfServices.DownloadAsync(Id));
}
Здесь PdfServices.DownloadAsync — это метод службы, код показан здесь:

Код: Выделить всё

public Task DownloadAsync(Guid Id)
{
return SendAsync(new ApiRequest()
{
type = APIRequestHeader.APIRequest.ApiType.Get,
Data = Id,
Url = ApiUrl + "/api/PdfManager/"+Id
});
}
Теперь я вызываю этот метод SendAsync, который используется для отправки запросов к методам API и поиска содержимого, и выполняю здесь сериализацию/десериализацию

Код: Выделить всё

public async Task SendAsync(ApiRequest request)
{
try
{
var client = httpClientFactory.CreateClient("PdfManager");
HttpRequestMessage message = new();
message.Headers.Add("Accept", "Applicaiton/Json");
message.RequestUri = new Uri(request.Url);

if (request.Data != null)
{
message.Content = new StringContent(JsonConvert.SerializeObject(request.Data), Encoding.UTF8, "Application/Json");
}

switch(request.type)
{
case APIRequest.ApiType.Post:
message.Method = HttpMethod.Post;
break;

case APIRequest.ApiType.Put:
message.Method = HttpMethod.Put;
break;

case APIRequest.ApiType.Delete:
message.Method = HttpMethod.Delete;
break;

default:
message.Method = HttpMethod.Get;
break;
}

HttpResponseMessage hrm = null;
hrm = await client.SendAsync(message);
var apiContent = await hrm.Content.ReadAsStringAsync();

if (true)   // don't know what to write in this, to download this file
{
var readByte = hrm.Content.ReadAsByteArrayAsync();

using(MemoryStream ms =new MemoryStream(readByte.Result))
{
var writer = new BinaryWriter(ms, Encoding.UTF8, false);

var res = new FileContentResult(readByte.Result, hrm.Content.Headers.ContentType.MediaType);
//return (T)res;
var test = JsonConvert.DeserializeObject(res);
}
}

var apiResponse = JsonConvert.DeserializeObject(apiContent);

return apiResponse;
}
catch (Exception ex)
{
var dto = new ApiResponse
{
ErrorMessage = new List  { Convert.ToString(ex.ToString())},
IsSuccess = false
};
var res = JsonConvert.SerializeObject(dto);
var ApiResponse = JsonConvert.DeserializeObject(res);

return ApiResponse;
}
}
Теперь метод будет использоваться для всех операций, таких как GetAllFiles, UploadingFiles, DeletingFiles, а также DownloadFile.
Поскольку мы возвращаем файл из контроллера API, как я могу загрузить этот файл?
Я не могу прочитать содержимое в виде строки:

Код: Выделить всё

 hrm.Content.ReadAsStringAsync();
поскольку наш контент не является строкой, он содержит файлы
Если я читаю его как ByteArray, то я не способен десериализовать объект, потому что он запросит тип.
Как я могу загрузить этот файл, поступающий в контент из контроллера API? Как мне это прочитать, что вернуть?

Подробнее здесь: https://stackoverflow.com/questions/784 ... om-web-api
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как показать изображение в HttpResponseMessage.Content.Headers.ContentType
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • .net httpclient, httpresponsemessage.content.readassstreamasync - Проблема с памятью
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • .Net 7 httpclient, httpresponsemessage.content.readassstreamasync - Проблемы с памятью
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»