回答編集履歴

2

追記その2

2022/04/05 02:42

投稿

退会済みユーザー
test CHANGED
@@ -61,3 +61,17 @@
61
61
 
62
62
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-05/bc8e6b14-8445-4c1b-8abb-e6e0adb76940.jpeg)
63
63
 
64
+ ---
65
+
66
+ **【追記2】**
67
+
68
+ ファイルのダウンロードについては以下の記事が参考になると思いますので、興味があれば読んでください。
69
+
70
+ ASP.NET Core MVC でファイルダウンロード
71
+ http://surferonwww.info/BlogEngine/post/2020/01/20/aspnet-core-mvc-file-download.aspx
72
+
73
+ 上記は MVC の記事ですが、記事に書いてある "FileResult Class を継承する VirtualFileResult, FileContentResult, FileStreamResult, PhysicalFileResult オブジェクトのいずれかを Controller のアクションメソッドで生成して返してやることになります" の「Controller のアクションメソッド」を、Razor ページでは「.html.cs の OnGet メソッド」に読み替えてやれば Razor Pages でも書いてあることは有効です。
74
+
75
+ なお、上の記事の File メソッドの設定は、通知バーを表示するため File メソッドの第 3 引数にファイル名を設定して応答ヘッダに Content-Disposition が含まれるようにしていますが、今回の話のように img 要素に画像を表示するの場合は Content-Disposition は不要(というより、通知バーが表示され望む動きにならない)です。
76
+
77
+ 上の【追記】コードでは第 2 引数までしか設定していないのはそれが理由です。

1

追記

2022/04/05 02:07

投稿

退会済みユーザー
test CHANGED
@@ -4,3 +4,60 @@
4
4
  http://surferonwww.info/BlogEngine/post/2021/11/24/upload-image-file-and-save-it-to-sql-server-in-aspnet-core-mvc.aspx
5
5
 
6
6
  DB からファイルを取得してきて、そのバイト列をダウンロードする API を作って(上の記事では Controller の GetThumb メソッド)、その URL をhtml の img 要素の src 属性に設定する(上の記事では Index.cshtml 参照)ことで表示できます。
7
+
8
+ ---
9
+
10
+ **【追記】**
11
+
12
+ 下のコメント欄の私のコメントで「後で Razor Pages 用のサンプルを回答欄に追記しておきます」と書いた件です。
13
+
14
+ 紹介した記事のプロジェクト(Razor Pages も使えるように設定してある)のルート直下に Pages フォルダを追加し、それに FetchThumbImage という名前の Razor ページを追加し、紹介した記事の GetThumb メソッドを移植したのが下記のコードです。
15
+
16
+ ```
17
+ #nullable disable
18
+
19
+ using Microsoft.AspNetCore.Mvc;
20
+ using Microsoft.AspNetCore.Mvc.RazorPages;
21
+ using MvcCore6App.Data;
22
+ using MvcCore6App.Models;
23
+ using Microsoft.EntityFrameworkCore;
24
+
25
+ namespace MvcCore6App.Pages
26
+ {
27
+ public class FetchThumbImageModel : PageModel
28
+ {
29
+ private readonly FileContext _context;
30
+
31
+ public FetchThumbImageModel(FileContext context)
32
+ {
33
+ _context = context;
34
+ }
35
+
36
+ public async Task<IActionResult> OnGetAsync(int? id)
37
+ {
38
+ if (id == null)
39
+ {
40
+ return NotFound();
41
+ }
42
+
43
+ FileEntity file = await _context.Files
44
+ .FirstOrDefaultAsync(m => m.Id == id);
45
+
46
+ if (file == null)
47
+ {
48
+ return NotFound();
49
+ }
50
+
51
+ return File(file.ThumbImage, "image/jpeg");
52
+ }
53
+ }
54
+ }
55
+ ```
56
+ 上記を使って画像を表示するには、例えば、以下のように img 要素の src 属性に上の URL とクエリ文字列を設定すれば、
57
+
58
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-05/e7bc7ea3-0e75-4558-8db3-03ec7bda7d40.jpeg)
59
+
60
+ 以下の通り画像は表示されます。お試しください。
61
+
62
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-05/bc8e6b14-8445-4c1b-8abb-e6e0adb76940.jpeg)
63
+