2010-11-21 3 views
0

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

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

Как я могу сохранить этот файл в базе данных Postgresql, используя спящий режим?

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

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

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

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

+0

Почему вы просто не обходите Hibernate для этого? –

+0

Потому что это Spring интегрированный веб-сервис, и у меня уже есть Hibernate и Transaction management bean injected и широко используется в других методах. поэтому я не хочу открывать новое соединение JDBC только для хранения этого файла. –

ответ

1

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

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

Я не знаю, почему было бы нецелесообразно хранить их как большие объекты в PostgreSQL. Интерфейс LOB предоставляет вам потоковый интерфейс, подобный файловой системе, так что вы можете выполнять ввод или вывод по вашему желанию. Он работает хорошо, и вы даже можете создавать индексы для индексации смещений важных данных, если вам нужно. –

0

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

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

Смежные вопросы