将图像添加到 ASP.net core

2023-11-29

我想添加图像作为模型类的一部分并将其显示在索引视图上。我在将图像分类为 byte[] 或 iFormFile 时遇到问题。

这就是我想要实现的目标

  1. 创建一个页面来插入员工列表

  2. 在索引页面中,能够列出员工并查看他们的图像。

这是模型。

员工.cs

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;

namespace MvcMovie.Models
{
  public class Employee
  {
    public int ID { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    public string Nationality { get; set; }
    [Required]
    public string NRIC { get; set; }
    [Required]
    public string StaffID { get; set; }
    [Required]
    public int AccessRights { get; set; }
    [Required]
    public DateTime DOB { get; set; }

    [Required(ErrorMessage = "Please Upload a Valid Image File. Only jpg format allowed")]
    [DataType(DataType.Upload)]
    [Display(Name = "Upload Product Image")]
    [FileExtensions(Extensions = "jpg")]
    public IFormFile Image { get; set; }

    public string ImageName { get; set; }
  }
}

这是生成错误的控制器代码部分。

EmployeeController.cs

[HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(Employee employee, IFormFile    Image) 
    {
        if (ModelState.IsValid)
        {

            if (Image != null && Image.Length > 0)
            {

                var file = Image;
                var uploads = Path.Combine(_environment.WebRootPath, "uploads\\img\\employees");

                if (file.Length > 0)
                {
                    var fileName = ContentDispositionHeaderValue.Parse
                        (file.ContentDisposition).FileName.Trim('"');

                    System.Console.WriteLine(fileName);
                    using (var fileStream = new FileStream(Path.Combine(uploads, file.FileName), FileMode.Create))
                    {
                        await file.CopyToAsync(fileStream);
                        employee.ImageName = Path.Combine(uploads, file.FileName);
                    }

                    var imageUrl = Path.Combine(uploads + file.FileName);

                }
            }

            _context.Add(employee);
            await _context.SaveChangesAsync();
            return RedirectToAction("Index");

        }
        else
        {
            var errors = ModelState.Values.SelectMany(v => v.Errors);
        }
        return View(employee);
    }

创建.cshtml

<form asp-action="Create" enctype="multipart/form-data" asp-antiforgery="true"  method="post">
 <div>
      ...

      <div class="form-group">
          <label asp-for="Image" class="control-label col-md-2"></label>
          <div class="col-md-10">
               <input asp-for="Image" class="form-control" />
               <span  class="text-danger"></span>
          </div>
      </div>
      <div class="form-group">
          <div class="col-md-offset-2 col-md-10">
          <input type="submit" value="Create" class="btn btn-default" />
      </div>
  </div>
</form>

我设法将图像上传到正确的文件夹中。但是,我对“_context.Add(employee)”语句有疑问。它说我无法添加 iformfile。我对其他领域没有问题。

我尝试将 Employee.Image 更改为字节数组。但是,我很困惑如何构建我的视图以将此信息传递给创建函数。


就像 ar27111994 建议的那样,我存储图像名称和扩展名。图像保存在 wwwroot 中的某个位置。

这是变化

员工.cs

public class Employee
{
    [Key]
    public int ID { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    public string Nationality { get; set; }
    [Required]
    public string NRIC { get; set; }
    [Required]
    public string StaffIdentity { get; set; }
    [Required]
    public int AccessRights { get; set; }
    [Required]
    public DateTime DOB { get; set; }

    public string ImageName { get; set; }
}

创建.cshtml

<div class="form-group">
     <label class="col-md-2 control-label">Employee Image</label>
     <div class="col-md-10">
          <input  class="form-control"  type="file" name="pic" accept="image/*"/>             
     </div>
</div>
<div class="form-group">
     <div class="col-md-offset-2 col-md-10">
          <input type="submit" value="Create" class="btn btn-default" />
     </div>
</div>

EmployeeController.cs

[HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create([Bind("ID,AccessRights,DOB,FirstName,LastName,NRIC,Nationality,StaffIdentity")]Employee employee) 
    {
        if (ModelState.IsValid)
        {
            var files = HttpContext.Request.Form.Files;
            foreach (var Image in files)
            {
                if (Image != null && Image.Length > 0)
                {

                    var file = Image;
                    var uploads = Path.Combine(_environment.WebRootPath, "uploads\\img\\employees");

                    if (file.Length > 0)
                    {
                        var fileName = ContentDispositionHeaderValue.Parse
                            (file.ContentDisposition).FileName.Trim('"');

                        System.Console.WriteLine(fileName);
                        using (var fileStream = new FileStream(Path.Combine(uploads, file.FileName), FileMode.Create))
                        {
                            await file.CopyToAsync(fileStream);
                            employee.ImageName = file.FileName;
                        }


                    }
                }
            }

            _context.Add(employee);
            await _context.SaveChangesAsync();
            return RedirectToAction("Index");

        }
        else
        {
            var errors = ModelState.Values.SelectMany(v => v.Errors);
        }
        return View(employee);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将图像添加到 ASP.net core 的相关文章

随机推荐

  • 操作对象文字:按特定顺序添加属性

    我正在开发一个在线创建 Nassi Shneiderman 图的工具 每个图的模型只是一个对象文字 存储具有无限可能的子项的所有内容 this then results in a view populated like the follow
  • 幂查询 M IN 运算符

    相当于 SQL 的什么INPower BI 的运算符 就像子句中一样 where Column1 IN Value1 Value2 Value3 我正在寻找 M 解决方案 不是 DAX 您可以使用List Contains功能 例如 Tab
  • Guice 在实例化对象后调用 init 方法

    是否可以告诉 Guice 在之后调用某个方法 即 init 实例化给定类型的对象 我在 EJB 3 和 Spring 中寻找类似于 PostConstruct 注释的功能 您只需添加 Inject注释到你的init 方法 实例化对象后它将自
  • C# Socket BeginReceive / EndReceive 捕获多条消息

    问题 当我做这样的事情时 for int i 0 i lt 100 i SendMessage sometSocket i ToString Thread Sleep 250 works with this doesn t work wit
  • 我的 UITabBarController 的 didSelectViewController 方法没有被调用?

    这是我的 app delegate m 的代码存根 它永远不会被调用 void tabBarController UITabBarController tabBarController didSelectViewController UIV
  • 使用 SSH.NET 在进度栏中显示文件上传进度

    我想在我的设备上显示上传过程的进度ProgressBar 这是我的 上传 按钮的代码 private void button2 Click object sender EventArgs e int Port int Parse textB
  • 如何为现有 .json 文件添加一个对象和一对?

    我有一段代码可以更改现有 JSON 文件中确定对的值并且运行良好 现在我需要将一个对象和一对添加到该文件中 大部分使用相同的代码 那么如何做到这一点呢 谢谢 uses System Json ShFolder System IOUtils
  • 有没有办法将冒号放入 jtextfield 中,使其无法被删除?

    我希望用户输入时间 比如 12 00 但我需要弄清楚一些事情 但我迷失了方向 我可以将文本限制为 5 个字符吗 如何限制 我可以在代码中嵌入冒号 这样用户就无法删除它吗 最后 我可以获取该代码并验证它是否只是数字 当然忽略冒号 答案是使用一
  • 如何使用命令行在android中获取imsi号码

    我想要得到IMSISIM 卡数量Android使用命令行的电话 android 中是否有任何 adb 命令或任何 shell 命令用于此 I tried adb shell getprop ril IMSI在三星 Galaxy ace 中执
  • Shiny 中的动态 ggvis 对象

    我正在尝试向 Shiny 应用程序添加动态 ggvis 绘图 首先 用户选择一个维度 然后从该维度添加项目 对于 global R 和示例数据 请参阅https gist github com tts a41c8581b9d77f131b3
  • iPhone 5 优化要求 - 启动图片真的有必要吗?

    当尝试将二进制文件上传到 App Store 时 我在电子邮件中收到以下回复 iPhone 5 优化要求 您的二进制文件未针对 iPhone 5 进行优化 自 5 月 1 日起 提交的所有新 iPhone 应用程序和应用程序更新必须支持 i
  • 为 vs2012 c++ 请求 MSVCR110.dll 发布 .exe

    我正在尝试使用 vs2012 Express 编译发布可执行文件 但是 每当我尝试在其他计算机上运行 exe 时 我都会收到一条警告 提示我需要 msvcr110 dll 我可以简单地复制 dll 但我正在寻找更长期的解决方案 在我尝试隔离
  • 为什么我们不能用私有扩展类方法重写基类方法?

    class One void foo class Two extends One private void foo more code here 为什么上面的代码片段是错误的 我将尝试结合其他答案的想法来得出一个答案 首先 让我们看一下代码
  • iTextSharp 设置默认字体大小

    我正在使用 iTextSharp 创建一个新的 pdf 文件 该 pdf 文件将包含一个标题和一个 pdf 表 生成的 pdf 文件的文件大小应尽可能小 因此我使用默认字体 Helvetica 12pt 有没有办法将默认字体大小从 12pt
  • 查找渲染/可见文本的高度

    I know how to get this height of a font 通过将文本放置在 div 中并获取 div 的偏移高度 But I would like to get this actual height Which wil
  • 比较第 n 行和第 n+1 行,如果它位于第 n 行的范围内,则打印 n+1 行 USNG ORACLE QUERY

    我有一张像这样的桌子 ID name Start no End no 1 a 2 123 2 b 3 65 3 c 191 199 4 d 201 225 5 e 220 223 6 f 221 224 I tried SELECT FRO
  • 设置自定义会话 ID java (apache tomcat)

    我想为我的 Web 应用程序设置自定义会话 ID 我有生成会话 ID 的算法 我的 Web 应用程序应该使用该算法来生成会话 ID 请建议我如何在 tomcat 中将我的算法设置为会话 id 生成 会话管理器 gt 我尝试了这个 但它提供了
  • 将“完成”按钮添加到 iPhone 上的唯一数字键盘

    我使用下面这个方便的代码成功地将完成按钮添加到我的数字键盘 但我有一个启动 MFMailComposeViewController 的电子邮件按钮 如何确保完成按钮不会出现在电子邮件键盘上 UIViewController NumPadRe
  • Android 上的面部表情识别 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我的第一个 Android 应用程序将涉及前置摄像头和面部表情识别 我做了很多研究 但找不到任何涉及面部表情识别的 Android 库 我基本上想测
  • 将图像添加到 ASP.net core

    我想添加图像作为模型类的一部分并将其显示在索引视图上 我在将图像分类为 byte 或 iFormFile 时遇到问题 这就是我想要实现的目标 创建一个页面来插入员工列表 在索引页面中 能够列出员工并查看他们的图像 这是模型 员工 cs us