datai/docs/archive/changelog/0014-contentdocument-upload-download.md

131 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 变更记录ContentDocument/ContentVersion 文件上传下载功能实现
## 变更信息
- **版本号**: v1.0.2
- **发布日期**: 2026-01-19
- **变更类型**: [特性更新]
## 变更摘要
本次变更实现了Salesforce ContentDocument/ContentVersion对象的文件上传下载功能使用REST API + Multipart/form-data方式进行文件上传使用REST API + 流式处理方式进行文件下载。引入了Apache HttpClient依赖支持最大2GB文件使用流式处理避免内存溢出。
## 详细变更
### 特性更新
- **Apache HttpClient依赖** - 在datai-salesforce-integration模块的pom.xml中引入Apache HttpClient依赖
- httpclient依赖版本4.5.13- 提供HTTP客户端功能
- httpmime依赖版本4.5.13- 提供Multipart/form-data支持
- **ContentVersionUploadStrategy类** - 实现了ContentVersion上传策略使用REST API + Multipart/form-data方式上传文件支持最大2GB文件大小包含文件验证、会话管理、错误处理等功能
- **ContentVersionDownloadStrategy类** - 实现了ContentVersion下载策略使用REST API + 流式处理方式下载文件使用BufferedInputStream和ByteArrayOutputStream避免内存溢出包含会话管理、错误处理等功能
- **ContentVersionFileService接口** - 定义了ContentVersion文件服务接口包含uploadContentVersion()和downloadContentVersion()方法
- **ContentVersionFileServiceImpl类** - 实现了ContentVersion文件服务使用策略模式封装上传下载逻辑通过@Autowired注入FileUploadStrategy和FileDownloadStrategy
### 技术实现
- **REST API集成** - 使用Apache HttpClient进行REST API调用设置Authorization、Content-Type等请求头
- **Multipart/form-data上传** - 使用MultipartEntityBuilder构建Multipart/form-data请求支持Title、PathOnClient、FirstPublishLocationId、Description等字段
- **流式处理** - 上传时使用FileInputStream读取文件内容下载时使用BufferedInputStream和ByteArrayOutputStream进行流式处理避免大文件导致内存溢出
- **会话管理** - 使用SessionManager获取Access Token和Instance URL支持自动重新登录
- **异常处理** - 实现了完善的异常处理机制包括FileSizeExceededException、FileTypeNotSupportedException、FileValidationException、OrgConfigNotFoundException、FileUploadException、FileDownloadException等
- **日志记录** - 使用@Slf4j注解记录关键操作日志包括上传下载开始、成功、失败等
## 影响范围
### 受影响的模块
- **datai-salesforce-integration模块** - 新增文件上传下载策略和服务引入Apache HttpClient依赖
- **策略包** - 新增ContentVersionUploadStrategy类、ContentVersionDownloadStrategy类
- **服务包** - 新增ContentVersionFileService接口、ContentVersionFileServiceImpl类
### 兼容性说明
- **向后兼容** - 本次变更不影响现有功能
- **API兼容性** - 新增的策略和服务提供独立的API接口
- **依赖兼容性** - Apache HttpClient 4.5.13与Spring Boot 3兼容
## 升级指南
### 升级步骤
1. **引入依赖** - 确保项目已引入Apache HttpClient依赖httpclient 4.5.13、httpmime 4.5.13
2. **代码集成** - 在需要使用ContentVersion文件上传下载功能的模块中引入新增的策略和服务类
3. **配置验证** - 确保SessionManager已正确配置能够获取Access Token和Instance URL
### 使用示例
```java
@Autowired
private ContentVersionFileService contentVersionFileService;
public void uploadFile() {
FileUploadRequest request = FileUploadRequest.builder()
.orgConfigId("org-config-id")
.fileType(FileObjectType.CONTENT_DOCUMENT)
.file(multipartFile)
.relatedRecordId("record-id")
.fileName("example.pdf")
.description("示例文件")
.build();
FileUploadResponse response = contentVersionFileService.uploadContentVersion(request);
System.out.println("文件上传成功: " + response.getFileId());
}
public void downloadFile() {
FileDownloadRequest request = FileDownloadRequest.builder()
.orgConfigId("org-config-id")
.fileType(FileObjectType.CONTENT_DOCUMENT)
.fileId("content-version-id")
.fileName("example.pdf")
.build();
FileDownloadResponse response = contentVersionFileService.downloadContentVersion(request);
System.out.println("文件下载成功: " + response.getFileSize());
}
```
### 注意事项
- **文件大小限制** - ContentVersion对象的文件大小限制是2GB
- **Multipart/form-data上传** - 使用Multipart/form-data方式上传不需要Base64编码减少内存开销
- **流式处理** - 上传下载时使用流式处理避免内存溢出,适合大文件处理
- **会话管理** - 确保SessionManager已正确配置能够获取Access Token和Instance URL
- **错误处理** - 建议调用方捕获并处理可能的异常如FileUploadException、FileDownloadException等
- **临时文件清理** - 上传时会创建临时文件,上传完成后会自动删除
## 测试信息
### 测试环境
- **开发环境** - 本地开发环境
- **测试环境** - 待定
### 测试结果
- **编译检查** - 通过IDE诊断检查无编译错误或警告
- **单元测试** - 待完成(目标测试覆盖率 ≥ 90%
- **代码质量检查** - 待完成SonarQube、Checkstyle、SpotBugs
## 相关链接
- [需求文档](../requirements/REQ-011.md) - Salesforce文件上传下载功能
- [子需求文档](../requirements/REQ-011-3.md) - ContentDocument/ContentVersion 文件上传下载功能
- [架构决策](../decisions/adr/0029-contentdocument-upload-download.md) - ContentDocument/ContentVersion 文件上传下载架构决策
- [执行提示词](../prompts/030-contentdocument-upload-download.md) - ContentDocument/ContentVersion 文件上传下载执行提示词
- [会话记录](../sessions/20260119-req-011-3-contentdocument-upload-download.md) - REQ-011-3执行会话记录
- [参考代码](../reference-code/data-dump/ContentVersion上传下载.md) - Salesforce ContentVersion 上传实现逻辑
- [参考代码](../reference-code/data-dump/大文件上传下载.md) - 大文件上传下载实现逻辑Multipart/form-data
## 发布人员
- **开发人员** - SSOT架构师
## 审核信息
- **审核人员**: 待定
- **审核日期**: 待定
- **审核状态**: [待审核]
- **审核意见**: 待审核