如何在数据库中上传多个图像

时间:2019-11-22 12:20:43

标签: asp.net-mvc file-upload .net-core

我正在尝试上传学生的多张图像。我想在数据库中保存文件名,并在www / studentimages目录中上传图像。但是,使用我尝试过的方法,我可以上传多张图片,但只有它可以将最后选择的图片的名称保存在数据库中。

public async Task<IActionResult> NewStudent(Student p)
        {
            var files = HttpContext.Request.Form.Files;
            foreach (var Image in files)
            {
                if (Image != null && Image.Length > 0)
                {
                    var file = Image;
                    var uploads = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/studentimages");
                    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);
                            p.Image = file.FileName;
                        }
                   }
                }
            }
             _context.Students.Add(p);
            await _context.SaveChangesAsync();
            return RedirectToAction("Index");
        } 


***My Student Class***

using System.Collections.Generic;
namespace PhotoUpload.Models
{
    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Address { get; set; }
        public List<string> Image{get;set;}

    }
}

2 个答案:

答案 0 :(得分:1)

您在每个循环中都覆盖了学生图像, 更改

p.Image = file.FileName;

p.Image = p.Image +"-"+ file.FileName;

因此,这将为学生保存所有文件名,并用“-”分隔。

如果要显示学生图像,则需要再次分隔文件名,可以使用split()来实现。

string[] filenames = p.Image.Split('-');

这将返回包含您的文件名的字符串数组。

由于模型中没有图像列表,因此应使用剃刀代码在视图中进行分割:

@foreach (var filename in Model.Image.Split('-'))
{
<img src="PathWhereImageIsSave/@filename"  alt="" />
}

明确地说,这种方法不是最好的,文件名中可以​​包含“-”,这会使分割失败,我的建议是,如果要让学生学习很多图像,则应创建一个表格与您的学生表有关的文件,然后执行类似Erdi所说的

答案 1 :(得分:1)

更改班级

public string  Image {get;set;}

public List<string> Image{get;set;}

并在控制器中进行更改

p.Image = file.FileName; 

p.Image = new List<string>();
p.Image.Add(file.Filename)

我认为它可以为您提供帮助。如果不是,我需要您的学生班来帮助您。

用于在视图中显示

@foreach(var item in Model.Image)
{
    <img src="~/studentimages/@item.Filename" />
}

您需要为wiev代码进行编辑