Кнопка «Поделиться» в Твиттере [закрыта]

Это невозможно напрямую с . Он может указывать только на URL, а не на byte[] или InputStream. В принципе, вам нужно убедиться, что эти байты напрямую доступны в качестве ответа HTTP по данному URL-адресу, который затем можно использовать в (или даже в обычном HTML ).

При условии, что вы идентифицируете изображение по его ID так:


Вот пример запуска такого сервлета:

@WebServlet("/image/*")
public class ImageServlet extends HttpServlet {

    @EJB
    private ImageService service;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Long id = Long.valueOf(request.getPathInfo().substring(1));
        Image image = service.find(id);
        response.setContentType(getServletContext().getMimeType(image.getName()));
        response.setContentLength(image.getBytes().length);
        response.getOutputStream().write(image.getBytes());
    }

}

Более продвинутый абстрактный шаблон для статического ресурса сервлет, поддерживающий HTTP-кеширование, можно найти в этом ответе , а также конкретный пример для обслуживания из базы данных.

Если вы используете библиотеку служебных программ JSF OmniFaces в среде JSF 2.2 + CDI, вы можете вместо этого использовать свой , который можно использовать гораздо более интуитивно.


@Named
@ApplicationScoped
public class ImageBean {

    @EJB
    private ImageService service;

    public byte[] getBytes(Long imageId) {
        return service.getImageBytes(imageId);
    }

}

18
задан Peter Mortensen 29 November 2015 в 13:51
поделиться