若依分离版文件上传后端逻辑分析

若依已经将文件上传的后端方法封装完毕

com.ruoyi.web.controller.common.CommonController 下uploadFile方法

在这里插入图片描述

开始debug调试

一 .获取文件上传路径

**

   // 上传文件路径
            String filePath = RuoYiConfig.getUploadPath();

进入RuoYiConfig类下找到getUploadPath()方法

 /**
     * 获取上传路径
     */
    public static String getUploadPath()
    {
        return getProfile() + "/upload";
    }


 public static String getProfile()
    {
        return profile;
    }

	/** 上传路径 */
    private static String profile;

其中静态变量profile为 配置文件application.yml 下更改(注解@ConfigurationProperties获取配置文件中参数)
在这里插入图片描述
得到filePath

二. 获取新的文件名


            String fileName = FileUploadUtils.upload(filePath, file);
          

FileUploadUtils(文件上传工具类下)upload 方法

/**
     * 根据文件路径上传
     *
     * @param baseDir 相对应用的基目录
     * @param file 上传的文件
     * @return 文件名称
     * @throws IOException
     */
    public static final String upload(String baseDir, MultipartFile file) throws IOException
    {
        try
        {
            return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
        }
        catch (Exception e)
        {
            throw new IOException(e.getMessage(), e);
        }
    }

upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION)
传入文件路径,文件流,允许传入文件格式

 /**
     * 文件上传
     *
     * @param baseDir 相对应用的基目录
     * @param file 上传的文件
     * @param allowedExtension 上传文件类型
     * @return 返回上传成功的文件名
     * @throws FileSizeLimitExceededException 如果超出最大大小
     * @throws FileNameLengthLimitExceededException 文件名太长
     * @throws IOException 比如读写文件出错时
     * @throws InvalidExtensionException 文件校验异常
     */
    public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension)
            throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
            InvalidExtensionException
    {
        int fileNamelength = file.getOriginalFilename().length();
        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH)
        {
            throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
        }

        assertAllowed(file, allowedExtension);

        String fileName = extractFilename(file);

        File desc = getAbsoluteFile(baseDir, fileName);
        file.transferTo(desc);
        String pathFileName = getPathFileName(baseDir, fileName);
        return pathFileName;
    }

判断文件长度是否大于默认值,判断文件是否允许上传,
使用extractFilename方法获取新的文件名

/**
     * 编码文件名
     */
    public static final String extractFilename(MultipartFile file)
    {   //获得文件原始名
        String fileName = file.getOriginalFilename();
        //获取文件格式
        String extension = getExtension(file);
        //DateUtils.datePath()获取当前日期     并将三部分拼接形成新的文件名
        fileName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension;
        return fileName;
    }

file.transferTo(desc) 传输文件,传输完毕,得到fileName

三、获取访问路径 ,拼接文件名 ,形成url

 String url = serverConfig.getUrl() + fileName;

四、返回前端请求

  AjaxResult ajax = AjaxResult.success();
            ajax.put("fileName", fileName);
            ajax.put("url", url);
            return ajax;
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值