Google Drive Api PHP 分段上传空内容

Posted

技术标签:

【中文标题】Google Drive Api PHP 分段上传空内容【英文标题】:Google Drive Api PHP multipart upload empty content 【发布时间】:2020-10-04 05:10:45 【问题描述】:

我的问题如下。 使用google drive api V3和php上传文件到google drive时,上传的文件为空,文件大小为0字节。所有元数据上传都没有问题。

session_start();
$file_tmp=$_SESSION['file_tmp'];
$drive = new Google_Service_Drive($client);

$data = file_get_contents($file_tmp);
    $file = new Google_Service_Drive_DriveFile(array(
      'data' => $data,
      'mimeType' => $file_type,
      'name' => $file_name,
      'description'=>$lolol,
      'uploadType' => 'multipart',
      'parents' => array($folderID),
      'uploadType' => 'multipart'
  ));
      $createdFile = $drive->files->create($file);

对于任何想知道的人,如果我回显 $file_tmp 我会得到一个路径,例如 /private/var/tmp/phpDpmi83 。(我是从一个带有输入类型文件的 html 表单中得到的)

最初我没有 UploadType 并且其他论坛说这是问题,但我添加了它,但仍然没有。 有什么建议?

【问题讨论】:

【参考方案1】:

我相信你的目标如下。

您想使用 Drive API 将带有 multipart/form-data 的文件上传到 Google Drive 中的特定文件夹。 您希望使用 googleapis for PHP 来实现此目的。 在您的脚本中,$drive 可用于上传文件。

对于这个,这个答案怎么样?

修改点:

在您的脚本中,请将元数据和文件内容分开。由此,我认为您的脚本有效。

当上述点反映到您的脚本中时,它变成如下。

修改脚本:

session_start();
$file_tmp=$_SESSION['file_tmp'];
$drive = new Google_Service_Drive($client);

$data = file_get_contents($file_tmp);

// I modified below script.
$file = new Google_Service_Drive_DriveFile(array(
    'mimeType' => $file_type,
    'name' => $file_name,
    'description'=>$lolol,
    'parents' => array($folderID),
));
$file_content = array(
    'data' => $data,
    'uploadType' => 'multipart'
);
$createdFile = $drive->files->create($file, $file_content);

注意:

在本次修改中,假设$data为文件内容。如果您的$file_tmp无法使用,请使用示例文件进行测试。 在这种情况下,最大文件大小为 5 MB。请注意这一点。

参考资料:

Upload file data googleapis for PHP

【讨论】:

谢谢。我会试试这个并报告结果!

以上是关于Google Drive Api PHP 分段上传空内容的主要内容,如果未能解决你的问题,请参考以下文章

google drive simple upload rest API的示例

使用PHP无需用户交互即可连接到Google Drive API

使用 Java 和 Google Drive API V3 将文件上传到共享的 Google Drive 位置?

通过Google Drive API上传图片/文件

如何从 Google Drive 上传和下载文件(使用 Rest Api v3)

2小时后Google Drive Python API可恢复上传错误401