<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[小白求助：Mirai怎么实现发送URL下的图片？]]></title><description><![CDATA[<p dir="auto">小白第一次写插件，想讨教一下各位大佬，Mirai怎么实现发送URL下的图片？</p>
<p dir="auto">就是比如我目前知道图片的地址，我怎么才能让机器人发送这张图片呢？</p>
<p dir="auto">有没有什么方法直接能通过URL得到图片然后发送出去？</p>
]]></description><link>https://mirai.mamoe.net/topic/453/小白求助-mirai怎么实现发送url下的图片</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 01:12:35 GMT</lastBuildDate><atom:link href="https://mirai.mamoe.net/topic/453.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Jul 2021 14:21:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Fri, 30 Jul 2021 15:17:26 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://mirai.mamoe.net/uid/1457">@enron233</a> 在 <a href="/post/2883">小白求助：Mirai怎么实现发送URL下的图片？</a> 中说：</p>
<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://mirai.mamoe.net/uid/1184">@mx233</a> Wow！感谢大佬，请问大佬第一个中的原理是不是就相当于先把URL中的图片放到缓冲流里，然后从流里上传图片得到image类型，然后再发送出去？</p>
</blockquote>
<p dir="auto">推荐采用较为稳定且合理的url读取方式，这里给出我用的两个例子，采用了okhttp，我记得mirai内置，我自己又加了一遍依赖</p>
<pre><code>    implementation("com.squareup.okhttp3:okhttp:4.9.1")
</code></pre>
<ul>
<li>获取bytes[]的静态方法，可以适当降低等待时间，如果你的网络非常好的话。</li>
</ul>
<pre><code class="language-java">    /**
     * httpclient，获取url
     * @param url
     * @return
     * @throws IOException
     */
    public static byte[] getUrlByByte(String url) throws IOException {
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(30, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .callTimeout(60, TimeUnit.SECONDS)
                .build();

        Request request = new Request.Builder()
                .url(url)
                .addHeader("Connection", "keep-alive")
                .build();

        return client.newCall(request).execute().body().bytes();
    }
</code></pre>
<ul>
<li>调用方法:</li>
</ul>
<pre><code class="language-java">            ExternalResource ex = ExternalResource.Companion.create(HttpClient.getUrlByByte(imgurl));
            Image img = ExternalResource.uploadAsImage(ex, event.getSubject());
</code></pre>
<ul>
<li>构造信息链:</li>
</ul>
<pre><code class="language-java">            MessageChain chain = new MessageChainBuilder()
                    .append(img)
                    .build();
</code></pre>
<ul>
<li>列表请在发送完， <em><strong>务必，务必，务必</strong></em> 关闭ExternalResource。</li>
</ul>
<pre><code class="language-java">event.getSubject().sendMessage(chain);
ex.close();
</code></pre>
]]></description><link>https://mirai.mamoe.net/post/2886</link><guid isPermaLink="true">https://mirai.mamoe.net/post/2886</guid><dc:creator><![CDATA[Orisland]]></dc:creator><pubDate>Fri, 30 Jul 2021 15:17:26 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Fri, 06 May 2022 16:00:46 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://mirai.mamoe.net/uid/931">@greenhandzdl</a> 可以试试读到inputStream之后那个上传图片,并获取上传好图片的id,然后发送(我直接粘我自己的代码吧...):</p>
<pre><code>// draw pic
val img = DrawUtil.drawImg(candidates)
val os = ByteArrayOutputStream()
ImageIO.write(img, "png", os)

// read pic
val stream: InputStream = ByteArrayInputStream(os.toByteArray())
stream.close()
os.close()

