記事詳細


投稿日
2025年12月14日23時09分
タイトル

wwwroot/images にある複数の PNG ファイルを View のボタン押下でDBに登録

内容

モデルの準備

Csharp
public class Category { public int CategoryId { get; set; } public string CategoryName { get; set; } public byte[] CategoryImage { get; set; } }

2. View(ボタン)

単純に「登録」ボタンを押すと AllImageRegi に POST するフォームを作ります。

Html
<form asp-action="AllImageRegi" method="post"> <button type="submit" class="btn btn-primary">全画像登録</button> </form>

3. Controller アクション

wwwroot/images 内の PNG を読み込み、DB に保存します。

Csharp
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using System.IO; using System.Linq; public class CategoryController : Controller { private readonly IWebHostEnvironment _env; private readonly ApplicationDbContext _context; public CategoryController(IWebHostEnvironment env, ApplicationDbContext context) { _env = env; _context = context; } [HttpPost] public IActionResult AllImageRegi() { string imageFolder = Path.Combine(_env.WebRootPath, "images"); var pngFiles = Directory.GetFiles(imageFolder, "*.png"); foreach (var filePath in pngFiles) { var fileName = Path.GetFileNameWithoutExtension(filePath); var imageBytes = System.IO.File.ReadAllBytes(filePath); var category = new Category { CategoryName = fileName, CategoryImage = imageBytes }; _context.Categories.Add(category); } _context.SaveChanges(); return RedirectToAction("Index"); } }

4. ポイント

  • IWebHostEnvironment.WebRootPath で wwwroot の物理パスを取得
  • Directory.GetFiles() で PNG ファイル一覧を取得
  • File.ReadAllBytes() でバイナリ化して byte[] に格納
  • CategoryName はファイル名から自動設定(必要に応じて変更可)
  • 最後に SaveChanges() で一括登録

5. 注意点

  • DB の CategoryImage カラムは varbinary(max)(SQL Serverの場合)に設定
  • 大量画像の場合は 非同期処理 (async/await) 推奨
  • 実運用では画像はDBではなくストレージに置き、パスだけ保存する方がパフォーマンス的に有利

Powered by Froala Editor

添付画像

画像はありません
Genreのカテゴリ-名
Controllers
編集 | 記事一覧