Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何在自己的云上为上传的文件创建公共链接_Powershell_Owncloud - Fatal编程技术网

Powershell 如何在自己的云上为上传的文件创建公共链接

Powershell 如何在自己的云上为上传的文件创建公共链接,powershell,owncloud,Powershell,Owncloud,我创建了一个powershell脚本来在自己的云上上传文件。上传工作正常,但如何获取上传文件的公共链接 下面是脚本 $user = "admin" $pass= "admin" $secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd) $body = "file

我创建了一个powershell脚本来在自己的云上上传文件。上传工作正常,但如何获取上传文件的公共链接

下面是脚本

$user = "admin"
$pass= "admin"
$secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd)
$body = "file=$(get-content c:\myupload.zip -raw)"
$targetname = "myupload.zip"
$oc = "http://myowncloud:8085/remote.php/webdav/NOC/"
Invoke-RestMethod -uri $oc$targetname -method Put -body $body -Credential $credential

我需要打印的代码链接如下

http://myowncloud:8085/index.php/s/aTQr8JNxEYCw1Vz

请注意,除非您明确这样做,否则ownCloud不会为您上载的文件创建公共链接。为此,您需要使用。在文档中,您会发现,对于公共链接共享(即
shareType=3
),您必须使用文件本身的
路径执行单独的
POST
请求

我稍微修改了您的代码,使其能够与更新的ownCloud实例(版本9等)一起工作,并允许更好的URL组合:

# Upload the file
$body = $(get-content c:\test.txt -raw)
$targetname = "test.txt"
$oc = "http://demo.owncloud.com/"
$dav_endpoint = "remote.php/dav/files/admin/"
Invoke-RestMethod -Uri $oc$dav_endpoint$targetname -Method Put -Body $body -Credential $credential

# Create a public share for that file:
$headers = @{"Ocs-APIREQUEST"="true"}
$sharing_api = "ocs/v1.php/apps/files_sharing/api/v1/shares?format=json"

# Required parameters to create the share:
$body = @{
    path = "/$($targetname)"
    shareType = "3"
}

$response = Invoke-RestMethod -Uri $oc$sharing_api -Method Post -Headers $headers -Body $body -Credential $credential
# Print the public link URL:
echo $response.ocs.data.url

还要考虑到这只涵盖了快乐路径,如果您检查每个请求的HTTP状态,您的脚本将更加正确和完整,回复的正文

一个小旁注。如果您使用Nextcloud而不是OwnCloud,那么效果完全相同,但在创建共享链接时,您还有一些选项。文档在这里:Nextcloud是完全开源的,比Owncloud更快

上传并创建一个公共共享部分工作正常,但它不会打印公共链接URL。@Jaydepchaudhari woop,打字错误;很抱歉请使用
$response.ocs.data.url重试
仅提供上述解决方案工作的信息,您需要从owncloud-settings-sharing菜单中为
允许公共上载
允许选项,并禁用
强制密码保护
选项。为第二次调用RestMethod调用传递凭据对我无效,我得到错误代码997(未经授权)。我需要手动设置身份验证标头,如中所述。