gpt4 book ai didi

spring-boot - 如何将base64转换为java中的MultipartFile

转载 作者:行者123 更新时间:2023-12-05 09:14:06 26 4
gpt4 key购买 nike

我有一个问题。我想将 BufferedImage 转换为 MultipartFile。首先,在我的 UI 上,我将 base64 发送到服务器,然后在我的服务器上,我转换为 BufferedImage 然后我想将 BufferedImage 转换为MultipartFile 并保存在本地存储中。这是我的方法:

@PostMapping("/saveCategory")
@ResponseStatus(HttpStatus.OK)
public void createCategory(@RequestBody String category ) {



BufferedImage image = null;
OutputStream stream;
byte[] imageByte;
try {
BASE64Decoder decoder = new BASE64Decoder();
imageByte = decoder.decodeBuffer(category);
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
image = ImageIO.read(bis);
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
String fileName = fileStorageService.storeFile(image );

我的存储方式:

public String storeFile(MultipartFile file) {
// Normalize file name
String fileName = StringUtils.cleanPath(file.getOriginalFilename());
try {
// Check if the file's name contains invalid characters
if (fileName.contains("..")) {
throw new FileStorageException("Sorry! Filename contains invalid path sequence " + fileName);
}

// Copy file to the target location (Replacing existing file with the same name)
Path targetLocation = this.fileStorageLocation.resolve(fileName);
Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);

return fileName;
} catch (IOException ex) {
System.out.println(ex);
throw new FileStorageException("Could not store file " + fileName + ". Please try again!", ex);

}
}

最佳答案

这种从 base64MultipartFile 的转换是由 Spring 自动完成的。您只需要使用正确的注释即可。

您可以创建一个包含所有必要数据的包装器 dto 类。

public class FileUploadDto {
private String category;
private MultipartFile file;
// [...] more fields, getters and setters
}

然后你可以在你的 Controller 中使用这个类:

@RestController
@RequestMapping("/upload")
public class UploadController {

private static final Logger logger = LoggerFactory.getLogger(UploadController.class);

@PostMapping
public void uploadFile(@ModelAttribute FileUploadDto fileUploadDto) {
logger.info("File upladed, category= {}, fileSize = {} bytes", fileUploadDto.getCategory(), fileUploadDto.getFile().getSize());
}

}

我第一眼没看懂问题的原因是@RequestBody String category。我认为这是一个非常具有误导性的文件变量名。但是,我还创建了带有类别字段的 DTO 类,因此您可以将其包含在您的请求中。

当然,然后你摆脱你的 Controller 逻辑并简单地调用服务方法,如 fileStorageService.storeFile(fileUploadDto.getFile()); 或者传递整个文件并利用 类别 字段。

编辑

我还包括从 Postman 发送的请求和一些控制台输出:

Postman request and console output

关于spring-boot - 如何将base64转换为java中的MultipartFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54923050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com