تبدیل byteArray# به MultipartFile# بدون ایجاد فایل فیزیکی روی سرور ، با استفاده از #TempFile و MockMultipartFile# :
بعضی اوقات پیش میاد که شما از سرور بیرونی مثلا FileStorage فایلی را به صورت []byte دریافت می کنید و می خواهید آن را به صورت back-to-back به سرویس دیگری که ورودی فایل MultipartFile میگیرد ،بفرستید.
شما در اینجا دوتا تبدیل باید انجام بدین:
1) تبدیل byteArray به file
2) تبدیل file به multipartFile
شما در متود اول میتونید با استفاده از ()File.createTempFile ورودی []byte را گرفته و روی ram یک فایل موقت بسازید.
private static File byteArrayToFile(byte[] byteArray) {
if (null == byteArray) {
throw new BusinessException(500, "byteArrayToFile.input is null");
}
File tempFile = null;
try {
tempFile = File.createTempFile("prefix", ".pdf", null);
} catch (Exception exception) {
throw new BusinessException(500, "byte[] to file has error");
}
try (FileOutputStream fos = new FileOutputStream(tempFile)) {
fos.write(byteArray);
} catch (Exception e) {
throw new BusinessException(500, "generate file has error");
}
return tempFile;
}
سپس با استفاده از کلاس های MockMultipartFile# ورودی File را به MultipartFile تبدیل کند.
private static MultipartFile fileToMultipartFile(File file) {
if (null == file) {
throw new BusinessException(500, "file is null");
}
MultipartFile multipartFile2;
try {
FileInputStream input = new FileInputStream(file);
multipartFile2 = new MockMultipartFile("file",
file.getName(), "application/pdf", IOUtils.toByteArray(input));
} catch (Exception e) {
throw new BusinessException(500, "convert file to multipartfile file has error");
}
return multipartFile2;
}
برای استفاده از کلاس های MockMultipartFile لازمه که کتابخانه ی زیر را به پروژه اضافه کنید:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
به امید روزهای خوب برای ایران قشنگمون ...