nivedita rahurkar
nivedita rahurkar

Reputation: 321

How to read a Multipart file as a string in Spring?

I want to post a text file from my desktop using Advanced Rest Client. This is my controller:

@RequestMapping(value = "/vsp/debug/compareConfig/{deviceIp:.*}", method = RequestMethod.POST, consumes = { "multipart/form-data" }, produces = { "application/json" })

public ResponseEntity<SuccessResult> compareCLIs(HttpServletRequest request, @RequestParam("file") MultipartFile file, @PathVariable("deviceIp") String device) 
{
log.info(file.getOriginalFilename());
byte[] bytearr = file.getBytes();
log.info("byte length: ", bytearr.length);
log.info("Size : ", file.getSize());

}

This does not return any value for byte length or file size. I want to read the file values to a StringBuffer. Can someone provide pointers regarding this? I am not sure if I need to save this file before parsing it to a string. If so how do I save the file in the workspace?

Upvotes: 32

Views: 84823

Answers (3)

UsamaAmjad
UsamaAmjad

Reputation: 4604

The given answers are correct but the top answer said it's not efficient for large files and the reason is that it keeps the whole file in memory which means if you are uploading a 2gb file it will consume that much of memory. Instead of doing that we can read the file line by line and Apache Commons IO provides a nice API for it.

LineIterator it = FileUtils.lineIterator(theFile, "UTF-8");
try {
    while (it.hasNext()) {
        String line = it.nextLine();
        // do something with line
    }
} finally {
    LineIterator.closeQuietly(it);
}

source

Upvotes: 3

OlivierTerrien
OlivierTerrien

Reputation: 2601

If you want to load the content of a Multipart file into a String, the easiest solution is:

String content = new String(file.getBytes());

Or, if you want to specify the charset:

String content = new String(file.getBytes(), StandardCharsets.UTF_8);

However, if your file is huge, this solution is maybe not the best.

Upvotes: 53

Rodrigo Villalba Zayas
Rodrigo Villalba Zayas

Reputation: 5636

First, this is not related to Spring, and, second, you don't need to save the file to parse it.

To read the content of a Multipart file into a String you can use Apache Commons IOUtils class like this

ByteArrayInputStream stream = new   ByteArrayInputStream(file.getBytes());
String myString = IOUtils.toString(stream, "UTF-8");

Upvotes: 13

Related Questions