Как преобразовать массив байтов в 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
спасибо.