如何将base64或blob文件(PDF)附加到azure devops工作项?

问题描述 投票:0回答:1

我尝试将 pdf 文档附加到 azure devops 工作项,但屏幕截图中显示以下错误。 我无法从本地获取 pdf 文件,因为 PDF blob 是从云端下载的文件。 enter image description here

供您参考,附加文本文件正在按预期工作,但我不确定附加 pdf 文档的最佳方法是什么。

这是我的附加功能。


const convertBlobToBase64 = (blob: Blob): Promise<string> => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    reader.readAsDataURL(blob)
    reader.onloadend = () => {
      const base64data = reader.result?.toString().split(',')[1]
      resolve(base64data || '')
    }
    reader.onerror = reject
  })
}

export const addPdfAttachmentToWorkItem = async (
  workItemId: number,
  pat: string,
  organizationUrl: string,
  projectId: string,
  pdfBlob: Blob,
  fileName: string
) => {
  try {
    const encodedPat = btoa(`:${pat}`)
    const url = `${organizationUrl}/${projectId}/_apis/wit/attachments?api-version=6.0&fileName=${fileName}&uploadType=simple`
    const pdfBase64 = await convertBlobToBase64(pdfBlob)
    const attachRes = await axios({
      method: 'POST',
      url,
      data: pdfBase64,
      headers: {
        Authorization: `Basic ${encodedPat}`,
        'Content-Type': 'application/octet-stream',
      },
    })

    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
  }
}
reactjs azure azure-devops file-upload base64
1个回答
0
投票

我无法从本地获取 pdf 文件,因为 PDF blob 是从云端下载的文件。

支持将pdf Blob对象直接上传到azure devops,您需要将文件下载到本地然后再上传。要将本地 pdf 上传到 devops 工作项,请参阅您的原始票据

© www.soinside.com 2019 - 2024. All rights reserved.