java 文件上传的那些事

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

java 文件上传的那些事

奔跑の虾米   2021-01-20 我要评论

文件上传

逻辑

    @Value("${sava_path}")
    private String sava_path;

    @Override
    public String saveFile(MultipartFile multipartFile) {
        //获取上传文件名
        String oldName;
        // 保存的文件名
        String fileName = null;
        //判断文件是否为空
        if (!multipartFile.isEmpty()) {
            oldName = multipartFile.getOriginalFilename();
            fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1);
           //创建文件对象
            File file = new File(sava_path + fileName);
            //判断当前文件夹目录在计算机是否存在
            if (!file.getParentFile().exists()) {
                //创建文件目录
                file.getParentFile().mkdirs();
                try {
                    //保存文件
                    multipartFile.transferTo(file);
                }catch (Exception e){
                    e.printStackTrace();
                   return "文件上传失败";
                }
            } else {
                //判断文件是否存在
                if (!file.exists()) {
                    try {
                        //保存文件
                        multipartFile.transferTo(file);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }else{
                    //重新命名
                    fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1);
                    file = new File(sava_path + fileName);
                    try {
                        //保存文件
                        multipartFile.transferTo(file);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }

        } else {
            return "文件为空";
        }

        return "上传成功";
    }

配置

// application.yml 格式
sava_path: D:\testFile\  

//application.properties 格式
sava_path=D:\testFile\ 

按照自己的习惯选其中之一添加在你的配置文件  (sava_path  存放文件的目录)

生成文件名

/**
     * 时间戳加上传文件的后缀
     *  System.currentTimeMillis()  时间戳
     *  oldName.substring(oldName.indexOf(".")+1)  上传文件名中第一次出现.后的所有字符  +1 是为了排除.
     */
    String fileName = System.currentTimeMillis()+"."+oldName.substring(oldName.indexOf(".")+1);
   /**
     * 生成字母加数字的随机数
     * @param length  长度
     * @return
     */
    public static String getStringRandom(int length) {
        String val = "";
        Random random = new Random();
        //参数length,表示生成几位随机数
        for (int i = 0; i < length; i++) {
            String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
            //输出字母还是数字
            if ("char".equalsIgnoreCase(charOrNum)) {
                //输出是大写字母还是小写字母
                int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
                val += (char) (random.nextInt(26) + temp);
            } else if ("num".equalsIgnoreCase(charOrNum)) {
                val += String.valueOf(random.nextInt(10));
            }
        }
        return val;
    }

  /**
             * getStringRandom(15) 调用上面的方法 给出你所需文件名的长度
             * 其他的和时间戳的一致
             */
            fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1);

选择其中的一种 个人喜欢第二个

 

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们