使用 Google Drive API v3 和 php 通过 html 表单上传文件

我正在开发一个程序,允许用户使用 HTML 表单选择一个文件,然后该程序会将所述文件上传到 Google Drive 并与某个其他用户共享。我已经能够在 Google Drive 中创建一个文件然后共享它;但是一旦我尝试上传一个文件,它就开始走下坡路了。


这很奇怪,因为我认为上传文件的代码是正确的,所以问题一定在于我如何将文件从 HTML 表单获取到 PHP 文件。我的怀疑有点被我试图 echo $_FILES['myfile']['name'] 没有任何反应这一事实所证实。


我将在下面上传两个代码片段,但为了简洁起见,我将省略所有 Google Drive api 身份验证,因为它有效。


索引.php

      <form action="../Next.php" method="POST" enctype="multipart/form-data">

    <section class="file">

      <span>Please select the file to be uploaded </span>

      <br>

      <label for="myfile">Select a file:</label>

      <input type="file"  name="myfile" required  >

     </section>

    <section class="submission">

      <input type="submit" value="Submit">

    </section>

  </form>

下一步.php

    $myfile=$_FILES['myfile']['tmp_name'];

    $type=mime_content_type($myfile);

    $drive = new Google_Service_Drive($client);

    $file = new Google_Service_Drive_DriveFile();

    $file->setTitle('Test');

    $file->setDescription('Test');

    $file->setMimeType($type);

    $data = file_get_contents($myfile);

    $uploadedFile = $service->files->insert($file, array(

      'data' => $data,

      'mimeType' => $type,

     ));

请记住我省略了验证码,因为我知道它有效。


我不明白为什么这什么都不做,从我在互联网上搜集到的代码是正确的。我认为这个问题可能与 $_FILES['myfile'] 数组有关,但从所有在线文档来看,它似乎也是正确的。


慕运维8079593
浏览 118回答 3
3回答

慕森卡

如果仍未解决,那么...正如您提到的 $_FILES 为空,那么我建议查看项目中的文件位置。假设您index.php在PROJECT->HOME->index.php目录中,那么您Next.php应该在PROJECT->Next.php目录中。你也必须给提交一个name=submit。在Next.php测试中是否设置了任何一种形式if(isset($_POST['submit'])){ print_r($_FILES['myfile']); }如果没有上传文件,请告诉我问题所在。

一只名叫tom的猫

初始设置由于您的 HTML 文件规范,我假设您的项目结构如下:project/├── templates/│&nbsp; &nbsp;└── index.html└── Next.php因此,我将使用以下命令在项目文件夹中启动一个 php 简单的 http 服务器:php -S localhost:8000方法为了让它工作,你将不得不Next.php稍微调整你的代码。我建议使用最新的 Drive APi 版本 (v3)。v3 中没有方法insert(),但有create().// Get the API client and construct the service object.$client = getClient();$service = new Google_Service_Drive($client);$myfile=$_FILES['myfile']['tmp_name'];$fileMetadata = new Google_Service_Drive_DriveFile(array(&nbsp; &nbsp; 'name' => "Test",));try{&nbsp; &nbsp; $newFile = $service->files->create(&nbsp; &nbsp; &nbsp; &nbsp; $fileMetadata,&nbsp; &nbsp; &nbsp; &nbsp; array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'data' => file_get_contents($myfile),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'mimeType' => mime_content_type($myfile),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'uploadType' => 'multipart'&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; );} catch(Exception $e){&nbsp; &nbsp; echo 'An error ocurred : ' . $e->getMessage();}

慕盖茨4494581

尝试添加多部分$uploadedFile = $service->files->insert($file, array(&nbsp; 'data' => $data,&nbsp; 'mimeType' => $type,&nbsp; 'uploadType' => 'multipart'));
打开App,查看更多内容
随时随地看视频慕课网APP