Сохраните файлы в базе данных с структурой объекта - PullRequest
17 голосов
/ 18 февраля 2010

У меня есть решение ASP.NET MVC, построенное на Entity Framework с Microsoft SQL Server 2008. Мне нужно создать функцию, которая позволит моим пользователям загружать файлы.

Что бы я хотел:

  • Решение, которое использует Entity Framework для хранения файлов в базе данных
  • Решение, которое обнаруживает и предотвращает загрузку одного и того же файла дважды с помощью некоторой хэш / контрольной суммы
  • Советы по оформлению базы данных / таблицы

Ответы [ 4 ]

43 голосов
/ 18 февраля 2010

В вашей модели сущности сопоставьте столбец базы данных BLOB со свойством byte[].Присвойте содержимое загруженного файла этому свойству объекта сущности и сохраните изменения в ObjectContext.

. Для вычисления хэша вы можете использовать класс MD5CryptoServiceProvider1008 *

10 голосов
/ 18 февраля 2010

«Правильный» способ сохранить файл в базе данных SQL Server 2008 - это использовать тип данных FILESTREAM .Я не знаю, что Entity Framework поддерживает это, но вы, безусловно, можете попробовать и посмотреть, что произойдет.

Тем не менее, в большинстве случаев, когда люди делают это, они не сохраняют файл в базе данных,Это означает, что вам нужно пройти через ASP.NET и сервер базы данных, чтобы обработать файл, который вы могли бы обслуживать непосредственно с веб-сервера.Это также может несколько усложнить резервное копирование для вашей базы данных и сайта.Поэтому, когда мы загружаем файлы в нашу MVC / Entity Framework, мы храним только ссылку на местоположение файла в базе данных и сохраняем сам файл в другом месте.

Очевидно, какая стратегия подходит вам, во многом зависитподробности вашей заявки.

5 голосов
/ 18 февраля 2010

Вот как я делаю это для подкастов:


ID     Title         Path                    Summary              UploadDate
---    -----        --------              ----------------        -----------
1     TestPodcast   /Podcasts/ep1.mp3      A test podcast         2010-02-12

path хранит ссылку на физическое местоположение подкаста. Я использовал сообщение Скотта Хансельмана о Загрузка файлов с ASP.NET MVC , чтобы разобраться с частью загрузки файлов.

0 голосов
/ 15 апреля 2018

Рабочий пример (только для загрузки файла, потому что этот идет первым в Google) на основе ответа @ Thomas:

public void AddDocument(HttpPostedFileBase file)
        {
            try
            {                
                    using (TransactionScope scope = new TransactionScope())
                    {
                        try
                        {
                            using (var ctx = new Entities())
                            {

                            EntityDoc doc = new EntityDoc(); //The document table 

                            doc.DocumentFileName = file.FileName; //The file Name

                            using (var reader = new System.IO.BinaryReader(file.InputStream))
                            {
                                doc.DocumentFile = reader.ReadBytes(file.ContentLength); // the Byte [] Field
                            }
                            ctx.EntityDocs.Add(doc);


                                ctx.SaveChanges();
                                scope.Complete();
                            }
                        }
                        catch (Exception ex)
                        {                          
                            throw ex;
                        }
                    }

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
...