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

调用ServiceNow Attachment API上传文件成功但文件损坏求助

ServiceNow附件API上传文件损坏问题排查与解决

问题原因

文件损坏源于请求格式错误:

  • 使用RestSharp的AddFileBytes方法时,框架会自动构建multipart/form-data类型请求,包含正确的boundary分隔符与表单字段信息。
  • 你手动添加的Content-Type请求头覆盖了RestSharp自动生成的正确头信息,导致ServiceNow无法正确解析请求体,最终把包含boundary、表单描述的整个请求内容当成文件本身保存,所以文件中出现多余的分隔符与字段描述内容。

解决方案

  1. 移除手动设置的请求头:删除代码中request.AddHeader("Content-Type", content_type);这一行,让RestSharp自动处理请求的Content-Type。
  2. 正确传递文件MIME类型(可选):如果需要指定文件的Content-Type,直接在AddFileBytes方法的参数中传递,而非设置请求头。

修正后的代码

private static bool UploadFileBytes(byte[] file_bytes, string file_name, string table_name, string table_sys_id, string content_type)
{
    bool retval = false;
    try
    {
        string URL = SN_Srv_dest + $"/api/now/attachment/file?table_name={table_name}&table_sys_id={table_sys_id}&file_name={file_name}";
        Console.WriteLine("Post file to SN: " + URL);

        var client = new RestClient(URL);
        var request = new RestRequest(Method.POST);
        // 将文件的Content-Type作为AddFileBytes的第四个参数传递
        request.AddFileBytes("file", file_bytes, file_name, content_type);
        client.Authenticator = new HttpBasicAuthenticator(SN_Id_dest, SN_Pw_dest);
        IRestResponse response = client.Execute(request);
        if (response.IsSuccessful)
        {
            Console.WriteLine($"Post file {file_name} success: {response.Content}");
            retval = true;
        }
        else
        {
            Console.WriteLine($"Post file {file_name} failed: {response.Content}");
            retval = false;
        }
    }
    catch(Exception e)
    {
        Console.WriteLine($"Post file {file_name} failed: {e.Message}");
    }
    return retval;
}

验证说明

修正后,RestSharp会自动生成符合规范的multipart/form-data请求,ServiceNow能正确解析出文件内容,上传的纯文本文件内容会恢复为正常的test,不再包含boundary等多余信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:46:18