这与上传xlsx
文件有关。最初,我将xlsx
文件作为javax.servlet.http.Part
并尝试转换为ByteArrayResource
,因为我需要通过RestTemplate
进行传递。
new ByteArrayResource(IOUtils.toByteArray(input.getFile().getInputStream())
这里input.getFile()
是javax.servlet.http.Part
当我将此处转换为ByteArrayResource
并发送回另一层用于业务逻辑时,我可以从filename
获得ByteArrayResource
吗?
无论如何我们可以从filename
获得Part
,我想知道是否有可能从filename
或ByteArrayResource
获得ByteArray
吗?
答案 0 :(得分:1)
您可能需要使用此答案中概述的FileNameAwareByteArrayResource
https://stackoverflow.com/questions/42416015/spring-boot-multipartfile-issue-with-bytearrayresource
,您便可以从中获取文件名。
答案 1 :(得分:0)
这已经很晚了,但如果有人仍在寻找答案。
ByteArrayResource
默认没有任何文件名。参见超类方法AbstractResource.getFileName()
,它返回null。因此,除非您在创建 ByteArrayResource
时明确设置名称,否则它将保持为空。
你可以像这样实现
ByteArrayResource resource = new ByteArrayResource(bytearray) {
@Override
public String getFilename() {
return "somename";
};
}
现在如何使用实际文件名而不是“somename”。如果您使用的是 Spring,则可以在控制器中定义一个方法,该方法接受 Multipart 作为参数。
public ResponseEntity<byte[]> handleFileOperation(Multipart file) {}
获得 MultipartFile 实例后,您可以按照自己的方式使用它。