Загрузка файла в ownCloud через PHP и HTML-форму

У меня возникли проблемы с разработкой веб-приложения для загрузки файлов на мой сервер owncloud через форму с использованием PHP, я использую curl для PUT запроса через webDav, так что вот код:

Индекс.php

<html>
        <head>
            <title>Theform is here</title>
        </head>
        <body>
            <div align="center">
                <h1> File uploads with OwnCloud API</h1>
                <form method="post" action="uploader.php" name="fileuploader">
                    <label>Select a File to upload</label><br>
                    <input type="file" name="file"></input><br>
                    <input type="submit" value="upload file"></input>
                </form>
                <?php
                ?>
            </div>
        </body>
    </html>

загрузчик.php

<?php
    $request = curl_init('http://mydomain.cl/owncloud/remote.php/webdav/Dev/');

    curl_setopt($request,CURLOPT_POST,true);
    curl_setopt($request,CURLOPT_HTTPHEADER,'Authorization: Basic');
    curl_setopt($request, CURLOPT_USERPWD, "user:password");
    curl_setopt($request, CURLOPT_PUT, 1);
    curl_setopt(
        $request,
        CURLOPT_INFILE,
        array(
            'thefile'=>
                        '@'            .$_FILES['file']['tmp_name']
                        . ';filename=' .$_FILES['file']['daName']
                        . ';type='     .$_FILES['file']['type']

        ));
    curl_setopt($request, CURLOPT_INFILE, $_FILES['file']);
    curl_setopt($request, CURLOPT_INFILESIZE, filesize($_FILES['file']));


    // output the response
    curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($request, CURLOPT_BINARYTRANSFER, TRUE); 
    echo curl_exec($request);

    // close the session
    curl_close($request);

?>

Когда я пытаюсь загрузить файл, я получаю этот ответ:

Sabre\DAV\Exception\NotAuthenticated Заголовок «Авторизация: базовая» не найден. Либо клиент не отправил его, либо сервер неправильно настроен.

Но когда я использую клиент owncloud, я могу без проблем получить доступ к своим файлам.

РЕДАКТИРОВАТЬ: исправил переменную имени $ch на $request и добавил строку:

curl_setopt($request,CURLOPT_HTTPHEADER,'Авторизация: базовая');

из сообщения @Craig, после этого я получил это сообщение об ошибке:

Sabre\DAV\Exception\Conflict PUT не разрешен для нефайлов.

Пожалуйста, помогите мне решить эту проблему. С уважением :D


person NMenam    schedule 28.09.2016    source источник
comment
РЕДАКТИРОВАТЬ: просматривая документацию, я нашел метод CURL для публикации файлов, но похоже на командную строку OwnCloud Documentation, поэтому, если кто-нибудь знает, как анализировать ir или использовать его на php, это будет большим подспорьем для моей цели.   -  person NMenam    schedule 29.09.2016


Ответы (3)


Включите это в параметры скручивания:

CURLOPT_HTTPHEADER => array('Authorization: Basic');

или использовать существующее соглашение:

curl_setopt($ch, CURLOPT_HTTPHEADER, 'Authorization: Basic');
person Craig    schedule 28.09.2016
comment
Это работает, но теперь сервер отвечает: Sabre\DAV\Exception\Conflict PUT не разрешен для нефайлов. - person NMenam; 28.09.2016
comment
Исследование об использовании публикации в owncloud, которое я обнаружил, не поддерживается :( - person NMenam; 29.09.2016
comment
@NMenam Можете ли вы опубликовать рабочий код для загрузки больших файлов в owncloud в формате php? Приведенный выше код работает? - person augustine jenin; 09.10.2019
comment
Я только что создал простую форму для загрузки файлов на сервер, а затем смонтировал папку сервера с внешним хранилищем из owncloud, к сожалению, у меня нет кода :( - person NMenam; 11.10.2019

Наконец, чтобы управлять своими файлами через owncloud, мне пришлось указать форму на каталог на веб-сервере, а затем использовать плагин owncloud для монтирования внешних источников хранения, и он отлично работает для меня.

Конфигурация внешнего хранилища

person NMenam    schedule 21.11.2016
comment
Любой пример? я тоже застрял - person Faizan Anwer Ali Rupani; 05.09.2020

Чтобы загрузить файл в owncloud с формой html и php

<html>
        <head>
            <title>Theform is here</title>
        </head>
        <body>
            <div align="center">
                <h1> File uploads with OwnCloud API</h1>
                <form method="post" action="" name="fileuploader" enctype="multipart/form-data">
                    <label>Select a File to upload</label><br>
                    <input type="file" name="file"></input><br>
                    <input type="submit" name="submit" value="upload file"></input>
                </form>
                <?php
                ?>
            </div>
        </body>
    </html>


$file_path_str = $_FILES['file']['tmp_name'];
$filename=$_FILES['file']['name'];
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://server/owncloud/remote.php/webdav/' . basename($filename));
curl_setopt($ch, CURLOPT_FAILONERROR, true); 
curl_setopt($ch, CURLOPT_USERPWD, "user:password");
curl_setopt($ch, CURLOPT_PUT, 1);

$fh_res = fopen($file_path_str, 'r');

curl_setopt($ch, CURLOPT_INFILE, $fh_res);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file_path_str));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary

$curl_response_res = curl_exec ($ch);
if (curl_errno($ch)) {
    $error_msg = curl_error($ch);
    print_r($error_msg);exit;
}
fclose($fh_res);
person augustine jenin    schedule 10.10.2019