如何添加图像路径到数据库+将图像与相册关联?

时间:2019-05-10 10:45:29

标签: asp.net asp.net-core

我正在制作一个包含相册和图像的网站,旨在学习如何使用图像。我可以更改图像名称并将其上传到图像文件夹。

我的问题有两个:

(1)我不知道如何将图像路径添加到数据库中
(2)我不知道如何在每个相册中添加图像列表

我花了很多时间试图找到没有结果的答案。

public class Image
    {
        public int Id { get; set; }

        public int AlbumId { get; set; }
        [ForeignKey("AlbumId")]
        public virtual Album Album { get; set; }

        public string ImagePath { get; set; }
    }
 public class Album
    {
        public int Id { get; set; }
        public string AlbumTitle { get; set; }

        public List<Image> Image { get; set; }
    }
 public async Task<IActionResult> UploadImage(int id, Album album)
        {
            if (id != album.Id)
            {
                return NotFound();
            }

            var newFileName = string.Empty;

            if (HttpContext.Request.Form.Files != null)
            {
                var fileName = string.Empty;
                string PathDB = string.Empty;

                var files = HttpContext.Request.Form.Files;

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

                        var myUniqueFileName = Convert.ToString(Guid.NewGuid());

                        var FileExtension = Path.GetExtension(fileName);

                        newFileName = myUniqueFileName + FileExtension;

                        fileName = Path.Combine(_hostingEnvironment.WebRootPath, "images") + $@"\{newFileName}";
                        PathDB = "images/" + newFileName;

                        using (FileStream fs = System.IO.File.Create(fileName))
                        {
                            file.CopyTo(fs);
                            fs.Flush();
                        }
                    }
                }
            }

            _db.Update(album);
            await _db.SaveChangesAsync();

            return View("Index");

        }

上载图像的相册ID传递到该方法中。我需要将此相册ID以及图像路径(我也需要图像名称吗?)输入数据库。我该怎么办?

也是

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

在相册类中,存储图像的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

u可以尝试使用此文件路径

string filepath=Path.GetFullPath(file)

和文件名

string name=Path.GetFileName(file)
imagepath=filepath+name;

并将其插入数据库

 {
                    string sql = "insert into tablename values(@id,@AlbumId,@imagepath)";
                    using (SqlCommand cmd = new SqlCommand(sql, con))
 {     
 cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@AlbumId", albumid);
 cmd.Parameters.AddWithValue("@Imagepath",imagepath);
 con.Open();
 cmd.ExecuteScalar();
 con.Close();
}
}

答案 1 :(得分:0)

@ m1547,

@marcelo's answer应该使您在实现方面朝着正确的方向发展。最重要的是:

  • 将图像存储在文件夹中时,将其重命名为GUID而不是原始图像 图片的文件名。这将允许您在原始图像文件名相同的情况下存储两个图像。 t
  • 更新您的SQL模式以包括以下列:
    • 图像(由程序设置)的GUID
    • 原始文件名(在屏幕上向用户显示图像时有用),
    • 文件夹路径(服务器中物理文件所在的位置)
    • 相册路径(在您的相册只是虚拟相册的情况下,否则,当您创建代表相册的物理文件夹时,文件夹路径应该已经解决了这个问题)

希望这会有所帮助。