// send pic
sendMessage(Image.fromId(stream.uploadAsImage(subject).imageId))
</code></pre>
]]></description><link>https://mirai.mamoe.net/post/11678</link><guid isPermaLink="true">https://mirai.mamoe.net/post/11678</guid><dc:creator><![CDATA[MR-MonkeyRay]]></dc:creator><pubDate>Fri, 06 May 2022 16:00:46 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Mon, 02 May 2022 14:05:22 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://mirai.mamoe.net/uid/931">@greenhandzdl</a> 在 <a href="/post/11536">小白求助：Mirai怎么实现发送URL下的图片？</a> 中说：</p>
<blockquote>
<p dir="auto">val buffer = ByteArray(1024)<br />
var len = 0<br />
while (inputStream.read(buffer).also { len = it } != -1) {<br />
fos.write(buffer, 0, len)<br />
}</p>
</blockquote>
<p dir="auto"><img src="/assets/uploads/files/1651500293780-2e19d476-32d9-45db-bb6e-67e79a42206e-image.png" alt="2e19d476-32d9-45db-bb6e-67e79a42206e-image.png" class=" img-responsive img-markdown" /><br />
在我的ide里面确实已经下载了该图片，但是发不出去</p>
]]></description><link>https://mirai.mamoe.net/post/11537</link><guid isPermaLink="true">https://mirai.mamoe.net/post/11537</guid><dc:creator><![CDATA[greenhandzdl]]></dc:creator><pubDate>Mon, 02 May 2022 14:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Mon, 02 May 2022 14:03:50 GMT]]></title><description><![CDATA[<p dir="auto">···kotlin<br />
message.contentToString().startsWith("好图") -&gt; {<br />
val url = "<a href="https://xn--4gqvdt36e098b" target="_blank" rel="noopener noreferrer nofollow ugc">https://一个链接</a>，大抵是图片的/random_img.php"<br />
val file = File("./img/")<br />
if (!file.exists()) {<br />
file.mkdirs()<br />
}<br />
val fileName = "./img/" + System.currentTimeMillis() + ".jpg"<br />
val fileUrl = URL(url)<br />
val conn = fileUrl.openConnection()<br />
conn.connect()<br />
val inputStream = conn.getInputStream()<br />
val fos = FileOutputStream(fileName)<br />
val buffer = ByteArray(1024)<br />
var len = 0<br />
while (inputStream.read(buffer).also { len = it } != -1) {<br />
fos.write(buffer, 0, len)<br />
}<br />
fos.close()<br />
inputStream.close()<br />
group.sendMessage(<br />
messageChainOf(<br />
At(sender) + Image(<br />
fileName<br />
)<br />
)<br />
)<br />
}</p>
<pre><code>能帮忙看看哪里错了吗</code></pre>
]]></description><link>https://mirai.mamoe.net/post/11536</link><guid isPermaLink="true">https://mirai.mamoe.net/post/11536</guid><dc:creator><![CDATA[greenhandzdl]]></dc:creator><pubDate>Mon, 02 May 2022 14:03:50 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Sun, 01 Aug 2021 07:10:13 GMT]]></title><description><![CDATA[<p dir="auto">全局一点的处理， 自己定义一个ImageURL消息模型， 发送消息的前置处理中将ImageURL转换为Image</p>
]]></description><link>https://mirai.mamoe.net/post/2948</link><guid isPermaLink="true">https://mirai.mamoe.net/post/2948</guid><dc:creator><![CDATA[tini]]></dc:creator><pubDate>Sun, 01 Aug 2021 07:10:13 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Sat, 31 Jul 2021 10:27:17 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://mirai.mamoe.net/uid/794">@orisland</a> OKOK 看到了，感谢大佬！</p>
]]></description><link>https://mirai.mamoe.net/post/2906</link><guid isPermaLink="true">https://mirai.mamoe.net/post/2906</guid><dc:creator><![CDATA[Enron233]]></dc:creator><pubDate>Sat, 31 Jul 2021 10:27:17 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Fri, 30 Jul 2021 15:25:37 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://mirai.mamoe.net/uid/1457">@enron233</a> 看完我的最后一行代码~</p>
]]></description><link>https://mirai.mamoe.net/post/2887</link><guid isPermaLink="true">https://mirai.mamoe.net/post/2887</guid><dc:creator><![CDATA[Orisland]]></dc:creator><pubDate>Fri, 30 Jul 2021 15:25:37 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Fri, 30 Jul 2021 15:17:26 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://mirai.mamoe.net/uid/1457">@enron233</a> 在 <a href="/post/2883">小白求助：Mirai怎么实现发送URL下的图片？</a> 中说：</p>
<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://mirai.mamoe.net/uid/1184">@mx233</a> Wow！感谢大佬，请问大佬第一个中的原理是不是就相当于先把URL中的图片放到缓冲流里，然后从流里上传图片得到image类型，然后再发送出去？</p>
</blockquote>
<p dir="auto">推荐采用较为稳定且合理的url读取方式，这里给出我用的两个例子，采用了okhttp，我记得mirai内置，我自己又加了一遍依赖</p>
<pre><code>    implementation("com.squareup.okhttp3:okhttp:4.9.1")
</code></pre>
<ul>
<li>获取bytes[]的静态方法，可以适当降低等待时间，如果你的网络非常好的话。</li>
</ul>
<pre><code class="language-java">    /**
     * httpclient，获取url
     * @param url
     * @return
     * @throws IOException
     */
    public static byte[] getUrlByByte(String url) throws IOException {
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(30, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .callTimeout(60, TimeUnit.SECONDS)
                .build();

        Request request = new Request.Builder()
                .url(url)
                .addHeader("Connection", "keep-alive")
                .build();

        return client.newCall(request).execute().body().bytes();
    }
</code></pre>
<ul>
<li>调用方法:</li>
</ul>
<pre><code class="language-java">            ExternalResource ex = ExternalResource.Companion.create(HttpClient.getUrlByByte(imgurl));
            Image img = ExternalResource.uploadAsImage(ex, event.getSubject());
</code></pre>
<ul>
<li>构造信息链:</li>
</ul>
<pre><code class="language-java">            MessageChain chain = new MessageChainBuilder()
                    .append(img)
                    .build();
</code></pre>
<ul>
<li>列表请在发送完， <em><strong>务必，务必，务必</strong></em> 关闭ExternalResource。</li>
</ul>
<pre><code class="language-java">event.getSubject().sendMessage(chain);
ex.close();
</code></pre>
]]></description><link>https://mirai.mamoe.net/post/2886</link><guid isPermaLink="true">https://mirai.mamoe.net/post/2886</guid><dc:creator><![CDATA[Orisland]]></dc:creator><pubDate>Fri, 30 Jul 2021 15:17:26 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Fri, 30 Jul 2021 15:14:15 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://mirai.mamoe.net/uid/1184">@mx233</a> 感谢，我这里刚才写完之后发现提示说让关闭ExternalResource流，我在源码中没看到相关函数啊，请问我该怎么关闭它呢？还是说不用关闭也可以</p>
]]></description><link>https://mirai.mamoe.net/post/2885</link><guid isPermaLink="true">https://mirai.mamoe.net/post/2885</guid><dc:creator><![CDATA[Enron233]]></dc:creator><pubDate>Fri, 30 Jul 2021 15:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Fri, 30 Jul 2021 14:44:33 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://mirai.mamoe.net/uid/1457">@enron233</a> 是的,下载URL中的图片到内存中,然后上传到qq服务器发送</p>
]]></description><link>https://mirai.mamoe.net/post/2884</link><guid isPermaLink="true">https://mirai.mamoe.net/post/2884</guid><dc:creator><![CDATA[MX233]]></dc:creator><pubDate>Fri, 30 Jul 2021 14:44:33 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Fri, 30 Jul 2021 14:42:21 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://mirai.mamoe.net/uid/1184">@mx233</a> Wow！感谢大佬，请问大佬第一个中的原理是不是就相当于先把URL中的图片放到缓冲流里，然后从流里上传图片得到image类型，然后再发送出去？</p>
]]></description><link>https://mirai.mamoe.net/post/2883</link><guid isPermaLink="true">https://mirai.mamoe.net/post/2883</guid><dc:creator><![CDATA[Enron233]]></dc:creator><pubDate>Fri, 30 Jul 2021 14:42:21 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Fri, 30 Jul 2021 14:40:41 GMT]]></title><description><![CDATA[<p dir="auto">azz,回复错了</p>
]]></description><link>https://mirai.mamoe.net/post/2882</link><guid isPermaLink="true">https://mirai.mamoe.net/post/2882</guid><dc:creator><![CDATA[MX233]]></dc:creator><pubDate>Fri, 30 Jul 2021 14:40:41 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Fri, 30 Jul 2021 14:39:24 GMT]]></title><description><![CDATA[<p dir="auto">欲直接发送网页URL中的图片,请见以下示例</p>
<p dir="auto"><img src="/assets/uploads/files/1627655835919-59bf0e05-28e2-4ccf-b945-5bfe2e89d8c2-lq2aoeeu9xorhqp-96-4-5px.png" alt="59bf0e05-28e2-4ccf-b945-5bfe2e89d8c2-%@LQ2AOEEU9XORHQP`4$5PX.png" class=" img-responsive img-markdown" /></p>
<p dir="auto">若发送本地图片<br />
<img src="/assets/uploads/files/1627655942911-aa8e7958-4d85-46b9-8724-3fb064ba61ff-q-e41-rt0dccej_-tp-m573.png" alt="aa8e7958-4d85-46b9-8724-3fb064ba61ff-Q@E41%RT0DCCEJ_{TP{M573.png" class=" img-responsive img-markdown" /></p>
]]></description><link>https://mirai.mamoe.net/post/2881</link><guid isPermaLink="true">https://mirai.mamoe.net/post/2881</guid><dc:creator><![CDATA[MX233]]></dc:creator><pubDate>Fri, 30 Jul 2021 14:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to 小白求助：Mirai怎么实现发送URL下的图片？ on Fri, 30 Jul 2021 14:29:03 GMT]]></title><description><![CDATA[<p dir="auto">下载再发送本地，或者看看ExternalResource这个类可不可以用URL，好像是可以我忘了</p>
]]></description><link>https://mirai.mamoe.net/post/2880</link><guid isPermaLink="true">https://mirai.mamoe.net/post/2880</guid><dc:creator><![CDATA[Nambers]]></dc:creator><pubDate>Fri, 30 Jul 2021 14:29:03 GMT</pubDate></item></channel></rss>