我们可以从byteArrayResource获取文件名吗?

时间:2019-05-24 07:02:49

标签: java spring spring-boot

这与上传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,我想知道是否有可能从filenameByteArrayResource获得ByteArray吗?

2 个答案:

答案 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 实例后,您可以按照自己的方式使用它。