【问题标题】:PHP file upload to Google DrivePHP 文件上传到 Google Drive
【发布时间】:2018-07-10 01:00:19
【问题描述】:

我正在尝试使用 API 将文件上传到 Google Drive。上传过程正常,但问题是驱动器上的上传文件是空的(没有什么可显示的)。为什么?

这是上传的PHP代码。

  DEFINE("TESTFILE", $_FILES['myFile']);
  DEFINE('TYPE', $_FILES["myFile"]["type"]);

  $file = new Google_Service_Drive_DriveFile();
  $file->setName('HelloWorld');
  $file->setDescription('A test document');

  $result = $service->files->create(
      $file,
      array(
        'data' => TESTFILE,
        'mimeType' => TYPE,
        'uploadType' => 'media'
      )
  );
    }
    catch(Exception $e){
        echo $e->getMessage();
    }

这是 HTML 表单:

<div>
<form enctype="multipart/form-data" method="POST">
<input type="file" name= "myFile">
<input type ="submit">
</form>

【问题讨论】:

标签: php google-api google-drive-api google-api-php-client


【解决方案1】:

您的代码中缺少中间步骤。

您需要先将上传的文件保存到本地磁盘(作为临时文件),然后将该文件读回变量或文件句柄,然后在您的 $service-&gt;files-&gt;create() 调用中将其传递给 TESTFILE .

类似这样的...

$file_tmp  = $_FILES["myFile"]["tmp_name"];
$file_type = $_FILES["myFile"]["type"];
$file_name = basename($_FILES["myFile"]["name"];

move_uploaded_file($file_tmp, "path/to/upload/".$file_name);

$file_data = file_get_contents("path/to/upload/".$file_name);

$file = new Google_Service_Drive_DriveFile();
$file->setName('HelloWorld');
$file->setDescription('A test document');

$result = $service->files->create(
  $file,
  array(
    'data' => $file_data,
    'mimeType' => $file_type,
    'uploadType' => 'media'
  )
);

但请记住验证您上传的文件的类型、大小等是否正确,作为最佳做法。

【讨论】:

  • $_FILES["myFile"]["type"]; 是要避免的。它的恶搞。最好使用mime_content_type()。此外,PHP 完全能够从 tmp 目录中读取文件内容,而无需移动它。
  • Xorifelse 是正确的,从 'tmp' 读取文件内容无需移动即可。已更改:'data' => file_get_contents($file_tmp);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多