You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中向Discord Webhook发送文件?(遇400错误)

解决Discord Webhook文件上传400错误的方法

你的代码存在几个关键问题导致请求返回400 Bad Request,以下是具体修正方案:

错误点及修复说明

  • 移除手动添加的Content-Disposition字段:multipart表单的每个部分的Content-Disposition由reqwest自动处理,手动添加该文本字段会干扰Discord API对请求结构的解析。
  • 删除手动设置的Content-Type头:reqwest的.multipart()方法会自动生成包含正确boundary的multipart/form-data头,手动设置会覆盖这个自动生成的合法头,直接导致请求格式错误。
  • 补充image变量的初始化逻辑:原代码中引用了image.as_slice()但未定义该变量,需要先读取目标文件的字节数据。

修正后的完整代码

use anyhow::Result;
use reqwest::multipart;
use std::fs;

#[tokio::main]
async fn main() -> Result<()> {
    // 读取本地图片文件,替换为你的实际文件路径
    let image = fs::read("text.png")?;
    let client = reqwest::Client::new();

    let part = multipart::Part::bytes(image)
        .file_name("text.png")
        .mime_str("image/png")?;
    
    let form = multipart::Form::new()
        .part("files[0]", part);

    let res = client
        .post("https://discord.com/api/webhooks/6969696969/XD_XD_XD_XD_XD_XD_XD_XD")
        .query(&[("wait", "true")])
        .multipart(form)
        .send()
        .await?;

    println!("响应状态码: {}", res.status());
    println!("响应内容: {}", res.text().await?);
    Ok(())
}

额外提示

  • 若需同时发送消息文本,可在表单中添加.text("content", "这里是要发送的消息内容")字段。
  • 确保替换代码中的Webhook URL为你自己的有效地址。
  • 依赖配置:在Cargo.toml中添加以下内容
[dependencies]
reqwest = { version = "0.11", features = ["multipart", "json"] }
anyhow = "1.0"
tokio = { version = "1.0", features = ["full"] }

内容的提问来源于stack exchange,提问作者NightmareXD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:33:36