Как преобразовать массив байтов в MultipartFile

Я получаю изображение в виде закодированной строки BASE64(encodedBytes) и использую следующий подход для декодирования в byte[] на стороне сервера.

BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);

теперь я хочу преобразовать его в MultipartFile, используя этот байт, полученный выше?

есть ли способ преобразовать byte[] в org.springframework.сеть.составной.MultipartFile??

2 ответов


org.springframework.сеть.составной.MultipartFile-это интерфейс, поэтому сначала вам нужно будет работать с реализацией этого интерфейса.

единственная реализация, которую я вижу для этого интерфейса, который вы можете использовать из коробки,-это org.springframework.сеть.составной.палата общин.CommonsMultipartFile. API для этой реализации можно найти здесь

альтернативно как org.springframework.сеть.составной.MultipartFile-это интерфейс, вы можете предоставить свою собственную реализацию и просто обернуть свой массив байтов. Банальный пример:

/*
*<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);
        }
    }

этот ответ уже был дан ответ выше. Недавно я работал над требованием преобразовать объект массива байтов в объект multipartfile. Есть два способа достичь этого.

подход 1:

используйте CommonsMultipartFile по умолчанию, где вы должны использовать объект FileDiskItem для его создания. Пример:

Approach 1:

использовать CommonsMultipartFile по умолчанию, где вы использовать объект FileDiskItem создать он. Пример:

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);

подход 2:

создайте свой собственный объект multipart file и преобразуйте массив байтов в 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);
}
}

это, как вы можете использовать выше объекта CustomMultipartFile.

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);
}

это создаст необходимый PDF-файл и сохранит его в

Ява.Ио.никакое сжатие с именем intermediate.формат PDF

спасибо.