Проблема с файлом без названия на диске Google при использовании curl API

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

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;
    }
}

person P.patel    schedule 21.02.2019    source источник
comment
Файл загружен на гугл диск, но без названия. Не показывает имя файла   -  person P.patel    schedule 21.02.2019
comment
Тут есть кто-нибудь?   -  person P.patel    schedule 21.02.2019


Ответы (1)


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

Пример официальной клиентской библиотеки php

В документации показано, как это сделать с помощью клиентской библиотеки Google.

$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);   
person DaImTo    schedule 21.02.2019
comment
Верно, но я хочу использовать curl - person P.patel; 21.02.2019
comment
Да, вам нужно отправить метаданные в качестве тела сообщения. Вам придется выяснить, как это сделать в Curl. Все, что я могу сделать, это сказать вам, что не так. Я опубликовал предположение, что получил форму Google php curl и тело сообщения. Это может быть близко - person DaImTo; 21.02.2019
comment
Это все еще дает без названия. Что я могу сделать? - person P.patel; 22.02.2019
comment
единственное, что вы можете сделать, это загрузить метаданные в файл. как только вы это сделаете, этого больше не будет - person DaImTo; 22.02.2019