# SSE 导出文件进度显示
**Repository Path**: loveball/sse-export
## Basic Information
- **Project Name**: SSE 导出文件进度显示
- **Description**: 基于SSE(Server-Sent Events)技术实现的文件导出功能,支持实时进度显示
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-03-15
- **Last Updated**: 2025-03-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# SSE导出插件使用文档
## 功能介绍
基于SSE(Server-Sent Events)技术实现的文件导出功能,支持实时进度显示。主要特点:
- 实时显示导出进度
- 支持大文件导出
- 异步处理不阻塞
- 使用简单,配置灵活
## DEMO视频
[video.mp4](docs%2Fvideo.mp4)
## 快速开始
### 1. 引入必要文件
```html
```
### 2. 添加导出按钮
```html
```
### 3. 初始化插件
```javascript
new SseExport({
processUrl: '/api/user/process', // 处理接口URL
params: { // 导出时其他查询参数
fileName: '测试导出',
sheetName: '数据'
}
});
```
## 配置选项
```javascript
{
processUrl: '/api/user/process', // 处理接口URL(必填)
params: {}, // 导出参数(必填)
btnSelector: '.export-btn', // 按钮选择器(可选,默认.export-btn)
sseUrl: '/api/export/sse', // SSE接口URL(可选)
downloadUrl: '/api/export/download', // 下载接口URL(可选)
onStart: function(taskId) {}, // 开始回调(可选)
onProgress: function(percentage, processed, total) {}, // 进度回调(可选)
onComplete: function(taskId) {}, // 完成回调(可选)
onError: function(message) {} // 错误回调(可选)
}
```
## 高级用法
### 1. 自定义回调函数
```javascript
new SseExport({
processUrl: '/api/user/process',
params: {
fileName: '测试导出',
sheetName: '数据'
},
onProgress: (percentage, processed, total) => {
console.log(`进度:${percentage}%, 已处理:${processed}/${total}`);
},
onComplete: (taskId) => {
console.log('导出完成,任务ID:', taskId);
},
onError: (message) => {
console.error('导出失败:', message);
}
});
```
### 2. 多个导出按钮
```html
```
## 后端接口要求
### 1. SSE接口 (/api/export/sse)
- 创建SSE连接
- 发送进度更新事件
### 2. 处理接口 (/api/user/process/{taskId})
- 接收导出参数
- 处理数据并生成文件
- 通过SSE发送进度
### 3. 下载接口 (/api/export/download/{taskId})
- 根据任务ID返回文件
## 现有项目改造指南
### 1. 后端改造
如果您已经有了导出功能,需要改造以下几个方面:
#### 1.1 添加通用接口
将该包放入项目中,路径为:
[common](src%2Fmain%2Fjava%2Fvip%2Flsjscl%2Fdemo%2Fcommon)
#### 1.2 改造处理接口
参考
[UserDataProcessor.java](src%2Fmain%2Fjava%2Fvip%2Flsjscl%2Fdemo%2Fcustom%2FUserDataProcessor.java)
// 更新任务状态为处理中
taskManager.startProcessing(taskId, total);
//更新进度
taskManager.updateProcessed(taskId, rowIndex - 1);
// 更新任务状态为已完成
taskManager.completeTask(taskId, outputFile.getAbsolutePath());
//失败后的处理
taskManager.failTask(taskId, e.getMessage());
### 2. 前端改造
#### 2.1 移除原有导出代码
```javascript
// 删除原有的导出相关代码
$('#exportBtn').click(function() {
$.ajax({
url: '/api/export',
// ... 其他代码
});
});
```
#### 2.2 引入插件
```html
```
#### 2.3 调整HTML
```html
```
#### 2.4 初始化插件
```javascript
// 添加插件初始化代码
new SseExport({
processUrl: '/api/user/process', // 原有的处理接口地址
params: {
// 原有的导出参数
fileName: '测试导出',
sheetName: '数据',
// 其他查询参数...
startDate: $('#startDate').val(),
endDate: $('#endDate').val(),
type: $('#type').val()
}
});
```
### 3. 注意事项
1. 确保后端支持长连接
```yaml
# application.yml
server:
tomcat:
connection-timeout: 180000 # 3分钟
```
2. 清理临时文件
```java
@Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点执行
public void cleanTempFiles() {
// 清理24小时前的临时文件
fileService.cleanExpiredFiles();
}
```
通过以上步骤,您可以将现有的导出功能改造成使用此插件的方式,获得更好的用户体验和代码维护性。
## 注意事项
1. 确保服务器支持SSE连接
2. 处理接口应该异步处理数据
3. 定期清理临时文件
4. 合理设置超时时间
## 常见问题
### Q: 导出进度不更新
A: 检查SSE连接是否正常,网络是否通畅
### Q: 文件下载失败
A: 检查文件是否生成完成,下载路径是否正确
### Q: 按钮样式异常
A: 确保正确引入了Layui样式文件
## 浏览器兼容性
- Chrome 45+
- Firefox 40+
- Safari 10+
- Edge 14+
## 依赖项
- Layui 2.x
- 现代浏览器(支持SSE)
## 更新日志
### v1.1.0
- 优化按钮样式
- 添加默认回调函数
- 支持多按钮配置
### v1.0.0
- 首次发布