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

.NET 6下使用HttpClient通过FormData上传PNG图片提示格式错误

问题:通过FormData上传PNG图片时服务器返回"Wrong file format"错误

我使用.NET 6的HttpClient通过FormData向服务器发送PNG格式图片,请求已成功发送,但服务器返回“Wrong file format”错误提示(无服务器访问权限无法排查服务端问题)。相关代码如下:

private async Task RequestApiRegister(string bookingId, string name)
{
    using var client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Config.TOKEN_REGISTER);

    try
    {
        string aliasId = bookingId + "__" + name;
        using FileStream fs = File.OpenRead(_filePath); // --> Absolute file path, ex: "E:\\Blabla\\IMG\\image_2023_03_24T19_54_30_9573981.png"

        var formData = new MultipartFormDataContent();
        formData.Add(new StringContent("secret"), "organization");
        formData.Add(new StringContent(aliasId), "aliasId");
        formData.Add(new StreamContent(fs), "images[]", Path.GetFileName(_filePath));

        string url = "https://some-endpoint.com/register";
        var response = await client.PostAsync(url, formData);
        //response.EnsureSuccessStatusCode();

        string sd = response.Content.ReadAsStringAsync().Result;
    } catch (Exception e)
    {
        Console.WriteLine(e);
    }
}

已在Stack Overflow搜索数小时,尝试过常见的多部分表单上传方案但未解决。


可能的解决方向

  • 显式设置图片的Content-Type
    默认StreamContent不会自动绑定图片媒体类型,部分服务器会依赖这个字段判断文件格式。为图片内容添加明确的类型声明:

    var imageContent = new StreamContent(fs);
    imageContent.Headers.ContentType = new MediaTypeHeaderValue("image/png");
    formData.Add(imageContent, "images[]", Path.GetFileName(_filePath));
    
  • 验证本地文件是否为有效PNG
    确认文件扩展名是.png的同时,实际内容也符合PNG格式规范。可以通过检查文件头验证:

    using (var br = new BinaryReader(fs))
    {
        var signature = br.ReadBytes(8);
        var pngSignature = new byte[] { 137, 80, 78, 71, 13, 10, 26, 10 };
        if (!signature.SequenceEqual(pngSignature))
        {
            Console.WriteLine("本地文件不是有效PNG格式");
            return;
        }
        fs.Position = 0; // 重置流位置,避免上传内容不完整
    }
    
  • 调整表单字段名格式
    部分服务器对字段名的格式敏感,尝试去掉字段名中的[]:

    formData.Add(imageContent, "images", Path.GetFileName(_filePath));
    
  • 确保文件流从起始位置读取
    如果文件流之前被操作过,Position可能不在起始位置,导致上传内容缺失。添加流位置重置:

    using FileStream fs = File.OpenRead(_filePath);
    fs.Position = 0; // 重置到文件开头
    
  • 改用ByteArrayContent上传
    部分场景下StreamContent的处理逻辑可能导致服务器解析异常,尝试将文件转为字节数组后上传:

    byte[] imageBytes = File.ReadAllBytes(_filePath);
    var imageContent = new ByteArrayContent(imageBytes);
    imageContent.Headers.ContentType = new MediaTypeHeaderValue("image/png");
    formData.Add(imageContent, "images[]", Path.GetFileName(_filePath));
    
  • 为文件名添加引号包裹
    部分服务器期望文件名被引号包裹,调整表单内容的参数格式:

    formData.Add(imageContent, "\"images[]\"", $"\"{Path.GetFileName(_filePath)}\"");
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:57:43