【发布时间】:2021-03-13 20:54:04
【问题描述】:
我正在尝试使用 Node 和 Axios 将工作簿发布到 Tableau REST API。我过去曾成功使用 Python 发布到 API,因此我对 API 很熟悉。
Tableau 提供的文档给出了使用 AJAX 发布的示例:
//Publish Workbook
function publishWorkbook() {
var form = new FormData();
form.append("request_payload", "<tsRequest><workbook name=\"restWorkbook\" ><project id=\"06ca4b01-f882-4f7a-b4b5-60eb8e8bff8f\" ></project></workbook></tsRequest>");
form.append("tableau_workbook", "PATH TO Workbook");
var settings = {
"async": true,
"crossDomain": true,
"url": url + "sites/" + siteid + "/workbooks?overwrite=true",
"method": "POST",
"headers": {
"x-tableau-auth": auth
},
"processData": false,
"contentType": false,
"mimeType": "multipart/mixed",
"data": form
}
$.ajax(settings).done(function(response) {
console.log(response);
});
}
这是我尝试用 Axios (https://masteringjs.io/tutorials/axios/form-data) 做同样的事情:
function publishWorkbook(base_url, site_id, project_id, workbook_filepath, auth_token) {
const url = base_url + `sites/${site_id}/workbooks?overwrite=true`;
const formData = new FormData();
formData.append("request_payload", `<tsRequest><workbook name="test" ><project id="${project_id}"></project></workbook></tsRequest>`);
formData.append("data", fs.createReadStream(workbook_filepath));
const headers = formData.getHeaders();
headers["x-tableau-auth"] = auth_token;
return axios.post(url, formData, {headers:headers});
}
我收到 406 错误代码。检查 FormData 向我显示了一个 dataSize: 0,,这看起来很奇怪。有什么想法吗?谢谢!
【问题讨论】:
-
mimeType不是请求标头。 -
好点,我刚刚注意到示例使用:
headers: formData.getHeaders() -
啊,是的,如果你在 Node 中使用它,我相信你应该这样做
-
我只是试了一下,没有运气......
标签: javascript node.js ajax axios tableau-api