- Вы хотите загрузить файл с помощью
multipart/ralated
с Drive API v3. - Вы хотите добиться этого с помощью PHP CURL.
- Можно использовать свой токен доступа для загрузки файла на Google Drive.
Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
Точки модификации:
- В этом случае я хотел бы предложить создать структуру, включающую файл и метаданные для
multipart/ralated
и запросите его.
Модифицированный скрипт:
Когда ваш скрипт модифицируется, он выглядит следующим образом.
public function uploadByCurl($uploadFilePath, $accessToken){
$handle = fopen($uploadFilePath, "rb");
$file = fread($handle, filesize($uploadFilePath));
fclose($handle);
$boundary = "xxxxxxxxxx";
$data = "--" . $boundary . "\r\n";
$data .= "Content-Type: application/json; charset=UTF-8\r\n\r\n";
$data .= "{\"name\": \"" . basename($uploadFilePath) . "\", \"mimeType\": \"" . mime_content_type($uploadFilePath) . "\"}\r\n";
$data .= "--" . $boundary . "\r\n";
$data .= "Content-Transfer-Encoding: base64\r\n\r\n";
$data .= base64_encode($file);
$data .= "\r\n--" . $boundary . "--";
$ch = curl_init();
$options = [
CURLOPT_URL => 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart',
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => [
'Authorization:Bearer ' . $accessToken,
'Content-Type:multipart/related; boundary=' . $boundary,
],
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 0,
];
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
return $result;
}
- При этом В измененном сценарии имя файла и mimeType извлекаются из
$uploadFilePath
.
Примечание:
- Многоэтапная загрузка может загружать файлы размером менее 5 МБ. Пожалуйста, будьте осторожны с этим.
Ссылки:
Если я неправильно понял ваш вопрос, и это не было направление, которое вы хотите, я прошу прощения.