{{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.comment_num}})
{{commentWhere.order ? '评论从旧到新':'评论从新到旧'}}
{{cateWiki.page_view_num}}人看过该文档


评论(0)
{{commentWhere.order ? '评论从旧到新':'评论从新到旧'}}
229人看过该文档




{{item.user ? item.user.nickname : ''}} (自评)
{{item.content}}
{{item.create_time}} 删除




搜索结果
为您找到{{wikiCount}}条结果
{{item.page_view_num}}
{{item.like ? item.like.like_num : 0}}
{{item.comment ? item.comment.comment_num : 0}}
位置:{{path.name}} {{(i+1) == item.catalogue.path_data.length ? '':'/'}}


