IM-上传文件

上传文件后,需要获取文件相关信息

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.disk.DiskFileItem;
import org.apache.commons.io.IOUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import java.io.*;
import java.util.UUID;

/**
 * IM 文件工具类
 * @author xxx
 */
@Slf4j
public class FileUtils {
    /**
     * 将 MultipartFile 转换为 File
     * @param multipartFile 要转换的 MultipartFile
     * @return 转换后的 File 对象
     * @throws IOException 如果文件操作失败
     */
    public static File convertMultipartFileToFile(MultipartFile multipartFile) {
        FileOutputStream fos = null;
        try {
            // 创建临时文件
            File tempFile = File.createTempFile("upload_", null);

            // 将 MultipartFile 的内容写入临时文件
            fos = new FileOutputStream(tempFile);
            fos.write(multipartFile.getBytes());
            return tempFile;
        } catch (IOException e) {
            log.error("Failed to convert MultipartFile to File", e);
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }


    /**
     * 将 File 转换为 CommonsMultipartFile
     * @param file
     * @param fieldName
     * @param contentType
     * @return
     * @throws IOException
     */
    public static CommonsMultipartFile convertFileToCommonsMultipartFile(File file, String fieldName, String contentType) throws IOException {
        return convertFileToCommonsMultipartFile(file, file.getName(), fieldName, contentType);
    }

    /**
     * 指定文件名、表单字段名、文件类型,将 File 转换为 CommonsMultipartFile
     * @param file
     * @param fileName 指定文件名
     * @param formFieldName 表单字段名
     * @param contentType 文件类型
     * @return
     * @throws IOException
     */
    public static CommonsMultipartFile convertFileToCommonsMultipartFile(File file, String fileName, String formFieldName, String contentType) throws IOException {
        boolean isFormField = true;
        log.info("fieldName:{}, fileName:{}", formFieldName, fileName);
        // Create DiskFileItem instance
        DiskFileItem fileItem = new DiskFileItem(formFieldName, contentType, isFormField, fileName, (int) file.length(), file.getParentFile());

        // Copy file content to DiskFileItem
        try (InputStream input = new FileInputStream(file);
             OutputStream os = fileItem.getOutputStream()) {
            IOUtils.copy(input, os);
        }

        // Create CommonsMultipartFile from DiskFileItem
        return new CommonsMultipartFile(fileItem);
    }

    public static void main(String[] args) {
        System.out.println(getFileSizeStr(5340628));
        System.out.println(getFileSizeStr(36433));
        System.out.println(getFileSizeStr(6423));
        System.out.println(getFileSizeStr(8961840));
    }

    public static String getFileSizeStr(long fileSize) {
        if(fileSize <= 0) {
            return "未知大小";
        }
        if (fileSize < 1024) {
            return fileSize + " B";
        } else if (fileSize < 1024 * 1024) {
            return String.format("%.2f KB", fileSize / 1024.0);
        } else if (fileSize < 1024 * 1024 * 1024) {
            return String.format("%.2f MB", fileSize / (1024.0 * 1024));
        } else {
            return String.format("%.2f GB", fileSize / (1024.0 * 1024 * 1024));
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值