Сохранение любого файла в базе данных, просто преобразовать его в массив байтов?



является ли преобразование файла в массив байтов лучшим способом сохранить любой формат файла на диск или базу данных var двоичный столбец?



Так что если кто-то хочет сэкономить .формат GIF или. доктор./docx или .pdf-файл, могу ли я просто преобразовать его в bytearray UFT8 и сохранить его в БД в виде потока байтов?

780   7  

7 ответов:

поскольку не упоминается, какую базу данных вы имеете в виду, я предполагаю, что SQL Server. Ниже Решение работает для 2005 и 2008.

вы должны создать таблицу с VARBINARY(MAX) как один из столбцов. В моем примере я создал таблицу Raporty в графе RaportPlik будучи

хотя вы можете хранить файлы таким образом, он имеет значительные компромиссы:

  • большинство БД не оптимизированы для гигантских объемов двоичных данных, и производительность запросов часто резко ухудшается, поскольку таблица раздувается, даже с индексами. (SQL Server 2008 с типом столбца FILESTREAM является исключением из правила.)
  • резервное копирование/репликация БД становится чрезвычайно медленным.
  • гораздо проще обрабатывать поврежденный диск с 2 миллионами изображений -- просто замените диск на RAID -- чем таблица БД, которая становится поврежденной.
  • Если вы случайно удалите дюжину изображений в файловой системе, ваши операции ребята могут заменить их довольно легко из резервной копии, и так как индекс таблицы крошечный по сравнению, он может быть быстро восстановлен. Если вы случайно удалите десяток изображений в гигантской таблице базы данных, вам придется долго и мучительно ждать, чтобы восстановить БД из резервной копии, парализуя всю вашу систему в между тем.

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

Это действительно зависит от сервера базы данных.

например, SQL Server 2008 поддерживает FILESTREAM тип данных именно для этой ситуации.

кроме этого, если вы используете MemoryStream, Она имеет ToArray() метод, который преобразуется в byte[] - это может быть использовано для заполнения

подтвердив, что я смог использовать ответ, опубликованный MadBoy и отредактированный Otiel как на MS SQL Server 2012, так и на 2014 в дополнение к версиям, ранее перечисленным с использованием столбцов varbinary(MAX).

Если вам интересно, почему вы не можете "Filestream" (отмечено в отдельном ответе) в качестве типа данных в конструкторе таблиц SQL Server или почему вы не можете установить тип данных столбца в "Filestream" с помощью T-SQL, это потому, что FILESTREAM является атрибутом хранения типа данных varbinary(MAX). Это не тип данных сам по себе.

см. эти статьи о настройке и включении FILESTREAM в базе данных: https://msdn.microsoft.com/en-us/library/cc645923 (v=sql. 120). aspx

http://www.kodyaz.com/t-sql/default-filestream-filegroup-is-not-available-in-database.aspx

после настройки столбец FileStream enabled varbinary(max) может быть добавлен следующим образом:

ALTER TABLE Имя_таблицы

добавить Имя_столбца varbinary (max) FILESTREAM NULL

перейти

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

файл-это двоичные данные, поэтому UTF 8 здесь не имеет значения..

UTF 8 имеет значение при попытке преобразовать строку в массив байтов... не файл в массив байтов.

я опишу, как я хранил файлы, в SQL Server и Oracle. Это во многом зависит от того, как вы получаете файл, в первую очередь, как вы получите его содержимое, и это зависит от того, какую базу данных вы используете для содержимого, в котором вы будете хранить его, как вы будете его хранить. Это 2 отдельных примера базы данных с 2 отдельными методами получения файла, который я использовал.

SQL Server

короткий ответ: я использовал a строка байта base64, которую я преобразовал в byte[] и магазина в

да, как правило, лучший способ сохранить файл в базе данных-это сохранить массив байтов в столбце BLOB. Вероятно, вам понадобится несколько столбцов для дополнительного хранения метаданных файла, таких как имя, расширение и т. д.

не всегда хорошо хранить файлы в базе данных - например, размер базы данных будет быстро расти, если вы храните в ней файлы. Но это все зависит от вашего сценария использования.

Comments

    Ничего не найдено.