0

According to this [https://stackoverflow.com/a/24264878/2382770][1] answer (it's no accepted) I try read image file from OpenShift DATA_DIR but get message in browser:

Image «http://app-name.rhcloud.com/GetImageServlet?img=681265.jpg» can not be shown since contains errors."

@WebServlet("/GetImageServlet")
public class GetImageServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String fileName = request.getParameter("img");
        String uploadFilePath = ...;
        System.out.println(uploadFilePath);

        byte[] imageBytes = getImageAsBytes(uploadFilePath);
        response.setContentType("image/jpeg");
        response.setContentLength(imageBytes.length);
        response.getOutputStream().write(imageBytes);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    public byte[] getImageAsBytes (String ImageName) throws IOException {
         // open image
         File imgPath = new File(ImageName);
         BufferedImage bufferedImage = ImageIO.read(imgPath);

         // get DataBufferBytes from Raster
         WritableRaster raster = bufferedImage .getRaster();
         DataBufferByte data   = (DataBufferByte) raster.getDataBuffer();

         return ( data.getData() );
    }

    private static final long serialVersionUID = 1L;
}

Do we realy can get data from OpenShift DATA_DIR ?

Community
  • 1
  • 1
andy007
  • 907
  • 1
  • 15
  • 41
  • 2
    I am not completely sure, but I would guess that when you get byte[] from image raster, you get RAW data. But you want to send image encoded as jpeg => read the file from data directly (standard fileinputstream) instead of using imageio api. – sodik Jan 10 '15 at 22:24

1 Answers1

2

The only mistake you made is that you send RAW image data (as read by ImageIO). Change the getImageAsBytes() method to read directly image data from file as they are (e.g. jpeg files contains image encoded in jpeg format) using standard FileInputStream. Alternatively, you can use 'Files.readAllBytes(..)' to read content of file.

sodik
  • 4,675
  • 2
  • 29
  • 47