【问题标题】:URL to upload to Google Drive上传到 Google 云端硬盘的网址
【发布时间】:2021-01-22 23:45:26
【问题描述】:

我可以使用任何网址直接上传到 Google 云端硬盘吗?例如,我的服务器上有一个文件 http://example.com/file.doc,我想将其上传到 Google Drive,例如:http://google.com/?upload=http://example.com/file.doc

这样做的方法是什么?

【问题讨论】:

    标签: google-apps-script web-applications google-drive-api


    【解决方案1】:

    这个解决方法怎么样?不幸的是,Google API 上没有未经授权直接上传文件的 URL。所以我提出了一个解决方法。我认为这种方法可能很容易实现您想要做的事情。请将此视为几个答案之一。

    我认为通过使用 Web Apps,您可以实现您想做的事情。此变通方法的流程如下。

    流程:

    1。示例脚本

    • 创建一个独立的脚本。
      • 您也可以在绑定脚本中执行此流程。这里使用了一个独立的脚本。
    • 复制并粘贴以下示例脚本,然后保存。

    请运行doGet(e)。这样,虽然发生错误,但可以完成授权过程。

    function doGet(e) {
      var blob = UrlFetchApp.fetch(e.parameters.url).getBlob();
      var id = DriveApp.createFile(blob).getId();
      return ContentService.createTextOutput(id);
    }
    

    2。部署 Web 应用程序。

    • 在脚本编辑器的菜单栏中,选择发布 -> 部署为 Web 应用程序。
    • 在“项目版本:”处,输入字符串。
    • 在“将应用程序执行为:”中,选择“我”。
    • 在“谁有权访问应用程序:”中,选择“任何人,甚至匿名”。
    • 点击“部署”按钮。
    • 请复制“当前网络应用 URL:”。 URL 是https://script.google.com/macros/s/#####/exec
      • 您可以使用此 URL 上传文件。
    • 点击“确定”。

    3。从 URL 上传文件

    • 查询参数为url=http://example.com/file.doc
    • 您可以使用浏览器访问此 URL https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc 来上传 file.doc
      • 在此示例脚本中,上传文件是在您的 Google Drive 的根文件夹中创建的。

    注意:

    • 关于 Web 应用,如果您更新脚本,请将 Web 应用重新部署为新版本。这样,更新的脚本就会得到反映。
    • 这个示例脚本非常简单。因此,请根据您的环境进行修改。到时候,如果有什么问题,请随时告诉我。
    • 在这种情况下,当用户使用 Web Apps URL 上传文件时,文件会上传到部署 Web Apps 的所有者的 Google Drive。因为脚本是作为唯一所有者运行的。

    如果这对你没有用,我很抱歉。

    编辑:

    我了解到您想使用 php 和 javascript(我在这里使用 jQuery)从 URL 上传文件。如果我的理解有误,请告诉我。使用这些脚本需要doGet(e) 的 Google Apps 脚本。首先,请复制并粘贴doGet(e) 并部署Web Apps。对于这两个脚本,Google Drive 上创建的文件的文件 ID 作为响应返回。

    通过php上传

    <?php
        $url = 'https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc';
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl,CURLOPT_FOLLOWLOCATION, true);
        $response = curl_exec($curl);
        echo $response;
        curl_close($curl);
    ?>
    

    通过 jQuery 上传

    $.get("https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc", function(res) {
        console.log(res);
    });
    

    参考资料:

    编辑 2:

    当您想让用户上传文件到自己的 Google Drive 时,请按照以下流程部署 Web Apps。

    流程:

    1。示例脚本

    • 创建独立脚本。
      • 您也可以在绑定脚本中执行此流程。这里使用了一个独立的脚本。
    • 复制并粘贴以下示例脚本,然后保存。

    请运行doGet(e)。这样,虽然发生错误,但可以完成授权过程。

    function doGet(e) {
      var blob = UrlFetchApp.fetch(e.parameters.url).getBlob();
      var id = DriveApp.createFile(blob).getId();
      return ContentService.createTextOutput(id);
    }
    

    2。部署 Web 应用程序。

    • 在脚本编辑器的菜单栏中,选择发布 -> 部署为 Web 应用程序。
    • 在“项目版本:”处,输入字符串。
    • 在“将应用程序执行为:”中,选择“用户访问网络应用程序”
    • 在“谁有权访问应用程序:”中,选择“任何人”
    • 点击“部署”按钮。
    • 请复制“当前网络应用 URL:”。 URL 是https://script.google.com/macros/s/#####/exec
      • 您可以使用此 URL 上传文件。
    • 点击“确定”。

    3。从 URL 上传文件

    • 查询参数为url=http://example.com/file.doc
    • 您可以使用浏览器访问此 URL https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc 来上传 file.doc
      • 在此示例脚本中,上传文件是在您的 Google Drive 的根文件夹中创建的。
    • 当用户访问https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc 的 URL 时,会显示 Google 的登录屏幕。
    • 登录 Google 后,会显示授权屏幕。
    • 通过授权,file.doc被上传到用户的Google Drive。因为脚本是作为每个用户运行的。

    注意:

    • 请仅由一位用户部署 Web 应用程序。并且请在所有用户之间分享 Web Apps 的 URL。
    • 在这种情况下,用户使用每个用户的浏览器,因为授权过程需要浏览器。
      • 如果你用这个作为HTML,你可以把https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc的URL作为链接。
    • 关于 Web 应用,如果您更新脚本,请将 Web 应用重新部署为新版本。这样,更新的脚本就会得到反映。

    编辑 3:

    在使用Web Apps的情况下,使用&lt;div class="google-upload" data-url="http://example.com/file.doc"&gt;时,示例脚本如下。

    当用户点击Upload 时,file.doc 会上传到用户的云端硬盘。为了使用这个示例脚本,请使用上面的“编辑 2”部署 Web 应用程序检索到的 URL。

    在这种情况下,登录屏幕会显示给每个用户。用户需要在登录后通过点击屏幕上的按钮授权使用 API。这是你想要的吗?

    <html>
      <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.js"></script>
      </head>
      <body>
        <div class="google-upload" data-url="http://example.com/file.doc">
          <span style="background-color: #ddd">Upload</span>
        </div>
        <script>
          $(function() {
            $(".google-upload").click(function() {
              var url = "https://script.google.com/macros/s/#####/exec"; // Please input the URL here.
              var withQuery = url + "?url=";
              window.open(withQuery + $('.google-upload').attr("data-url"), "_blank", "width=600,height=600,scrollbars=1");
            });
          });
        </script>
      </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      随着 colab 的推出,现在事情变得容易多了。

      1. 转到 google colab,然后将 google 驱动器安装到工作区。

      2. 一旦驱动器安装在/content 中并假设您在dirUrl 中有一个目录,请在笔记本单元格中运行以下命令。

        !wget -P /content/drive/My\ Drive/dirUrl https://www.aclweb.org/anthology/P19-1111.pdf

      事实上,我发现这种方法甚至比 multcloud 等高级服务还要快。

      【讨论】:

      • 我想知道是否有办法同时处理多个 URL。因为我必须将来自 URL 的 4 种文件类型上传到特定文件夹。 @Amrith
      • 在 colab 中,您始终可以运行 python 代码。因此,您可以简单地使用 os 库来操作路径和获取文件信息,并根据文件类型的性质编写逻辑
      猜你喜欢
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多