django后端编写打包大文件接口,前端轮询访问,若打包完成,返回打包完成标识,若打包未完成,返回正在打包中标识
时间: 2023-08-16 15:05:57 浏览: 41
好的,可以参考以下代码实现:
在 Django 后端编写打包大文件接口:
```python
import subprocess
from django.http import JsonResponse
def package_files(request):
# 获取前端传递过来的文件路径
file_path = request.GET.get('file_path')
# 执行打包命令
cmd = f'tar -czf {file_path}.tar.gz {file_path}'
subprocess.Popen(cmd, shell=True)
# 返回正在打包中标识
return JsonResponse({'status': 'packing'})
```
在前端轮询访问打包状态:
```javascript
function checkPackagingStatus(file_path) {
$.ajax({
url: '/package_files/',
data: {'file_path': file_path},
success: function(response) {
if (response.status === 'packed') {
// 打包完成,执行相关操作
// ...
} else {
// 打包未完成,继续轮询
setTimeout(checkPackagingStatus, 1000, file_path);
}
},
error: function() {
// 处理错误情况
// ...
}
});
}
// 调用函数开始轮询
checkPackagingStatus('/path/to/large/file');
```
需要注意的是,这种轮询方式会产生大量的请求,可能会对服务器产生一定的负载压力,可以通过调整轮询间隔、增加阈值等方式进行优化。