project-mirai / mirai-api-http

Mirai HTTP API (console) plugin
GNU Affero General Public License v3.0
1.66k stars 343 forks source link

v2.5.0版本的 /file/list 接口无法获取到文件夹信息 #571

Closed nitsort closed 2 years ago

nitsort commented 2 years ago

v2.5.0版本的 /file/list 接口无法获取到文件夹信息,v2.4.0是正常的(就是速度慢) GET http://localhost:8080/file/list?sessionKey=0xfLAhTS&id=&target=799421545

{
    "code": 0,
    "msg": "",
    "data": [
        {
            "name": "TT.zip",
            "id": "/bc0a6912-d009-40b8-9baa-512baf848581",
            "path": "/TT.zip",
            "parent": {
                "name": "/",
                "id": "/",
                "path": "/",
                "parent": null,
                "contact": {
                    "id": 799421545,
                    "name": "Test",
                    "permission": "ADMINISTRATOR"
                },
                "isFile": false,
                "isDictionary": true,
                "isDirectory": true,
                "size": 0,
                "downloadInfo": null
            },
            "contact": {
                "id": 799421545,
                "name": "Test",
                "permission": "ADMINISTRATOR"
            },
            "isFile": true,
            "isDictionary": false,
            "isDirectory": false,
            "size": 30377960,
            "downloadInfo": null
        }
    ]
}

image

ryoii commented 2 years ago

2.5 修改了文件接口逻辑应该就不慢了 (大概吧

2.5 需要使用 2.11 的 core

如果你使用 2.10 的 core 目前最高只能使用 2.4

nitsort commented 2 years ago

2.5 修改了文件接口逻辑应该就不慢了 (大概吧

2.5 需要使用 2.11 的 core

如果你使用 2.10 的 core 目前最高只能使用 2.4

v2.5.0版本获取文件列表确实挺快的,我刚把core换成2.11版本了,不过还是获取不到文件夹

> /mcl list
2022-05-15 00:22:11 I/MCL Addon: Package: net.mamoe:mirai-console  Channel: beta  Type: libs  Version: 2.11.0-RC2  Locked: false
2022-05-15 00:22:11 I/MCL Addon: Package: net.mamoe:mirai-console-terminal  Channel: beta  Type: libs  Version: 2.11.0-RC2  Locked: false
2022-05-15 00:22:11 I/MCL Addon: Package: net.mamoe:mirai-core-all  Channel: beta  Type: libs  Version: 2.11.0-RC2  Locked: false
2022-05-15 00:22:11 I/MCL Addon: Package: org.itxtech:mcl-addon  Channel: c2001  Type: plugins  Version: 2.0.2  Locked: false
2022-05-15 00:22:11 I/MCL Addon: Package: org.bouncycastle:bcprov-jdk15on  Channel: stable  Type: libs  Version: 1.64  Locked: false
2022-05-15 00:22:11 I/MCL Addon: Package: net.mamoe:mirai-api-http  Channel: stable-v2  Type: plugins  Version: 2.5.0  Locked: false
ryoii commented 2 years ago

解决了,等一个2.5.1

nitsort commented 2 years ago

解决了,等一个2.5.1

使用 v2.5.1 时遇到以下几个问题 1、群文件指定路径下存在文件夹时,调用 /file/list 携带 withDownloadInfo=true,返回如下报错信息; GET http://localhost:8080/file/list?sessionKey=SXYESyeL&id=&target=799421545&withDownloadInfo=true

{
    "code": 500,
    "msg": "class net.mamoe.mirai.internal.contact.file.AbsoluteFolderImpl cannot be cast to class net.mamoe.mirai.contact.file.AbsoluteFile (net.mamoe.mirai.internal.contact.file.AbsoluteFolderImpl and net.mamoe.mirai.contact.file.AbsoluteFile are in unnamed module of loader 'app')"
}

2、调用 /file/info 使用 文件id 获取文件夹内一个文件的信息时返回 指定对象不存在,使用 path 是好的; GET http://localhost:8080/file/info?sessionKey=SXYESyeL&id=/0a99a4da-d2b7-11ec-bb26-5452007b592a&group=799421545&withDownloadInfo=true

{
    "code": 5,
    "msg": "指定对象不存在"
}

GET http://localhost:8080/file/info?sessionKey=SXYESyeL&id=&group=799421545&withDownloadInfo=true&path=/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/ship.txt

{
    "code": 0,
    "msg": "",
    "data": {
        "name": "ship.txt",
        "id": "/0a99a4da-d2b7-11ec-bb26-5452007b592a",
        "path": "/新建文件夹/ship.txt",
        ...................................
    }
}

3、无法上传文件到指定的文件夹,应该和这个问题一样 #553,试过 pathid 或者 文件夹名字 都不行;

POST /file/upload HTTP/1.1
User-Agent: PostmanRuntime/7.29.0
Accept: */*
Postman-Token: 5ba7ee82-e3f9-4efe-b775-0dbd993a1077
Host: localhost:8080
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: multipart/form-data; boundary=--------------------------833643758380034052792225
Content-Length: 1865

----------------------------833643758380034052792225
Content-Disposition: form-data; name="sessionKey"
SXYESyeL
----------------------------833643758380034052792225
Content-Disposition: form-data; name="type"
group
----------------------------833643758380034052792225
Content-Disposition: form-data; name="target"
799421545
----------------------------833643758380034052792225
Content-Disposition: form-data; name="path"
/222
----------------------------833643758380034052792225
Content-Disposition: form-data; name="file"; filename="OfficialMaps.txt"
<OfficialMaps.txt>
----------------------------833643758380034052792225--

HTTP/1.1 200 OK
Date: Sat, 14 May 2022 17:58:56 GMT
Server: ktor-server-core/1.6.5
Content-Length: 80
Content-Type: application/json; charset=UTF-8
Connection: keep-alive

{"code":500,"msg":"Failed to create folder '/222': -303 文件夹名称错误."}

4、/file/list/file/info 获取到的 downloadInfo 中的 downloadTimes 一直是0; 另外想问一下,目前使用 withDownloadInfo=true 才能获取到文件修改日期、上传用户、下载次数这些信息,但会使下载次数+1,😖😅

ryoii commented 2 years ago
  1. 解决
  2. 解决,使用id时进行递归查找
  3. 解决,适配新的文件夹定位api
  4. 获取下载地址的时候就会导致下载次数+1.现在直接将除下载地址外的信息在文件信息中直接带出。如无必要,不需要使用 withDownloadInfo
ryoii commented 2 years ago

downloadTimes 为 0 是新的群文件api没有提供了。而mah的接口保留了这个字段。可以提 issue 到 core 仓库

nitsort commented 2 years ago

问题都已解决👍,谢谢。

nitsort commented 2 years ago

@ryoii 你好,有没有接口可以查询到bot是否有权限在指定的QQ群上传文件,或者该群聊的文件上传权限是什么样的?看了下 [GET] /groupConfig 接口返回的信息中不包含这个。 image

nitsort commented 2 years ago
  1. 解决
  2. 解决,使用id时进行递归查找
  3. 解决,适配新的文件夹定位api
  4. 获取下载地址的时候就会导致下载次数+1.现在直接将除下载地址外的信息在文件信息中直接带出。如无必要,不需要使用 withDownloadInfo

问题2,如果存在多个文件夹,只有第一个文件夹中的文件可以用id获取,其他文件夹中的还是提示指定对象不存在。 image

ryoii commented 2 years ago

mamoe/mirai#2033

大概扫了一眼,确实没有相关群设置的api,可以到 core 仓库提个 issue

ryoii commented 2 years ago

core 2.11 已修复