How to convert byte array to MultipartFile How to convert byte array to MultipartFile arrays arrays

How to convert byte array to MultipartFile


org.springframework.web.multipart.MultipartFile is an interface so firstly you are going to need to work with an implementation of this interface.

The only implementation that I can see for that interface that you can use out-of-the-box is org.springframework.web.multipart.commons.CommonsMultipartFile. The API for that implementation can be found here

Alternatively as org.springframework.web.multipart.MultipartFile is an interface, you could provide your own implementation and simply wrap your byte array. As a trivial example:

/**<p>* Trivial implementation of the {@link MultipartFile} interface to wrap a byte[] decoded* from a BASE64 encoded String*</p>*/public class BASE64DecodedMultipartFile implements MultipartFile {        private final byte[] imgContent;        public BASE64DecodedMultipartFile(byte[] imgContent) {            this.imgContent = imgContent;        }        @Override        public String getName() {            // TODO - implementation depends on your requirements             return null;        }        @Override        public String getOriginalFilename() {            // TODO - implementation depends on your requirements            return null;        }        @Override        public String getContentType() {            // TODO - implementation depends on your requirements            return null;        }        @Override        public boolean isEmpty() {            return imgContent == null || imgContent.length == 0;        }        @Override        public long getSize() {            return imgContent.length;        }        @Override        public byte[] getBytes() throws IOException {            return imgContent;        }        @Override        public InputStream getInputStream() throws IOException {            return new ByteArrayInputStream(imgContent);        }        @Override        public void transferTo(File dest) throws IOException, IllegalStateException {             new FileOutputStream(dest).write(imgContent);        }    }


This answer has already been answered above. Recently i was working on the requirement to convert byte array object to multipartfile object. There are two ways to achieve this.

Approach 1:

Use the default CommonsMultipartFile where you to use the FileDiskItem object to create it.Example:

Approach 1:

Use the default CommonsMultipartFile where you to use the FileDiskItem object to create it.Example:

FileItem fileItem = new DiskFileItem("fileData", "application/pdf",true, outputFile.getName(), 100000000, new java.io.File(System.getProperty("java.io.tmpdir")));              MultipartFile multipartFile = new CommonsMultipartFile(fileItem);

Approach 2:

Create your own custom multipart file object and convert the byte array to multipartfile.

public class CustomMultipartFile implements MultipartFile {private final byte[] fileContent;private String fileName;private String contentType;private File file;private String destPath = System.getProperty("java.io.tmpdir");private FileOutputStream fileOutputStream;public CustomMultipartFile(byte[] fileData, String name) {    this.fileContent = fileData;    this.fileName = name;    file = new File(destPath + fileName);}@Overridepublic void transferTo(File dest) throws IOException, IllegalStateException {    fileOutputStream = new FileOutputStream(dest);    fileOutputStream.write(fileContent);}public void clearOutStreams() throws IOException {if (null != fileOutputStream) {        fileOutputStream.flush();        fileOutputStream.close();        file.deleteOnExit();    }}@Overridepublic byte[] getBytes() throws IOException {    return fileContent;}@Overridepublic InputStream getInputStream() throws IOException {    return new ByteArrayInputStream(fileContent);}}

This how you can use above CustomMultipartFile object.

String fileName = "intermediate.pdf";CustomMultipartFile customMultipartFile = new CustomMultipartFile(bytea, fileName);try {customMultipartFile.transferTo(customMultipartFile.getFile());} catch (IllegalStateException e) {    log.info("IllegalStateException : " + e);} catch (IOException e) {    log.info("IOException : " + e);}

This will create the required PDF and store that into

java.io.tmpdir with the name intermediate.pdf

Thanks.