Если у вас есть изображение в формате Blob, тогда лучше всего использовать ImageIO и читать поток ввода BLOB напрямую.
Это даст вам объект java.awt.BufferedImage, который вы затем сможете рендерить на любой тип изображения, используя ImageIO.
BufferedImage image = ImageIO.read( blob.getInputStream() );
// Feel free to modify the image here using image.createGraphics()
// add a water mark if you're feeling adventurous
ImageIO.write( image, "png", someOutputStream );
Я не очень хорошо знаю, как Facebook использует изображения. Я думаю, что это зависит от того, что вы делаете. Что касается приложений Facebook, я думаю, что вы по-прежнему отвечаете за размещение изображения, но Facebook будет выступать в качестве прокси-сервера для кэширования и запрашивать изображение только один раз, а затем предоставлять его всем клиентам, которым необходимо его увидеть. Если это изображение пользователя, то я думаю, что Facebook полностью сохраняет изображение (очевидно, что пользователь, загружающий изображение, обычно не имеет его на другом сервере).
Если вы хотите просто отобразить изображение «как есть» в ответ на веб-запрос, то вы можете перенаправить выходные данные Blob напрямую клиенту, хотя это некоторое время сохраняет открытыми соединения с базой данных, возможно, вы лучше копировать в дисковый кеш, чем обслуживать клиента.
Я должен признаться, я не смог найти ничего полезного о том, что на самом деле stirng_image? Возможно, вы могли бы уточнить, если этот ответ не соответствует вашим потребностям.