Как создать публичную ссылку для загруженного файла на OwnCloud
Я создал скрипт powershell для загрузки файла на owncloud. Загрузка работает нормально, но как мне получить общедоступную ссылку для этого загруженного файла.
Ниже сценарий
$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
2 ответа
Обратите внимание, что ownCloud не создает публичную ссылку для файлов, которые вы загружаете, если вы явно не сделаете это. Для этого вам нужно использовать API ocs Share. В документах вы найдете это для общего доступа к ссылкам (т.е. shareType = 3
Вы должны выполнить отдельное POST
запрос с path
самого файла.
Я немного адаптировал ваш код, чтобы он работал с новыми экземплярами ownCloud (версия 9 и последующие поставляются с другой конечной точкой WebDAV), а также для улучшения составов 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, то это работает точно так же, но у вас есть еще несколько вариантов при создании ссылок для обмена. Документация находится здесь: https://docs.nextcloud.com/server/12/developer_manual/core/ocs-share-api.html Nextcloud является полностью открытым исходным кодом и работает быстрее, чем Owncloud.