How to convert byte array to MultipartFile

前端 未结 2 1605
余生分开走
余生分开走 2020-12-01 03:56

I am receiving image in the form of BASE64 encoded String(encodedBytes) and use following approach to decode into byte[] at server side.

BASE64Decoder decode         


        
相关标签:
2条回答
  • 2020-12-01 04:15

    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);
            }
        }
    
    0 讨论(0)
  • 2020-12-01 04:32

    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.

    0 讨论(0)
提交回复
热议问题