1 year ago

#271996

test-img

Pankaj Kumar

Converting InputStream to byteArray[] and assigning it to a variable makes the byteArray[] empty

I have a standalone Spring BOOT Project which receives uploaded file as an byteArray[] and I perform validations on this byteArray[] by converting it back to InputStream and parsing through Apache Tika & removing MetaData.

//Controller.java

byte[] byteArray = payload.getByteArray();
InputStream inputStream = FileUploadValidation.byteArrayToInputStream(byteArray);

InputStream finalStream = FileUploadValidation.checkIfDocumentIsValid(inputStream);
    byte[] finalByteArray = StreamUtils.copyToByteArray(finalStream); // This always comes empty
    return finalByteArray;



//Method in Utility Class (FileUploadValidation.java)  to perform operation on InputStream

public static InputStream checkIfDocumentIsValid(InputStream stream){

    BodyContentHandler handler = new BodyContentHandler();
    Metadata metadata = new Metadata();
    ParseContext pcontext = new ParseContext();
    RarParser parser = new RarParser();
    parser.parse(stream, handler, metadata, pcontext);//This method simply parses the stream to Apache Tika PdfParser to check if it is a valid PDF and doesn't return anything.
    stripMetaData(metadata); //Removes metaData from the stream

    return stream;
}

I need to return the byteArray[] to another Spring Project I can see that the finalStream in Controller.java indeed is not empty but the finalByteArray is always empty. What am I doing wrong ? Is it the right way to do it ? Max File limit for uploading is set at 15MB.

java

arrays

inputstream

fileinputstream

datainputstream

0 Answers

Your Answer

Accepted video resources