I am receiving image in the form of BASE64 encoded String(encodedBytes) and use following approach to decode into byte[] at server side.
BASE64Decoder decoder = new BASE64Decoder(); byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);
Now i want to convert it into MultipartFile using this byte obtained above?
Is there any way to convert byte[] to org.springframework.web.multipart.MultipartFile??
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.
Convert byte[] array to File using Java In order to convert a byte array to a file, we will be using a method named the getBytes() method of String class. Implementation: Convert a String into a byte array and write it in a file.
Using the transferTo() method, we simply have to create the File that we want to write the bytes to, then pass that file to the transferTo() method. The transferTo() method is useful when the MultipartFile only needs to be written to a File.
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); } @Override public 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(); } } @Override public byte[] getBytes() throws IOException { return fileContent; } @Override public 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With