Указание субъекта целевой базы данных при использовании cURL для загрузки файлов в RESTful Web API с использованием HTTP POST - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь загрузить файлы в RESTful WEB API, используя HTTP POST и cURL.Ниже приведен блок кода, который я пытаюсь в данный момент.С этим все просто отлично работает, кроме одной проблемы, он сохраняет данные в основной базе данных по умолчанию.Я хочу загрузить файл на базу данных, которую пользователь использует в данный момент.Мне нужно знать две вещи -

  • Есть ли способ указать, какой субъект базы данных использовать на веб-сервере в заголовке cURL или есть какая-либо опция cURL, чтобы указать это так, чтобы cURLPOST загружает данные в упомянутый субъект базы данных?

  • Я никогда раньше не использовал cURL, это лучший вариант для загрузки файлов с использованием multipart / form-data в RESTful WEB API по HTTPPOST?

    for($i=0; $i<count($_FILES['files_to_upload']['name']); $i++) {
            if(!empty($_FILES['files_to_upload']['tmp_name'][$i])) {
                $ext = pathinfo($_FILES['files_to_upload']['name'][$i], PATHINFO_EXTENSION);
                $finfo = finfo_open(FILEINFO_MIME_TYPE);
                $mime = finfo_file($finfo, $_FILES['files_to_upload']['tmp_name'][$i]);
                $data_for_api = [
                    'rel_type'  => PROJECTS_REL_TYPE,
                    'rel_key'   => $ktr,
                    'category'  => $_POST['file_category'][$i],
                    'filename'  => $_POST['file_name'][$i].".".$ext,
                    'file-form-data'    => new CURLFile($_FILES['files_to_upload']['tmp_name'][$i],$mime,$_FILES['files_to_upload']['tmp_name'][$i]),
                    'description'   => $_POST['file_name'][$i],
                    'uploader'  => $this->session->userdata(RESNR)
                ];
    
                $ch = curl_init(INTERNAL_API_URL.POST_A_FILE);
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data_for_api);
                if(!curl_exec($ch)) {
                    echo curl_error($ch);
                } 
                curl_close($ch);
            }
    }
    

1 Ответ

0 голосов
/ 24 сентября 2018

На самом деле здесь есть 2 вопроса, которые не являются хорошим форматом для переполнения стека, но я отвечу на оба, так как ваш опыт до сих пор был довольно болезненным:

Есть ли способуказать, какой субъект базы данных использовать на веб-сервере в заголовке cURL или есть какая-либо опция cURL, позволяющая указать, чтобы cURL POST загружал данные в упомянутый субъект базы данных?

Общий ответ наэто «нет».CURL ничего не знает о вашей базе данных и говорит только по HTTP.Протокол HTTP не имеет прямого отношения к базам данных и его пользователям.Это не означает, что это невозможно, но это определяется «для каждого приложения» и на стороне сервера.

Ваш серверный API должен предоставить способ сделать это.Только после того, как этот API сделает это, CURL может быть использован для использования этой функции.Но на этот вопрос нет «общего ответа».

Я никогда не использовал cURL раньше, это лучший вариант для загрузки файлов с использованием multipart / form-data в RESTful WEB API через HTTP POST?

Как правило, API RESTful имеет несколько способов загрузки файлов.Если вы управляете только клиентом, а не сервером, не имеет значения, является ли это лучшим вариантом.API REST определит, как должны работать загрузки, и вам нужно использовать этот метод.

Если вы управляете и сервером, и клиентом, может лучше не использовать multipart/form-data, но использоватьВместо этого PUT запрашивает и напрямую создает новые ресурсы, а не заключает их в запрос формы / публикации.

В любом случае, если вы пишете и серверу, и клиенту и хотите узнать больше об этих ответах, просто закройтена этот вопрос и откройте 2 новых.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...