这是您的问题的更详细版本,针对 Stack Overflow 进行了格式化:
使用 Tableau REST API 和 Node.js 将工作簿上传到 Tableau 时出现问题:错误 400011
我正在尝试使用 Tableau REST API 和 Node.js 将
.twbx
工作簿上传到 Tableau Server。但是,我不断遇到以下错误:
Error uploading the workbook: {
error: {
summary: 'Bad Request',
detail: "There was a problem publishing the file 'Test.twbx'.",
code: '400011'
}
}
我尝试了不同的方法来解决这个问题,但到目前为止都没有奏效。我遵循 Tableau REST API 文档,并确保
serverUrl
、authToken
、siteId
、workbookName
和 projectId
等参数正确。我还确认了工作簿文件存在于指定的路径中。
下面是我用来上传工作簿的代码:
import axios from 'axios';
import * as fs from 'fs/promises';
async function uploadWorkbook(
serverUrl: string,
authToken: string,
siteId: string,
workbookName: string,
projectId: string
): Promise<void> {
try {
const wkBookcontent = await fs.readFile(`src/download/${workbookName}.twbx`);
const boundary = generateBoundary();
const CRLF = "\r\n"; // Carriage Return Line Feed
// Construct the body of the request
const body = [
`--${boundary}`,
'Content-Disposition: form-data; name="request_payload"',
"Content-Type: text/xml",
"",
`<tsRequest>
<workbook name="${workbookName}">
<project id="${projectId}"/>
</workbook>
</tsRequest>`,
"",
`--${boundary}`,
`Content-Disposition: form-data; name="tableau_workbook"; filename="${workbookName}.twbx"`,
"Content-Type: application/octet-stream",
"",
wkBookcontent,
"",
`--${boundary}--`, // End of multipart message
].join(CRLF);
// Set up headers for the request
const headers = {
"Content-Type": `multipart/mixed; boundary=${boundary}`,
"X-Tableau-Auth": authToken,
Accept: "application/json",
"Content-Length": Buffer.byteLength(body),
};
// Make the request to upload the workbook
const response = await axios.post(
`${serverUrl}/api/3.12/sites/${siteId}/workbooks?workbookType=twbx&overwrite=true`,
body,
{ headers }
);
console.log("Upload completed", response.data);
} catch (error: any) {
console.error(
"Error uploading the workbook:",
error?.response?.data || error.message
);
throw error;
}
}
function generateBoundary(): string {
return `--------------------------${Date.now().toString(16)}`;
}
multipart/mixed
请求的方式有什么问题吗?400 Bad Request
的 400011
是否有任何具体原因?.twbx
文件的内容或 Tableau Server 中的项目权限有关?如果您能就可能导致此问题的原因提供任何指导或建议,我将不胜感激。谢谢!
此版本包含有关环境、错误以及您正在寻求的具体帮助的更多详细信息,这应该可以让其他人更轻松地提供有针对性的帮助。
有一个更简单的方法。使用 TSC 库 https://tableau.github.io/server-client-python/docs