无法在我的本地计算机上打开从 azure blob 存储下载的文件

问题描述 投票:0回答:1

我有一个基于 .NET Core 6.0 的应用程序。我已经编写了从 Azure blob 存储下载文件的代码。它正在下载,但无法在 Acrobat Reader 中以

.pdf
文件形式打开。

我尝试检查内容中的内容并尝试在记事本++中打开它。然后它在 Notepad++ 中显示以下内容。

"FileContents": "JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlbi1JTikgPj4NCmVuZG9iag0KMiAwIG9iag0KPDwvVHlwZS9QYWdlcy9Db3VudCA1L0tpZHNbIDMgMCBSIDIxIDAgUiAyOCAwIFIgMzAgMCBSIDMyIDAgUl0gPj4NCmVuZG9iag0KMyAwIG9iag0KPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9SZXNvdXJjZXM8PC9FeHRHU3RhdGU8PC9HUzUgNSAwIFIvR1M4IDggMCBSL0dTMTggMTggMCBSPj4vRm9udDw8L0YxIDYgMCBSL0YyIDkgMCBSL0YzIDExIDAgUi9GNCAxNiAwIFIvRjUgMTkgMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0ltYWdlQy9JbWFnZUldID4+L01lZGlhQm94WyAwIDAgNjEyIDc5Ml0gL0NvbnRlbnRzIaYqugS9NPMNo7bRaY6pe2hiUMU/valJaN7idEwbONwU5t7EItudNMrJu252ErNZsUd5M2cV7eC0p9CGxxsV7bLhgxgbtxDbYqoGO+pfpNSX21jyUQyJj3DkPlkLuA3g+WTADy1PxLGWBGronGaqim4EoTI3zwvyEy5PkmJtOfdC/cInyYKsA4MTc2DQolJUVPRg==",
  "ContentType": "application/octet-stream",
  "FileDownloadName": "db575960-5e24-48dd-33c5-08dc24a66af0",
  "LastModified": null,
  "EntityTag": null,
  "EnableRangeProcessing": false
}

这是将文件从 blob 发送回客户端的 API 端点:

public async Task<IActionResult> DownlaodFile([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequestData request)
{
    var query = getquerystring(request.Url.Query);
    var id = Guid.Parse(query["id"]);
    var fileDataAsArray= await _attachmentService.GetFileStream(id);
    return File(fileDataAsArray, "application/octet-stream", id.ToString());
}

我在 Blazor 代码中阅读它。

var url = "----------------";
var response = await _httpClient.GetByteArrayAsync(url);

if (response is not null)
{
    return response;
}
else
    return new byte[0];

这是调用 javascript 函数的代码

       var fileData = await _fileService.downloadFile(fileId, IsPTW);

        if (fileData is not null)
        {
            await JS.InvokeVoidAsync("fileDownload", filename, "application/pdf", fileData);
        }

下面是Javascript代码。

        window.fileDownload = (fileName, contentType, fileData) => {
        debugger;

        var bytes = new Uint8Array(fileData);
        var blob = new Blob([bytes], { type: contentType });

        var link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = fileName;
        link.click();
        link.remove();
c# .net-core azure-blob-storage blazor-webassembly
1个回答
0
投票

无法在我的本地计算机上打开从 Azure Blob 存储下载的文件。

您从 Azure Blob 存储下载的文件是二进制格式,而不是可读格式。要下载 PDF 文件,您需要将内容类型设置为

application/pdf
。您可以尝试在将文件发送回客户端的 API 端点中将内容类型设置为 application/pdf。

代码:

@page "/"
@inject HttpClient _httpClient
@inject IJSRuntime JS

<h3>Filedownload</h3>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Increment</button>
<button class="btn btn-success" @onclick="DownloadFile">Download File</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }

    private async Task DownloadFile()
    {
        var url = "<Your-blob-url>";
        var fileId = Guid.NewGuid();

        var response = await _httpClient.GetByteArrayAsync($"{url}?id={fileId}");

        if (response != null)
        {
            await JS.InvokeVoidAsync("fileDownload", $"file_{fileId}.pdf", "application/pdf", response);
        }
    }
}

样本.js

这是我的 JavaScript:

window.fileDownload = (fileName, contentType, fileData) => {
    var bytes = new Uint8Array(fileData);
    var blob = new Blob([bytes], { type: contentType });

    var link = document.createElement('a');
    link.href = window.URL.createObjectURL(blob);
    link.download = fileName;
    link.click();
    link.remove();
};

输出:

上面的代码在我的环境中执行,当我单击下载文件时,它会从Azure Blob存储下载PDF文件。

enter image description here

下载后,我从我这边查看,它在Acrobat Reader中打开。

文件:

© www.soinside.com 2019 - 2024. All rights reserved.