AlistGo / AlistGo/alist

豆包:与Alist的兼容性存在小问题(期望优化)

Abierto
#8,338 28 comentarios 0 reacciones 0 asignados Ver en GitHub
bug
Lenguaje dominante
Go
Estrellas
50.2k
Forks
7.9k
Merge medio
7 d 21 h
PR fusionados (30 d)
6

Descripción

### 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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.