Как записать загруженный файл на диск, используя псевдоним каталога Oracle и объекты BFILE? - PullRequest
0 голосов
/ 14 июля 2009

У меня есть веб-приложение Java, которое должно загружать файлы через http, а затем сохранять их на сервере. Файлы должны быть связаны с конкретными записями в базе данных Oracle, поэтому в базе данных будет таблица, хранящая ссылку на связанную запись и ссылку на файл, а также другие описательные данные, такие как заголовок и т. Д. Опции для этой таблицы выглядят так:

  • сохранить файл как BLOB
  • сохранить ссылку BFILE на файл
  • сохранить строку, содержащую путь к файлу

Мы бы предпочли хранить файл вне базы данных, поэтому мы не будем хранить его как BLOB. Администраторы баз данных указали, что их предпочтительным вариантом является сохранение ссылки в виде BFILE. Объект oracle.sql.BFILE обеспечивает доступ к InputStream для чтения файла, но не имеет очевидного способа записи в него.

Каков наилучший способ записи данных файла на диск, если единственной ссылкой на каталог хранения является псевдоним каталога Oracle?


Мы решили, что простой java.io - лучший способ записи в файл, а это означает, что каталог хранилища должен быть доступен для серверов веб-приложений в качестве монтирования. Так как каталог в любом случае был доступен для веб-приложения, мы решили, что BFILE не требуется, и вместо этого просто сохраняем имя файла в базе данных.

Ответы [ 2 ]

1 голос
/ 15 июля 2009

«Мы бы предпочли хранить файл вне базы данных»

Почему? Каковы ваши сценарии резервного копирования / восстановления для этого. Например, в случае сбоя диска, как вы восстановите файл? Являются ли файлы чисто временными, поэтому вам не нужно их сохранять?

По сути, BFILE - это компромисс между хранилищем BLOB и простым хранением пути в базе данных. Вы пишете в него так же, как и обычный файл, а затем делаете его «доступным» для базы данных для чтения. Если ваше веб-приложение работает на физическом сервере, отличном от базы данных, вам потребуется хранилище, доступное для обоих блоков (и соответствующие разрешения для чтения / записи).

1 голос
/ 14 июля 2009

Согласно Руководству для разработчиков Oracle JDBC - 14.6 Работа с BFILE * :

  • BFILE только для чтения. Вы не можете вставить данные или иным образом записать в BFILE.
  • Вы не можете использовать JDBC для создания нового BFILE. Они созданы только внешне.

Так что, похоже, вам нужен отдельный инструмент / метод для загрузки данных в каталог хранения Oracle, что, вероятно, делает BFILE плохим выбором для вашего сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...