zhangrui.i
zhangrui.i
发布于 2024-05-30 / 0 阅读
0
0

封装MultipartFile,处理MultipartFile为标准的文件资源

用于包装MultipartFile,以便在处理MultipartFile时,能够像处理标准的文件资源一样进行操作;

自定义的MultipartFileResource类,实现了Spring的AbstractResource接口;

package org.example.modules.utils;

import org.springframework.core.io.AbstractResource;
import org.springframework.core.io.Resource;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

/**
* 用于包装MultipartFile,以便在处理MultipartFile时,能够像处理标准的文件资源一样进行操作
* 自定义的MultipartFileResource类,实现了Spring的AbstractResource接口
*/
public class MultipartFileResource extends AbstractResource {

/**
* MultipartFile实例,存储实际的文件数据。
*/
private final MultipartFile file;

/**
* 构造函数,传入一个MultipartFile对象。
*
* @param file 要包装的MultipartFile对象
*/
public MultipartFileResource(MultipartFile file) {
this.file = file;
}

/**
* 获取MultipartFile的输入流,用于读取文件内容
*
* @return 文件的输入流
* @throws IOException 如果在获取输入流时发生错误
*/
@Override
public InputStream getInputStream() throws IOException {
return file.getInputStream();
}

/**
* 返回MultipartFile的大小(字节)
*
* @return 文件的大小
* @throws IOException 如果在获取文件大小时发生错误
*/
@Override
public long contentLength() throws IOException {
return file.getSize();
}

/**
* 返回MultipartFile的原始文件名
*
* @return 文件的原始文件名
*/
@Override
public String getFilename() {
return file.getOriginalFilename();
}

/**
* 提供资源的描述信息,包含文件名
*
* @return 描述信息,格式为"MultipartFile [filename]"
*/
@Override
public String getDescription() {
return "MultipartFile [" + file.getOriginalFilename() + "]";
}

/**
* MultipartFile不支持创建相对路径的资源,抛出UnsupportedOperationException
*
* @param relativePath 相对路径
* @return 不支持此操作,抛出异常
* @throws IOException 永远不会到达此点,但为了接口一致性,抛出异常
*/
@Override
public Resource createRelative(String relativePath) throws IOException {
throw new UnsupportedOperationException("Cannot create a relative resource for a MultipartFile");
}

// 其他AbstractResource的覆盖方法,可根据需要实现
}


评论