Проблема с названиями файлов на диске Google при использовании curl API - PullRequest
0 голосов
/ 21 февраля 2019

Когда я пытаюсь загрузить файл на диск Google с помощью API php curl, он выдаёт без названия.И я не могу показать имя файла.Как я могу правильно загрузить файл, используя curl php?Я не хочу использовать клиентские библиотеки. На Google Диске нет заголовка загруженного файла

function save_application_form($wpcf7) {

//global $wpdb;
    $submission = WPCF7_Submission::get_instance();

    if ($submission) {
        $submited = array();
        $submited['title'] = $wpcf7->title();
        $submited['posted_data'] = $submission->get_posted_data();
        $uploaded_files = $submission->uploaded_files();
    }
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $cf7_file_field_name = 'file-846';
    $image_location = $uploaded_files[$cf7_file_field_name];
    $mime_type = finfo_file($finfo, $image_location);
    $token = GetRefreshedAccessToken('client_id', 'refresh_token', 'client_secret');
    $ch = curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_URL => 'https://www.googleapis.com/upload/drive/v3/files?uploadType=media',
        CURLOPT_HTTPHEADER => array(
            'Content-Type:' . $mime_type,
            'Authorization: Bearer ' . $token
        ),
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => file_get_contents($image_location),
        CURLOPT_RETURNTRANSFER => 1
    ));
    $response = curl_exec($ch);
    $err = curl_error($ch);

    curl_close($ch);

    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        echo $response;
    }
}

1 Ответ

0 голосов
/ 21 февраля 2019

Вы не загружаете метаданные файла, вы загружаете только сам файл. тело сообщения должно включать метаданные файла, имя файла которого является одним из этих элементов.

Пример клиентской библиотеки php для официального пользователя

документация показывает, как это сделать с клиентской библиотекой googles.

$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'photo.jpg'));
$content = file_get_contents('files/photo.jpg');
$file = $driveService->files->create($fileMetadata, array(
    'data' => $content,
    'mimeType' => 'image/jpeg',
    'uploadType' => 'multipart',
    'fields' => 'id'));
printf("File ID: %s\n", $file->id);

PHP CURL дикая догадка

Извините, я не могу помочь вам сделать это в curl.Но это просто вопрос отправки тела сообщения в виде строки JSon, содержащей желаемые данные.Следующее мое лучшее предположение после некоторого поиска в Google.

$data = array("name" => "picture.jpg", "mimeType"=> "image/jpeg");                                                                    
$data_string = json_encode($data);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);   
...