Search code examples
javaandroidweb-servicesjerseygrizzly

Send/Receive images via REST


I am using grizzly for java rest service and consuming these web services in an android app.

Its working fine as far as "text" data is concerned.

Now I want to load the images(from server) in my android application, using this rest service and also allow the users to update image from the device.

I have tried this code

@GET
@Path("/img3")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getFile()
{
    File file = new File("img/3.jpg");
    return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM).header("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"") // optional
            .build();
}

The code above allow me to download the file, but is it possible to display result in broswer? like this http://docs.oracle.com/javase/tutorial/images/oracle-java-logo.png


Solution

  • Solution of Part 1:

    I have made the changes in my code as suggested by Shadow

    @GET
    @Path("/img3")
    @Produces("image/jpg")
    public Response getFile(@PathParam("id") String id) throws SQLException
    {
    
        File file = new File("img/3.jpg");
        return Response.ok(file, "image/jpg").header("Inline", "filename=\"" + file.getName() + "\"")
                .build();
    }
    

    Requested image will be displayed in browser

    Part 2: The code used to convert back Base64 encoded image

    @POST
    @Path("/upload/{primaryKey}")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces("image/jpg")
    public String uploadImage(@FormParam("image") String image, @PathParam("primaryKey") String primaryKey) throws SQLException, FileNotFoundException
    {
        String result = "false";
        FileOutputStream fos;
    
        fos = new FileOutputStream("img/" + primaryKey + ".jpg");
    
        // decode Base64 String to image
        try
        {
    
            byte byteArray[] = Base64.getMimeDecoder().decode(image);
            fos.write(byteArray);
    
            result = "true";
            fos.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    
        return result;
    }