BASE64エンコードされたString(encodedBytes)の形式で画像を受信し、次のアプローチを使用してサーバー側でbyte []にデコードします。
BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);
ここで、上記で取得したこのバイトを使用してMultipartFileに変換したいですか?
Byte []をorg.springframework.web.multipart.MultipartFileに変換する方法はありますか?
org.springframework.web.multipart.MultipartFile
はインターフェースであるため、最初にこのインターフェースの実装で作業する必要があります。
そのまま使用できるそのインターフェースについて私が見ることができる唯一の実装はorg.springframework.web.multipart.commons.CommonsMultipartFile
。その実装のAPIは次の場所にあります here
または、org.springframework.web.multipart.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オブジェクトに変換する要件に取り組んでいました。これを実現するには2つの方法があります。
アプローチ1:
FileDiskItemオブジェクトを使用して作成するデフォルトのCommonsMultipartFileを使用します。例:
Approach 1:
FileDiskItemオブジェクトを使用して作成するデフォルトのCommonsMultipartFileを使用します。例:
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:
独自のカスタムマルチパートファイルオブジェクトを作成し、バイト配列をマルチパートファイルに変換します。
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という名前のJava.io.tmpdir
ありがとう。