【问题标题】:How to upload to google drive with python without authentication?如何在没有身份验证的情况下使用 python 上传到谷歌驱动器?
【发布时间】:2019-11-10 12:38:42
【问题描述】:

我想使用 Google Script 和 Python 将文件上传到 Google Drive。

我不想使用 API 执行此操作,因为它使用 JSON 文件并请求 Google 帐户的密码。

我想从没有 JSON 文件且不请求谷歌帐户的 Python 文件发送。

我想在谷歌脚本中创建一个脚本,将文件上传到网站。

我找到了如何使用 html 来做到这一点:

function saveFile(data,name,folderName) { 
   var contentType = data.substring(5,data.indexOf(';'));

   var file = Utilities.newBlob(
     Utilities.base64Decode(data.substr(data.indexOf('base64,')+7)), 
     contentType, 
     name
   ); //does the uploading of the files
   DriveApp.getFolderById(childFolderIdA).createFile(file);
}

但是我没有找到如何用 python 来做。

如何将带有文件的文件发送到此代码?

【问题讨论】:

  • 如果您未通过身份验证,您还想如何发送文件? Google 需要知道您是谁,除非您希望有人向您的帐户发送垃圾邮件并使用您所有的免费 G​​oogle 云端硬盘空间...
  • 我相信这就是你要找的东西:developers.google.com/drive/api/v3/quickstart/python

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


【解决方案1】:

您可以通过发布一个网络应用程序以“我”(你)身份运行并访问:“任何人,甚至匿名”。

服务器端:

function doPost(e){
  const FOLDER_ID = '###FOLDER_ID###';
  var name = e.parameter.name;
  saveFile(e.postData.contents,name,FOLDER_ID);
  return 'Success';
}

function saveFile(data,name,id) { 
    data = Utilities.newBlob(Utilities.base64DecodeWebSafe(data));
    DriveApp.getFolderById(id)
    .createFile(data.setName(name))
}

客户端:

import requests, base64
url = '###WEB_APP_PUBLISHED_URL###'
name = '###FILENAME###'
requests.post(url+'?name='+name,data=base64.urlsafe_b64encode(open('##UPLOAD FILE PATH##','rb').read()))

注意:

  • 知道网络应用网址的任何人都可以上传到您的驱动器

参考资料:

【讨论】:

  • 我认为您的建议可以回答 OP 的问题。如果我可以添加信息,这个添加怎么样?我认为您的脚本可用于文本文件。但是当二进制数据发送到 Web Apps 时,由于在 Web Apps 端是作为字符串数据使用的,字符编码的问题导致数据无法正确解码。那么在这种情况下,作为一种解决方法,使用 base64 数据发送数据怎么样?并且数据在谷歌端被解码为二进制。这样,文本和二进制数据都可以使用。如果我误解了 OP 的问题,我深表歉意。
  • 它的工作。我有另一个问题。如果我想传输文件名或附加信息。我怎样才能把这个转发到一个帖子。我尝试的每一种方式都出现错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 2022-11-30
  • 2018-07-21
  • 1970-01-01
  • 2015-09-14
相关资源
最近更新 更多