Как добавить путь к изображению в базу данных + связать изображения с альбомами? - PullRequest
2 голосов
/ 10 мая 2019

Я делаю сайт с альбомами и изображениями только для того, чтобы научиться работать с изображениями.Я могу изменить имена изображений и загрузить их в папку изображений.

У меня две проблемы:

(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");

        }

Идентификатор альбома, в который загружаются изображенияпередается в метод.Мне нужно, чтобы этот идентификатор альбома, а также путь к изображению (мне также нужно имя изображения?) В базу данных.Как мне это сделать?

Также, является ли

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

в классе альбома правильным способом хранения изображений?

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

@ m1547,

@ ответ Марсело должен направить вас в правильном направлении, с точки зрения реализации.В дополнение к этому следует отметить пару вещей:

  • При сохранении изображения в папке переименуйте его в GUID вместо исходного имени файла изображения.Это позволит вам сохранить два изображения с одинаковым именем файла исходного изображения.t
  • Обновите схему SQL, включив в нее следующие столбцы:
    • GUID изображения (который задает ваша программа),
    • Исходное имя файла (полезно при отображении изображения на экране).пользователю),
    • Путь к папке (где физический файл существует на сервере),
    • Путь к альбому (в случае, когда ваши альбомы являются только виртуальными альбомами, в противном случае путь к папке должен ужепозаботьтесь об этом в случае, когда вы создаете физические папки, представляющие альбомы)

Надеюсь, это поможет.

0 голосов
/ 10 мая 2019

вы можете попробовать это для filepath

string filepath=Path.GetFullPath(file)

и для filenam

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();
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...