Ask a Question

Groovy Script to store an image file as .jpg from http response body with content type as image/jpeg

cl509920
New Contributor

Groovy Script to store an image file as .jpg from http response body with content type as image/jpeg

An API GET response returns an image in the body, like this: This is not an attachment.

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Date: Sat, 06 May 2017 15:32:05 GMT
Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: max-age=0
X-Content-Type-Options: nosniff
X-XSS-Protection: 1
Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT
Content-Type: image/jpeg
Content-Length: 12888 ÿØÿà JFIF ` ` ÿáÈExif MM * 2 J; ^GF GI ? ‡i f Æ2009:03:12 13:48:28 Corbis ? œ? °’‘ 17 ’’ 17 2008:02:11 11:32:43 2008:02:11 11:32:43 ( $ œ ` ` ÿØÿÛ C $.' ",#(7),01444'9=82<.342ÿÛ C 2!!2 ...... and so on.

 

Postman decodes the image an displays it, it is an animal in this case.

I have to store the response as an image file (.jpg) using a groovy script in soapUI(soapUI is used to test the API)

This is what I've tried in a Groovy Script step, but the image saved is unintelligible malformed.

testRunner.runTestStepByName("GETjpg");
def getImageResponse = new String(testRunner.testCase.testSteps["GET Image"].testRequest.response.responseContent);
byte[] imageInByte;
BufferedImage originalImage = ImageIO.read(new ByteArrayInputStream(getImageResponse.getBytes()));

// convert BufferedImage to byte array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos);
baos.flush();
imageInByte = baos.toByteArray();
baos.close();

// convert byte array back to BufferedImage
InputStream inRead = new ByteArrayInputStream(imageInByte);
BufferedImage bImageFromConvert = ImageIO.read(inRead);

ImageIO.write(bImageFromConvert, "jpg", new File("C:\\animal.jpg"));

 I guess that what I am doing to save the image in .jpg is not correct. Can someone help?

Attach is the raw response.

Thanks in advance.

1 REPLY 1
cl509920
New Contributor

0down voteaccept

This is how I did this. From the Script Assertion of the http GET request. Hope It helps someone.

def ins = context.httpResponse.getRawResponseBody();
def isImageSaved = false;
InputStream inputStream;
FileOutputStream outputStream;
if (ins){
    try {
        inputStream = new ByteArrayInputStream(ins);
        outputStream = new FileOutputStream(new File(context.expand("C:\\animal.jpg")));
        int read = 0;
        byte[] bytes = new byte[1024];

        while ((read = inputStream.read(bytes)) != -1) {
            outputStream.write(bytes, 0, read);
        }
        isImageSaved = true;

    }catch (Exception e){
        log.error e;
        e.printStackTrace();
    }finally{
        inputStream.close();
        outputStream.close();       
    }   
} else {
    log.error "image does not exist...";
}

context.testCase.setPropertyValue("isImageSaved", isImageSaved.inspect());
cancel
Showing results for 
Search instead for 
Did you mean: