我尝试将 pdf 文档附加到 azure devops 工作项,但屏幕截图中显示以下错误。 我无法从本地获取 pdf 文件,因为 PDF blob 是从云端下载的文件。
供您参考,附加文本文件正在按预期工作,但我不确定附加 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
}
}
我无法从本地获取 pdf 文件,因为 PDF blob 是从云端下载的文件。
不支持将pdf Blob对象直接上传到azure devops,您需要将文件下载到本地然后再上传。要将本地 pdf 上传到 devops 工作项,请参阅您的原始票据。