豆包:与Alist的兼容性存在小问题(期望优化)
- Linguagem predominante
- Go
- Estrelas
- 50.2k
- Forks
- 7.9k
- Merge médio
- 7d 21h
- PRs com merge (30d)
- 6
Descrição
### Please make sure of the following things
- [x] I have read the [documentation](https://alist.nn.ci).
我已经阅读了[文档](https://alist.nn.ci)。
- [x] I'm sure there are no duplicate issues or discussions.
我确定没有重复的issue或讨论。
- [x] I'm sure it's due to `AList` and not something else(such as [Network](https://alist.nn.ci/faq/howto.html#tls-handshake-timeout-read-connection-reset-by-peer-dns-lookup-failed-connect-connection-refused-client-timeout-exceeded-while-awaiting-headers-no-such-host) ,`Dependencies` or `Operational`).
我确定是`AList`的问题,而不是其他原因(例如[网络](https://alist.nn.ci/zh/faq/howto.html#tls-handshake-timeout-read-connection-reset-by-peer-dns-lookup-failed-connect-connection-refused-client-timeout-exceeded-while-awaiting-headers-no-such-host),`依赖`或`操作`)。
- [x] I'm sure this issue is not fixed in the latest version.
我确定这个问题在最新版本中没有被修复。
### AList Version / AList 版本
v3.44.0 以及 分支的最新提交 都存在该问题
### Driver used / 使用的存储驱动
doubao
### Describe the bug / 问题描述
问题产生存在概率【未找出问题所在原因】
### 1.关于文件
**上传文件完毕后 立即读取该文件夹下文件数,结果可能与预期不符**
### 2.关于文件夹
**创建文件夹后可能无法读取该文件夹,需要手动刷新父级文件夹**
_**问题对于Alist 【需手动刷新】**_
创建文件夹后可能没有显示,需要手动刷新【对于123盘测试 没有出现该问题】
_**问题对于API 【载荷大】**_
创建成功后,因可能无法直接读取该文件夹,通过重刷新(refresh设为True)父文件夹的方式轮询,直到该文件夹加载出来
>其于他存储alist创建文件夹后内部会自动把该文件夹信息加入数据库,刷新父文件夹不用重刷新(refresh默认未False)
>对于豆包 若父级文件夹较大,每次创建文件夹都得重刷新,负载较大
### Reproduction / 复现链接
### 1.关于文件
```python
base_url = "http://127.0.0.1:5244"
token = AuthClient(base_url).login("admin", "**********")
file_client = FileClient(base_url, token)
# 测试目录 该目录下文件已手动清空
work_dir = '/豆包/测试/' + time.strftime("%Y-%m-%d", time.localtime())
if __name__ == '__main__':
i = 0
while True:
# 下载后立即读取
print(file_client.stream_upload_file(b'bytes-test', work_dir + '/文件上传测试/{}.bin'.format(i)))
print(len(file_client.list_files( work_dir + '/文件上传测试/',refresh=True)), i+1)
i += 1
```
#### 输出
```shell
{'code': 200, 'message': 'success', 'data': None}
1 1
{'code': 200, 'message': 'success', 'data': None}
2 2
{'code': 200, 'message': 'success', 'data': None}
2 3
{'code': 200, 'message': 'success', 'data': None}
4 4
{'code': 200, 'message': 'success', 'data': None}
4 5
{'code': 200, 'message': 'success', 'data': None}
6 6
{'code': 200, 'message': 'success', 'data': None}
7 7
{'code': 200, 'message': 'success', 'data': None}
8 8
```
#### 输出中,存在api请求返回的文件数与实际预算的文件数不符的情况
### 2.关于文件夹
```python
import os
import time
from alist_client import AuthClient, FileClient
base_url = "http://127.0.0.1:5244"
token = AuthClient(base_url).login("admin", "********")
file_client = FileClient(base_url, token)
# 测试目录 该目录下文件已手动清空
work_dir = '/豆包/测试/' + time.strftime("%Y-%m-%d", time.localtime())
if __name__ == '__main__':
i = 0
while True:
# 创建后 立即捕获文件夹
d = work_dir + '/文件上传测试/{}'.format(i)
file_client.mkdir(d)
for j in range(10):
try:
print(file_client.get_dirs(d))
except Exception as e:
if str(e) != '业务逻辑错误: failed get objs: failed get dir: object not found':
raise e
print('获取文件夹失败,第{}次轮询'.format(j+1))
file_client.list_files(os.path.dirname(d), refresh=True)
i += 1
```
#### 输出
```shell
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
获取文件夹失败,第1次轮询
获取文件夹失败,第2次轮询
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
获取文件夹失败,第1次轮询
获取文件夹失败,第2次轮询
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
{'code': 200, 'message': 'success', 'data': None}
```
#### 期间代码进入了轮询步骤【正常情况下不会进入】
【轮询虽然可以缓解该问题,但每次轮询重刷新了父文件,载荷很大】
### Config / 配置
normal
### Logs / 日志
normal
Guia de contribuição
Avaliação
Esta issue ainda não foi avaliada.