kyubotics / coolq-http-api

为 酷Q 提供通过 HTTP 或 WebSocket 接收事件和调用 API 的能力
https://cqhttp.cc/docs/
GNU General Public License v3.0
1.85k stars 308 forks source link

增强 CQ 图片码发送失败(-11) #319

Closed shigma closed 4 years ago

shigma commented 4 years ago

自己写的插件中,会根据收到的增强 CQ 图片码中的 url 字段将图片下载并上传到自己的静态图片服务器后,再将原 CQ 码中的 file 字段改成服务器的永久链接发送,确保图片不会丢失,并且能在多个号之间使用。但是今天突然发现了图片上传后无法发送的情况。该图片链接本身是可以访问的。报错信息:

文件名不合法,无法发送!(https://shiki.shigma.xyz/img/E09D6CC7C5536F0A1BC60927C3AE9B59.jpg)
编号为 3783 的问答信息:
问题:单次千咲
回答:[CQ:image,file=https://shiki.shigma.xyz/img/E09D6CC7C5536F0A1BC60927C3AE9B59.jpg]
生效环境:全局

同时我尝试了之前已经上传的其他图片,将它们作为 CQ 码的 file 字段发送是正常的。这应该是之前的图片已经有了缓存的原因。为了验证这个结论,我清除了相关 QQ 的 data/image 文件夹,之后发现过去已经上传的其他图片链接也失效了。报错原因也是“文件名不合法,无法发送”。

ExerciseBook commented 4 years ago

由于http的协议繁杂,cqhttp必然无法完全适配所有的情况(比如说带特殊header的),因而,不能用就不能用了 √ (个人理解)

这点也是醋Q本体不提供http功能的原因。

哦 是自己的服务器啊。。。那当我啥都没说过。

stdrc commented 4 years ago

看看酷Q的 data/image 里面有没有 .tmp 后缀的文件?

shigma commented 4 years ago

@richardchien 并没有。

我之前是清空了 data/image 文件夹。但是再次尝试发送上述消息后仍然没有生成 .tmp 文件(貌似也没有生成相关的 .tmp.cqimg)。

再顺便一提刚刚试了利用 base64 发送图片仍然是可以的。

stdrc commented 4 years ago

那就是 CQHTTP 没下载成功吧,试试在容器里拿 curl 下载看看?

shigma commented 4 years ago

之前没找机会尝试,不过现在好像自然就好了。在此期间完全没有动过 CoolQ,CQHTTP 和我的代码中的任何一个。就很迷惑……

stdrc commented 4 years ago

那应该就是网络问题