{{userInfo.nickname}}
用户设置 退出登录

{{wikiTitle}}

图片文件路径域名拼接

一、生成文件路径

1.图片文件上传路径生成

/**
 * 公共上传方法
 * 
 * @param multipartFile 上传文件对象
 * @param model         业务模块标识(user/product/wechat/article/system)
 * @param pid           分类ID(0=编辑器,1=商品图片...8=微信系列)
 * @param fileType      文件类型标识(file/uploadf)
 * @return FileResultVo 包含文件路径信息的对象
 * @throws IOException 文件操作异常
 */
private FileResultVo commonUpload(MultipartFile multipartFile, String model, Integer pid, String fileType) 
    throws IOException {
    ...
    // 文件校验逻辑(大小、后缀名等)...
    ...
    // 核心路径构建
    String rootPath = crmebConfig.getImagePath().trim();
    String modelPath = "public/" + model + "/";
    ...
    // 动态文件类型目录(适配普通文件/后台上传文件)
    String type = (fileType.equals(UploadConstants.UPLOAD_FILE_KEYWORD) ? UploadConstants.UPLOAD_FILE_KEYWORD : UploadConstants.UPLOAD_AFTER_FILE_KEYWORD) + "/";

    ...
    // 生成唯一文件名(含扩展名)
    String newFileName = UploadUtil.fileName(extName);
    ...
    // 构建存储路径(格式:类型目录/业务模块/年月日/)
    String datePath = CrmebDateUtil.nowDate("yyyy/MM/dd");
    String webPath = type + modelPath + datePath + "/";
    ...
    // 生成完整物理路径
    String destPath = FilenameUtils.separatorsToSystem(rootPath + webPath) + newFileName;
    File file = UploadUtil.createFile(destPath);
    ...
    // 返回路径信息(示例:public/maintain/2024/05/13/filename.jpg)
    resultFile.setUrl(webPath + newFileName);
}

路径生成规则:

[文件类型]/public/[业务模块]/[年]/[月]/[日]/[唯一文件名].[扩展名]
示例:crmebimage/public/maintain/2024/05/13/0b7d5da5f1944b48a4a11d56a11ad457.jpg

2.导出文件路径生成

/**
     * 订单导出
     *
     * @param request  查询条件
     * @return 文件名称
     */
    @Override
    public String exportOrder(StoreOrderSearchRequest request) {
         // 上传设置
         ExportUtil.setUpload(crmebConfig.getImagePath(), Constants.UPLOAD_MODEL_PATH_EXCEL, UploadConstants.DOWNLOAD_FILE_KEYWORD);

        // 文件名
        String fileName = "订单导出_".concat(CrmebDateUtil.nowDateTime(Constants.DATE_TIME_FORMAT_NUM)).concat(CrmebUtil.randomCount(111111111, 999999999).toString()).concat(".xlsx");

}
    public static void setUpload(String rootPath, String modelPath, String type) {
        if (StrUtil.isBlank(rootPath) || StrUtil.isBlank(modelPath) || StrUtil.isBlank(type)) {
            throw new CrmebException("请检查上传参数,上传参数不能为空");
        }
        UploadUtil.setRootPath(rootPath);
        UploadUtil.setModelPath(UploadConstants.UPLOAD_FILE_KEYWORD +"/"+UploadConstants.DOWNLOAD_FILE_KEYWORD+"/"+modelPath);

    }

路径生成规则:

crmebimage/downloadf/excel/[年]/[月]/[日]/[业务文件名]_[时间戳][随机数].xlsx
示例:crmebimage/downloadf/excel/2025/05/08/订单导出_20250508115932211297549.xlsx

二、拼接域名

统一域名处理器

public class ResponseRouter {
     ...
    public String filter(String data, String path, CrmebConfig crmebConfig) {
            ...
            if ((data.contains(UploadConstants.UPLOAD_FILE_KEYWORD + "/"))
                || data.contains(UploadConstants.DOWNLOAD_FILE_KEYWORD) || data.contains(UploadConstants.UPLOAD_AFTER_FILE_KEYWORD)) {
            if (data.contains(UploadConstants.DOWNLOAD_FILE_KEYWORD + "/" + UploadConstants.UPLOAD_MODEL_PATH_EXCEL)) {
                data = SpringUtil.getBean(SystemAttachmentService.class).prefixFile(data);
            } else if (data.contains(UploadConstants.UPLOAD_AFTER_FILE_KEYWORD + "/")) {
                data = SpringUtil.getBean(SystemAttachmentService.class).prefixUploadf(data);
            } else {
                data = SpringUtil.getBean(SystemAttachmentService.class).prefixImage(data);
            }
        }
    }
}

例如:订单导出会判断若文件路径包含 crmebimage/downloadf/excel ,然后会进入 prefixFile(data) 方法进行拼接前缀。

域名拼接实现

/**
     * 给文件加前缀
     * @param path String 路径
     * @return String
     */
    @Override
    public String prefixFile(String path) {
        if (path.contains(Constants.WECHAT_SOURCE_CODE_FILE_NAME)) {
            String cdnUrl = systemConfigService.getValueByKey("local" + "UploadUrl");
            return path.replace("crmebimage/", cdnUrl + "/crmebimage/");
        }
        if (path.contains("downloadf/excel")) {
            String cdnUrl = systemConfigService.getValueByKey("local" + "UploadUrl");
            return path.replace("crmebimage/downloadf/", cdnUrl + "/crmebimage/downloadf/");
        }
        return path.replace("crmebimage/file/", getCdnUrl() + "/crmebimage/file/");
    }
{{cateWiki.like_num}}人点赞
0人点赞
评论({{cateWiki.comment_num}}) {{commentWhere.order ? '评论从旧到新':'评论从新到旧'}} {{cateWiki.page_view_num}}人看过该文档
评论(0) {{commentWhere.order ? '评论从旧到新':'评论从新到旧'}} 229人看过该文档
评论
{{item.user ? item.user.nickname : ''}} (自评)
{{item.content}}
{{item.create_time}} 删除
{{item.like ? item.like.like_num : 0}} {{replyIndex == index ? '取消回复' : '回复'}}
评论
{{items.user ? items.user.nickname : '暂无昵称'}} (自评)
{{items.content}}
{{items.create_time}} 删除
{{items.like ? items.like.like_num : 0}} {{replyIndexJ == (index+'|'+indexJ) ? '取消回复' : '回复'}}
评论
目录
  • {{item}}