AlistGo / AlistGo/alist

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

Aberta
#8,338 28 comentários 0 reações 0 responsáveis Ver no GitHub
bug
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

Abrir o guia de contribuição

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.