Как создать публичную ссылку для загруженного файла на 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

I need to print link from the code like

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

person Jaydeep Chaudhari    schedule 13.10.2017    source источник


Ответы (2)


Обратите внимание, что ownCloud не создает публичную ссылку для загружаемых вами файлов, если вы не сделаете это явно. Для этого вам необходимо использовать API общего доступа ocs. В документации вы обнаружите, что для общего доступа к общедоступной ссылке (т. е. 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 для каждого запроса, тела ответов...

person Alfageme    schedule 14.10.2017
comment
Загрузить и создать общедоступную часть общего доступа, работающую нормально, однако она не печатает URL-адрес общедоступной ссылки. - person Jaydeep Chaudhari; 17.10.2017
comment
@JaydeepChaudhari упс, опечатка; Прости. Попробуйте еще раз с $response.ocs.data.url - person Alfageme; 17.10.2017
comment
Только для получения информации о работе вышеуказанного решения вам необходимо разрешить параметр для Allow Public Uploads и отключить параметр для Enforce Password Protection в меню owncloud - настройки - совместное использование. - person Jaydeep Chaudhari; 09.04.2018
comment
Передача учетных данных для второго вызова Invoke-RestMethod у меня не сработала, я получил код ошибки 997 (несанкционированный доступ). Мне нужно было установить заголовок аутентификации вручную, как описано на stackoverflow.com/q/27951561/5525302. - person MarkusParker; 03.01.2020

Небольшое примечание. Если вы используете Nextcloud вместо OwnCloud, то это работает точно так же, но у вас есть несколько дополнительных опций при создании ссылок для обмена. Документация находится здесь: https://docs.nextcloud.com/server/12/developer_manual/core/ocs-share-api.html Nextcloud имеет полностью открытый исходный код и работает быстрее, чем Owncloud.

person Darwiche    schedule 14.10.2017