project-mirai / mirai-api-http

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

对于file/upload接口的迷惑 #456

Closed SinoAHpx closed 3 years ago

SinoAHpx commented 3 years ago

参考的文档:https://docs.mirai.mamoe.net/mirai-api-http/adapter/HttpAdapter.html#%E7%BE%A4%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0

不知道,如何指示把文件上传到哪个群,文档也没有写明。

如果按照文档提供的参数(C#代码):

var result = await url
    .WithHeader("Authorization", $"session {MiraiBot.Instance.HttpSessionKey}")
    .PostMultipartAsync(x => x
        .AddString("type", "group")
        .AddString("path", uploadPath)
        // .AddString("target", target)
        .AddFile("file", filePath));

则会报错:

{"code":400,"msg":"无效参数"}

如果自行加上target则会报错:

{"code":500,"msg":"Failed to upload file."}

那么我该如何使用这个接口呢?

SinoAHpx commented 3 years ago

uploadPath = ""

SinoAHpx commented 3 years ago

看来是path的问题。 但是这个path在文档里的描述是:上传目录的id, 空串为上传到根目录,很难不让人误解。

此处的path应该包括文件夹路径和文件名,比如:

SinoAHpx commented 3 years ago

另外,在发送请求的时候应该使用target来指定该上传到哪个群

ryoii commented 3 years ago

加上target是对的。出现500错误大概是目前出现同步方面的问题。文件上传后按照目前的操作,会取一次新的文件信息返回,但是当上传成功后立马获取文件其实是失败的,所以出现了现在这个报错。

如果不出意外的话,加上target返回报错后,其实文件已经上传成功了

ryoii commented 3 years ago

path的描述在上一次的PR中应该是被修改过了,应该是没有覆盖完全,path止的应该上传后文件的路径而不是父级目录

ryoii commented 3 years ago

接下来大概率的修复方案是不指定上传上传文件的名称,而从multipart中读取,来保证接口定义的不变,姑且现在认为是出bug了吧