gpt4 book ai didi

php - 如何使用 php-curl 将文件上传到 "multipart"类型的 Google 云端硬盘?

转载 作者:行者123 更新时间:2023-12-02 00:05:22 26 4
gpt4 key购买 nike

我想使用 google-api-php-client 以外的 php curl 上传,但我真的不知道该怎么做,这里是文档:Send a multipart upload request

这是我的代码片段,我卡在 CURLOPT_POSTFIELDS 中,有人可以帮我解决这个问题吗?

public function uploadByCurl($uploadFilePath, $accessToken){
$ch = curl_init();
$mimeType = $this->getMimeType($uploadFilePath);
$options = [
CURLOPT_URL => 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart',
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => [
'file' => new \CURLFile($uploadFilePath),
// 'name' =>
],
CURLOPT_HTTPHEADER => [
'Authorization:Bearer ' . $accessToken,
'Content-Type:' . $mimeType,
'Content-Length:' . filesize($uploadFilePath),
],
//In case you're in Windows, sometimes will throw error if not set SSL verification to false
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 0,
];
//In case you need a proxy
//$options[CURLOPT_PROXY] = 'http://127.0.0.1:1087';

curl_setopt_array($ch, $options);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
return $result;
}

我只是不知道如何将其转化为代码(不熟悉multipart/related):

  • 元数据部分。必须在前,并且必须将 Content-Type header 设置为 application/json;字符集=UTF-8。以 JSON 格式将文件的元数据添加到此部分。
  • 媒体部分。必须排在第二位,并且必须有一个 Content-Type 头,它可以有任何 MIME 类型。将文件的数据添加到此部分。

最佳答案

  • 您想使用 multipart/ralated 和 Drive API v3 上传文件。
  • 您想使用 PHP CURL 实现此目的。
  • 您的访问 token 可用于将文件上传到 Google 云端硬盘。

如果我的理解是正确的,这个答案怎么样?

修改点:

  • 在这种情况下,我想建议为 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 MB 的文件。请注意这一点。

引用资料:

  • Perform a multipart upload

    Multipart upload: uploadType=multipart. For quick transfer of a small file (5 MB or less) and metadata that describes the file, all in a single request.

关于php - 如何使用 php-curl 将文件上传到 "multipart"类型的 Google 云端硬盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60813750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com