我当前在 .NET (c#) 后端中,对外部 URL 进行 GET 调用,该调用返回
responseType: 'stream'
。 在这种情况下,它正在流回数据,一旦完成,该数据应该是有效的 .PDF 文件。 从 Postman 调用此外部 API 工作正常并显示 pdf,但我的代码似乎没有获取所有流数据,导致文件无效。
这是我的功能:
private async Task<string?> ReadFileData(string url)
{
string fileData = null;
using (var response = await _httpClient.GetAsync(url))
{
response.EnsureSuccessStatusCode();
var stream = await response.Content.ReadAsStreamAsync();
fileData += await response.Content.ReadAsStringAsync();
}
return fileData;
}
只是我尝试过的事情之一,但我似乎没有流式传输整个数据集,尽管我得到了应该是数百行(原始文本)pdf 文件的前 15 行左右,我做了很多研究,但似乎没有发现任何东西。 我确信我错过了一些关于数据流的愚蠢的东西,如果有人有任何煽动那就太好了
只是我尝试过的事情之一,但我似乎没有流媒体 整个数据集,尽管我得到了前 15 行左右 应该是一个数百行(原始文本)的pdf文件,我做了 进行了相当多的研究,但似乎没有发现任何东西。
根据您的场景和描述以及共享的代码片段,我已尝试解决您的问题。
根据我的测试,您代码中的问题在于您处理响应内容的方式。您正在尝试将内容作为字符串读取,这不适合 PDF 文件等二进制数据。相反,您需要正确处理流。
为了解决这个问题,请使用 ReadAsStreamAsync 将流数据读取到
MemoryStream
中,然后将其转换为 byte array
,然后您可以根据需要对其进行处理或保存。以下是您如何调用 ReadFileDataAsync
方法并将数据保存到文件(如果需要):
[Route("api/[controller]")]
[ApiController]
public class FileAccessController : ControllerBase
{
private readonly HttpClient _httpClient;
public FileAccessController(IHttpClientFactory httpClientFactory)
{
_httpClient = httpClientFactory.CreateClient();
}
[HttpGet("download-file")]
public async Task<IActionResult> DownloadFile(string url)
{
try
{
//Passing the url to the file content reading method
byte[] fileData = await ReadFileDataAsync(url);
// I am Returning the file as a FileResult
return File(fileData, "application/pdf", "downloaded-file.pdf");
}
catch (Exception ex)
{
return StatusCode(500, $"An error occurred: {ex.Message}");
}
}
private async Task<byte[]> ReadFileDataAsync(string url)
{
using (var response = await _httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead))
{
response.EnsureSuccessStatusCode();
using (var stream = await response.Content.ReadAsStreamAsync())
using (var memoryStream = new MemoryStream())
{
await stream.CopyToAsync(memoryStream);
return memoryStream.ToArray();
}
}
}
}
输出:
注意: 按照上述方式,fileData 中就有了完整的 PDF 数据,您可以根据需要使用。如果不需要将其保存到文件中,则可以直接在应用程序中使用 fileData 字节数组。如果您需要任何其他帮助,请参阅此官方文档。