如何使用 curl 自动上传和签入文件到共享点?

Posted

技术标签:

【中文标题】如何使用 curl 自动上传和签入文件到共享点?【英文标题】:How to auto upload and check in the files to sharepoint using curl? 【发布时间】:2012-11-06 16:56:30 【问题描述】:

我正在尝试使用我的共享点登录凭据将文件从 linux 上传到共享点。 我使用 cURL 实用程序来实现这一点。上传成功。

使用的命令是:curl --ntlm --user username:password --upload-file myfile.txt -k https://sharepointserver.com/sites/mysite/myfile.txt -k 选项用于克服非安全共享点站点的证书错误。

但是,这个上传的文件显示在我登录后共享点的“已签出”视图(绿色箭头)中。 因此,其他登录的用户不存在此文件。

我的登录拥有对 sharepoint 的写入权限。

关于如何将此文件“签入”到与 cURL 共享点以便任何人都可以登录查看该文件的任何想法?

【问题讨论】:

【参考方案1】:

我关于 Performing multiple requests using cURL 的问题有一个使用 bash 和 cURL 的非常全面的示例,尽管它不得不为每个请求重新输入密码。

【讨论】:

【参考方案2】:

Junx 的上述回答是正确的。但是,Filename 变量不仅是文档文件名和扩展名,还应该包括库名。我能够使用以下方法使其正常工作。

示例:http://domain/_layouts/Checkin.aspx?Filename=Shared Documents/filename.txt

【讨论】:

【参考方案3】:

我现在没有可用的 curl 来测试,但你也许可以根据以下信息做出一些调整。

签入和签出由 /_layouts/CheckIn.aspx 处理

该页面具有以下查询字符串变量:

列表 - 标识当前列表的 GUID。

FileName - 带有扩展名的文件的名称。

来源 - 库中 allitems.aspx 页面的完整 URL。

仅使用 FileName 和 Source 参数并省略 List 参数,我就能够正确加载 CheckIn.aspx 页面。这很好,因为您不必想办法查找列表 GUID。

CheckIn.aspx 页面使用以下控制签入的表单参数回发到自身:

PostBack - 布尔值设置为 true。

CheckInAction - 字符串设置为 ActionCheckin

KeepCheckout - 设置为 1 保持结帐,设置为 0 保持签入

CheckinDescription - 文本字符串

像这样在 curl 中调用它

curl --data "PostBack=true&CheckinAction=ActionCheckin&KeepCheckout=0&CheckinDescription=SomeTextForCheckIn" http://您的服务器和站点/_layouts/checkin.aspx?Source=Full Url到库/Forms/AllItems.aspx&FileName=Doc And Ext

正如我所说,我没有 curl 可以测试,但我使用 Fiddler 2 中的 Composer 选项卡让它工作

我现在正在用 curl 尝试这个,但让它工作时出现了问题。 Fiddler 将请求作为 POST 执行。如果您尝试以 GET 请求的形式执行此操作,您将收到 500 错误,指出 SPWeb 的 AllowUnsafeUpdates 属性将不允许通过 GET 进行此请求。将请求作为 POST 发送应该可以纠正这个问题。

编辑 我目前正在查看 DotPeek 反编译器中的 checkin.aspx 源代码,并看到一些与 ActionCheckin 参数相关的附加选项,例如 ActionCheckinPublish 和 ActionCheckinFromClientPublish。我会用任何额外的发现来更新它。该页面位于 Microsoft.SharePoint.ApplicationPages.Checkin 供任何其他感兴趣的人使用。

【讨论】:

以上是关于如何使用 curl 自动上传和签入文件到共享点?的主要内容,如果未能解决你的问题,请参考以下文章

用于更新文件和签入 TFS 的 Azure DevOps 管道任务

以编程方式编写 TFS 命令行以获取最新版本、签出和签入

如何从签入和签出列表中计算时间跨度?

Microsoft Access 签入和签出

如何使用 python 脚本将文件上传到共享点站点

如何用curl命令上传文件到制定的目录