java文件上传工具类

package com.bilibili.juc.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@RestController
@RequestMapping("upload")
public class UploadController {

    public static final int AVATAR_MAX_SIZE = 10 * 1024 * 1024;

    private final Logger logger = LoggerFactory.getLogger(UploadController.class);

    public static final List<String> AVATAR_TYPES = new ArrayList<String>();

    /** 初始化允许上传的头像的文件类型 */
    static {
        AVATAR_TYPES.add("image/jpeg");
        AVATAR_TYPES.add("image/png");
        AVATAR_TYPES.add("image/bmp");
        AVATAR_TYPES.add("image/gif");
        AVATAR_TYPES.add("text/plain");
        AVATAR_TYPES.add("application/vnd.ms-excel");
        AVATAR_TYPES.add("application/msword");
    }


    @RequestMapping("/uploadFile")
    public String changeAvatar(@RequestParam("file") MultipartFile file) {
        // 判断上传的文件是否为空
        if (file.isEmpty()) {
            logger.info("上传的头像文件不允许为空");
        }

        // 判断上传的文件大小是否超出限制值
        if (file.getSize() > AVATAR_MAX_SIZE) { // getSize():返回文件的大小,以字节为单位
            // 是:抛出异常
            logger.info("不允许上传超过" + (AVATAR_MAX_SIZE / 1024) + "KB的头像文件");
        }

        // 判断上传的文件类型是否超出限制
        String contentType = file.getContentType();
        logger.info("文件类型contentType:{}", contentType);

        if (!AVATAR_TYPES.contains(contentType)) {
            // 是:抛出异常
            logger.info("不允许上传超过" + ("不支持使用该类型的文件作为头像,允许的文件类型:" + AVATAR_TYPES));
        }

        // 获取当前项目的绝对磁盘路径
        String parent = "D:\\upload";
        // 保存头像文件的文件夹
        File dir = new File(parent);
        if (!dir.exists()) {
            //若是文件路径不存在,就新建文件路径
            dir.mkdirs();
        }

        // 保存的头像文件的文件名
        String suffix = "";

        String originalFilename = file.getOriginalFilename();

        int index = originalFilename.indexOf(".");
        if (index > 0) {
            suffix = originalFilename.substring(index);
        }

        String filename = UUID.randomUUID().toString().toUpperCase() + suffix;

        // 创建文件对象,表示保存的头像文件
        File dest = new File(dir, filename);

        try {
            file.transferTo(dest);
        } catch (IllegalStateException e) {
            // 抛出异常
            logger.info("文件状态异常,可能文件已被移动或删除");
        } catch (IOException e) {
            // 抛出异常
            logger.info("上传文件时读写错误,请稍后重新尝试");
        }

        return "OK";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值