0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Blazor WebAssemblyでASP.NET.Core Web APIが作成したPDFファイルを受け取る

Last updated at Posted at 2021-07-07

1.サーバー側の処理

byte[]に変換したPDFデータをFileContentResultにして返却している。

[HttpPost]
public IActionResult GetPdf(SomeType parameter)
{
    using MemoryStream memotyStream = new();

    // ここの間でPDFライブラリを使ってPDFデータを「memotyStream」に乗せる。

    byte[] bytes = new byte[memotyStream.Length];

    memotyStream.Read(bytes, 0, bytes.Length);

    return this.File(bytes, MediaTypeNames.Application.Pdf)
}

#2.クライアント側の処理(C#)

1.のサーバ側APIを呼び出して、そのレスポンスデータを「ReadAsByteArrayAsync」で取得する。
そして、取得したレスポンスデータをJavaScriptのメソッド(この例では"OpenPdf"という名前)に渡して実行する。

protected override async Task OnClick()
{
    SomeType parameter = new(); // API側に渡すパラメータ(主旨とは無関係)

    HttpResponseMessage responseMessage = await Http.PostAsJsonAsync<SomeType>("https://localhost:12345/api/GetPdf", parameter);

    await JsRuntime.InvokeVoidAsync("OpenPdf", await responseMessage.Content.ReadAsByteArrayAsync());
}

#3.クライアント側の処理(JavaScript)

2.クライアント側の処理(C#)でAPIから返却されたレスポンスデータだが、
Base64エンコードされている状態なのでデコードしてやる必要がある。
C#側でデコードできるはずなのだが何故かJavaScriptでやらないと上手くいかない。
C#でデコードするとエラーになるかPDFが白紙になってしまう。
折角のWebAssemblyなのにわざわざJavaScriptで処理するのが勿体ないが
まぁ、そのうち誰かが解決してくれるだろう…

2022/9/25
.NET Core 5.0→6.0にバージョンアップしたら
Base64エンコードされてない状態になっていたので、
.Net Core 6.0の場合、デコード処理は不要です。
function OpenPdf(base64) {

    const byteCharacters = atob(base64);

    const byteNumbers = new Array(byteCharacters.length);

    for (let i = 0; i < byteCharacters.length; i++) {

        byteNumbers[i] = byteCharacters.charCodeAt(i);
    }

    const byteArray = Uint8Array(byteNumbers);

    const url = window.URL.createObjectURL(new Blob([byteArray], { type: 'application/pdf' }));

    window.open(url);
}
0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?