Je reçois une image sous la forme d'une chaîne codée BASE64 (encodedBytes) et utilise l'approche suivante pour le décoder en octet [] côté serveur.
BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);
Maintenant, je veux le convertir en MultipartFile en utilisant cet octet obtenu ci-dessus?
Existe-t-il un moyen de convertir byte [] en org.springframework.web.multipart.MultipartFile ??
org.springframework.web.multipart.MultipartFile
est une interface, donc vous devez d'abord travailler avec une implémentation de cette interface.
La seule implémentation que je peux voir pour cette interface que vous pouvez utiliser immédiatement est org.springframework.web.multipart.commons.CommonsMultipartFile
. L'API pour cette implémentation peut être trouvé ici
Sinon, comme org.springframework.web.multipart.MultipartFile
est une interface, vous pouvez fournir votre propre implémentation et simplement envelopper votre tableau d'octets. À titre d'exemple trivial:
/*
*<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);
}
}
Cette réponse a déjà été répondue ci-dessus. Récemment, je travaillais sur l'exigence de convertir un objet tableau d'octets en un objet multipartfile. Il y a deux façons d'y parvenir.
Approche 1:
Utilisez le fichier CommonsMultipartFile par défaut où vous utilisez l'objet FileDiskItem pour le créer. Exemple:
Approach 1:
Utilisez le fichier CommonsMultipartFile par défaut où vous utilisez l'objet FileDiskItem pour le créer. Exemple:
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);
Approche 2:
Créez votre propre objet fichier multipart personnalisé et convertissez le tableau d'octets en fichier multipart.
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);
}
}
Voici comment vous pouvez utiliser l'objet CustomMultipartFile ci-dessus.
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);
}
Ceci créera le PDF requis et le stockera dans
Java.io.tmpdir Avec le nom intermediate.pdf
Merci.