отображение байта [] в Hibernate и добавление фрагмента файла по фрагменту - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть веб-сервис, который получает 100 Мб видеофайла кусками

public void addFileChunk(Long fileId, byte[] buffer)

Как мне сохранить этот файл в базе данных Postgresql с помощью hibernate?

Использование обычного JDBC очень прямолинейно. Я бы использовал следующий код внутри моего метода веб-службы:

 LargeObject largeObject = largeObjectManager.Open(fileId, LargeObjectManager.READWRITE);
                    int size = largeObject.Size();
                    largeObject.Seek(size);
                    largeObject.Write(buffer);
                    largeObject.Close();

Как мне достичь той же функциональности, используя Hibernate? и сохранить этот файл по чанку?

Хранение каждого файла в отдельном ряду, поскольку bytea кажется мне не очень умной идеей. Горох совет.

Ответы [ 2 ]

1 голос
/ 14 января 2011

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

  1. обрабатывает http-запрос, чтобы файл (полученный) сохранялся в каком-то временном местоположении.
  2. открыть транзакцию, сохранить метаданные файла, включая временное местоположение, закрыть транзакцию
  3. используя некоторый внешний процесс, который будет контролировать временные файлы, передайте этот файл в конечное место назначения, откуда он будет доступен пользователю через какой-либо сервлет.
0 голосов
/ 05 октября 2012

см. http://in.relation.to/Bloggers/PostgreSQLAndBLOBs

Да, байты были бы плохими. В Hibernate есть способ продолжать использовать большие объекты, и вы можете сохранить интерфейс потоковой передачи.

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