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

为Azure DevOps工作项添加PDF附件遇400错误,求解决方案

解决Azure DevOps工作项添加PDF附件时的400错误

问题根源

你遇到的400错误核心原因是上传附件时错误设置了Content-Type:使用FormData上传文件时,axios会自动生成包含boundary的multipart/form-data请求头,而你手动指定Content-Type: application/pdf会破坏请求格式,导致Azure DevOps无法解析上传的内容。

文本文件能正常上传是因为其格式简单,即使请求头有误也可能被兼容解析,但PDF文件的二进制格式对请求格式要求更严格。

修复方案

  • 移除上传附件请求中的手动Content-Type配置,让axios自动处理FormData的请求头
  • 确保PDF Blob的MIME类型正确(创建Blob时建议指定type: 'application/pdf')
  • 对URL中的fileName参数进行编码,避免特殊字符导致请求格式错误

修改后的完整代码

export const addPdfAttachmentToWorkItem = async (
  workItemId: number,
  pat: string,
  organizationUrl: string,
  projectId: string,
  pdfBlob: Blob,
  fileName: string
) => {
  try {
    const encodedPat = btoa(`:${pat}`)
    // 编码文件名,处理特殊字符
    const encodedFileName = encodeURIComponent(fileName)
    const url = `${organizationUrl}/${projectId}/_apis/wit/attachments?api-version=6.0&fileName=${encodedFileName}&uploadType=simple`
    const formData = new FormData();
    // 显式指定文件MIME类型,确保格式正确
    formData.append('file', pdfBlob, { filename: fileName, type: 'application/pdf' });
    const attachRes = await axios({
      method: 'POST',
      url,
      data: formData,
      headers: {
        Authorization: `Basic ${encodedPat}`,
        // 移除手动设置的Content-Type,axios自动处理
      },
    })

    const witUrl = `${organizationUrl}/${projectId}/_apis/wit/workitems/${workItemId}?api-version=6.0`
    const workItemData = [
      {
        op: 'add',
        path: `/relations/-`,
        value: {
          rel: 'AttachedFile',
          url: attachRes.data.url,
          attributes: {
            comment: `Attached work package report for WIT ${workItemId}`,
          },
        },
      },
    ]
    const response = await axios.patch(witUrl, workItemData, {
      headers: {
        Authorization: `Basic ${encodedPat}`,
        'Content-Type': 'application/json-patch+json',
      },
      params: {
        $expand: 'all',
      },
    })
    return response.data
  } catch (error) {
    console.error('Error updating work item:', error)
    throw error
  }
}

错误截图

错误截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:32:41