为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕运维8079593 2023-03-26 14:10:59
我正在开发一个程序,允许用户使用 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'] 数组有关,但从所有在线文档来看,它似乎也是正确的。
查看完整描述

3 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

如果仍未解决,那么...正如您提到的 $_FILES 为空,那么我建议查看项目中的文件位置。假设您index.phpPROJECT->HOME->index.php目录中,那么您Next.php应该在PROJECT->Next.php目录中。

你也必须给提交一个name=submit

Next.php测试中是否设置了任何一种形式

if(isset($_POST['submit'])){ print_r($_FILES['myfile']); }

如果没有上传文件,请告诉我问题所在。


查看完整回答
反对 回复 2023-03-26
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

初始设置

由于您的 HTML 文件规范,我假设您的项目结构如下:


project/

├── templates/

│   └── 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(

    'name' => "Test",

));


try{


    $newFile = $service->files->create(

        $fileMetadata,

        array(

            'data' => file_get_contents($myfile),

            'mimeType' => mime_content_type($myfile),

            'uploadType' => 'multipart'

        )

    );



} catch(Exception $e){


    echo 'An error ocurred : ' . $e->getMessage();


}


查看完整回答
反对 回复 2023-03-26
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

尝试添加多部分


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

  'data' => $data,

  'mimeType' => $type,

  'uploadType' => 'multipart'

));


查看完整回答
反对 回复 2023-03-26
  • 3 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信