InputStream:处理字节相关,如声音或者图片等二进制,输入字节流。

MultipartFile:org.springframework.web.mutipart包下的一个类,也就是说如果想使用MultipartFile这个类就必须引入spring框架,换句话说,如果想在项目中使用MultipartFile这个类,那么项目必须要使用spring框架才可以,否则无法引入这个类。一般来讲使用MultipartFile这个类主要是来实现以表单的形式进行文件上传功能。

首先MultipartFile是一个接口,并继承自InputStreamSource,且在InputStreamSource接口中封装了getInputStream方法,该方法的返回类型为InputStream类型,这也就是为什么MultipartFile文件可以转换为输入流。

因此通过以下方法将MultipartFile转换成InputStream

InputStream fileStream = MultipartFile.getInputStream();

然而在InputStream转换成MultipartFile中我们会使用MockMultipartFile这个类

public MockMultipartFile(String name, byte[] content) {
        this(name, "", (String)null, (byte[])content);
    }

    public MockMultipartFile(String name, InputStream contentStream) throws IOException {
        this(name, "", (String)null, (byte[])FileCopyUtils.copyToByteArray(contentStream));
    }

    public MockMultipartFile(String name, String originalFilename, String contentType, byte[] content) {
        Assert.hasLength(name, "Name must not be null");
        this.name = name;
        this.originalFilename = originalFilename != null ? originalFilename : "";
        this.contentType = contentType;
        this.content = content != null ? content : new byte[0];
    }

    public MockMultipartFile(String name, String originalFilename, String contentType, InputStream contentStream) throws IOException {
        this(name, originalFilename, contentType, FileCopyUtils.copyToByteArray(contentStream));
    }

MockMultipartFile存在四个构造方法,需要注意的是,使用MockMultipartFile将InputStream转成MultipartFile后MultipartFile中不会获取到文件的contentType,需要按实际需求选择构造方法进行转换。

下面是我在实际应用中使用到的转换

/**
         * filename:文件名
         * file.getName():原文件名称
         * file.getContentType():原文件ContentType
         * fileStream:文件输入字节流
         */
MultipartFile File = new MockMultipartFile(filename, file.getName(), file.getContentType(), fileStream);

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