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

使用Ansible URI模块上传文件至ServiceNow后下载损坏问题求助

问题分析与解决

我使用Ansible结合URI模块将PDF或CSV文件附加到ServiceNow现有事件中,上传过程无异常,但下载同一附件时,CSV会出现乱码或加密状态,PDF则提示无法加载。手动通过ServiceNow REST API Explorer或UI上传并下载该文件时一切正常,问题出在Ansible上传代码中。

错误代码

- name: "Attach output CSV file to incident"
  ansible.builtin.uri:
          url: "{{ SN_HOST }}api/now/attachment/upload" 
          user: "{{ SN_USERNAME }}"
          password: "{{ SN_PASSWORD }}"
          method: POST
          return_content: true
          validate_certs: false
          force_basic_auth: no
          status_code: 201
          body_format: form-multipart
          headers:
              Accept: 'application/json'
              Content-Type: 'multipart/form-data'
          body:
            table_name:
                content: incident
            table_sys_id:
                content: 'c6957640470388444c736d4315'
            uploadFile:
                filename: "../../win_playbooks/reports/User_Manual.pdf"
  register: attach_file

报错现象

  • PDF打开报错:无法加载文档,提示文档损坏
  • CSV打开后乱码,或显示为加密状态

解决方法

修正两处关键错误即可解决问题:

1. 移除手动设置的Content-Type头

当body_format设为form-multipart时,Ansible会自动生成包含正确boundary的Content-Type头,手动设置该头会破坏multipart格式的解析逻辑,导致文件内容损坏。

2. 替换uploadFile字段的参数

将filename改为src:src用于指定本地文件路径,Ansible会读取文件的实际内容进行上传;单独使用filename只会把路径字符串作为内容上传,而非文件本身,这是文件损坏的核心原因。

修正后的代码:

- name: "Attach output CSV file to incident"
  ansible.builtin.uri:
    url: "{{ SN_HOST }}api/now/attachment/upload" 
    user: "{{ SN_USERNAME }}"
    password: "{{ SN_PASSWORD }}"
    method: POST
    return_content: true
    validate_certs: false
    force_basic_auth: no
    status_code: 201
    body_format: form-multipart
    headers:
      Accept: 'application/json'
    body:
      table_name:
        content: incident
      table_sys_id:
        content: 'c6957640470388444c736d4315'
      uploadFile:
        src: "../../win_playbooks/reports/User_Manual.pdf"
        # 可选:如需自定义附件显示名称,添加此行
        # filename: "Custom_User_Manual.pdf"
  register: attach_file

验证

上传完成后,可通过ServiceNow查询附件的文件大小,确认与本地文件一致,说明上传内容正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:02:36