如何使用curl将文件上传到Atlassian Confluence页面

9
我试图按照远程API文档中给出的指南将.xls文件上传到Confluence Wiki页面: https://developer.atlassian.com/confdev/confluence-server-rest-api/confluence-rest-api-examples#ConfluenceRESTAPIExamples-Uploadanattachment
curl -v -S -u admin:admin -X POST -H "X-Atlassian-Token: nocheck" -F "file=@myfile.txt" -F "comment=this is my file" "http://localhost:8080/confluence/rest/api/content/3604482/child/attachment" | python -mjson.tool

这是我正在做的事情:

curl -v -S -u username:password -X POST -H "X-Atlassian-Token: nocheck" -F "file=@/path/to/local/excelsheet.xls" https://<Confluence server>/display/page

我省略了Python -mjson.tool,因为它显示“无法解码JSON对象”,而我没有发布JSON,所以这不合理。
然而,上述curl命令对我来说不起作用。我在控制台上看到目标页面的HTML,并且文件没有上传成功。我尝试了多种修改curl命令的方法,但都没有成功。
另外,我正在尝试上传的页面URL没有任何contentID,正如文档中建议的那样。目标URL是一个接受附件并显示已上传文件列表的页面。
请问有谁能指出我哪里错了?我对Curl没有太多经验。
4个回答

4

David Vonka 的回答是正确的,除了头部 "X-Atlassian-Token" 的值。它必须是 "no-check"(而不是 "nocheck")。

所以更正后的命令是:

curl -v -S -X POST -H "X-Atlassian-Token: no-check" -F "file_0=@<file name>" -F "comment_0=<upload comment>" "http://<server>:<port>/<context>/pages/doattachfile.action?pageId=<page id>&os_username=<username>&os_password=<password>"

注意:请将所有的<...>占位符替换为您的值。


3

您需要在url中使用REST API:.../confluence/rest/api/content/$PAGE_ID/child/attachment,而现在您正在使用查看页面的url。


你具体尝试了什么?此外,请确保:1)由管理员启用了rest api(默认情况下已关闭,如果我没记错的话),2)您有使用它的权利,3)它未限制在内部网络/白名单/其他授权用户范围内,4)它位于与“可查看”的 Confluence 相同的主机下。 - m.wasowski
我尝试了以下命令:curl -v -S -u username:password -X POST -H "X-Atlassian-Token: nocheck" -F "file=@test.txt" -F "comment=this is my file" "https://<confluence server>/confluence/rest/api/content/889912330/child/attachment"。在工具中查找时,我找到了页面ID为889912330。在控制台上,它返回了一个404错误以及所有的HTML内容。 - Periastron
你应该用单引号包裹你的注释:curl -v -S -u username:password -X POST -H "X-Atlassian-Token: nocheck" -F "file=@test.txt" -F "comment='this is my file'" "http://<confluence server>/confluence/rest/api/content/889912330/child - m.wasowski
我完全删除了注释。curl -v -S -u用户名:密码 -X POST -H“X-Atlassian-Token:nocheck” -F“file = @ test.txt”“https:<confluence server> / confluence / rest / api / content / 889912330 / child / attachment”。仍然不起作用:( - Periastron
你确定你的Confluence上已启用了REST API并且你有使用它的权限吗? - m.wasowski
显示剩余4条评论

1
我认为Confluence REST API不允许文件上传。请改用以下方法。
curl -v -S -X POST -H "X-Atlassian-Token: nocheck" -F "file_0=@<file name>" -F "comment_0=<upload comment>" "http://<server>:<port>/<context>/pages/doattachfile.action?pageId=<page id>&os_username=<username>&os_password=<password>"

将所有的<...>占位符替换为您的值


在Confluence 3.5上对我有效,更新的版本确实有一个允许上传的res api。 - David Vonka

0
API的POST语法应该从"https://ConfluenceServer/display/page"更正为正确的res/api/content语法,例如:"https://companyName.atlassian.net/display/rest/api/content/pageIDxxxxx"。
 curl -v -S  -X POST -H "X-Atlassian-Token: no-check" -F "file_0=@<file name>" -F "comment_0=<upload comment>" https://<companyName>.atlassian.net/display/rest/api/content/<pageID15398762>/child/attachment

页面ID可以在URL显示页面中找到。例如: https://companyName.atlassian.net/display/spaces/DEV/pages/pageID15398762/Page+Title+Name

有关更多API语法细节,请参阅此文档:
https://docs.atlassian.com/atlassian-confluence/REST/6.6.0/#content-createContent


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接