【问题标题】:How to upload a file to Atlassian Confluence page using curl如何使用 curl 将文件上传到 Atlassian Confluence 页面
【发布时间】:2014-03-21 06:23:55
【问题描述】:

我正在尝试按照远程 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 没有太多经验。

【问题讨论】:

    标签: python curl confluence confluence-rest-api


    【解决方案1】:

    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>"
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我也试过这个。它不起作用:(我从工具下的页面信息部分查找了 page_id。
      • 您到底尝试了什么?另外,请确保:1)rest api 由管理员启用(默认情况下它关闭 IIRC),2)您有权使用它,3)它不限于 Intranet/whitelist/otherwise_authorized_users,4)它在与“可见”融合的主机相同。
      • 我试过 curl -v -S -u 用户名:密码 -X POST -H "X-Atlassian-Token: nocheck" -F "file=@test.txt" -F "comment=this是我的文件”“https:///confluence/rest/api/content/889912330/child/attachment”889912330 是我在工具下查找时找到的页面 ID。在控制台上,它会返回一个 404 以及所有的 html。
      • 你应该用单引号括起你的评论:curl -v -S -u username:password -X POST -H "X-Atlassian-Token: nocheck" -F "file=@test.txt" -F "comment='this is my file'" "http://&lt;confluence server&gt;/confluence/rest/api/content/889912330/child
      • 我完全删除了 cmets。 curl -v -S -u 用户名:密码 -X POST -H "X-Atlassian-Token: nocheck" -F "file=@test.txt" "https:///confluence/rest/api/内容/889912330/child/attachment。仍然无法正常工作:(
      【解决方案3】:

      我不认为 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。
      【解决方案4】:

      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
      

      可以在 URL 显示页面中找到 pageID。例如: 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

      【讨论】:

        猜你喜欢
        • 2017-03-16
        • 1970-01-01
        • 1970-01-01
        • 2017-11-16
        • 1970-01-01
        • 2012-12-20
        • 2016-12-30
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多