PyDrive:上传后立即生成可共享的 link 文件?

PyDrive: Generating a sharable link to a file immediately after upload?

我正在测试我的脚本,该脚本使用 PyDrive 上传到共享驱动器内的文件夹。事实上,文件上传没有问题,但是,可共享的 link 不起作用。那时我的程序命中了我的异常块。我没有收到任何错误。

file1 = drive.CreateFile(metadata={"title": "{0}_Index1.html".format(formatDate), 'mimeType':'text/html', "parents": [{ "kind": 'drive#fileLink', 'myteamDriveId': sharedDriveId, "id": myIdGoesHere }]})
        file1.SetContentFile(fileName)  # Set content of the file from given string.
        file1.Upload(param={'supportsTeamDrives': True})

        **# The script prints all output to here no issues. From the code below, it stops working.**

        permission = file1.InsertPermission({
            'type': 'anyone',
            'value': 'anyone',
            'role': 'reader'})
   
        # SHARABLE LINK
        link = file1['alternateLink']

有什么建议吗?

更新:做了一些挖掘,这是错误:

<HttpError 404 when requesting https://www.googleapis.co... (continues... it's a json file, contents posted below) 

returned "File not found: fileIDhere (continues.. some sort of file id?)

最后,这是错误中 link 的 json 输出:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Login Required",
    "locationType": "header",
    "location": "Authorization"
   }
  ],
  "code": 401,
  "message": "Login Required"
 }
}

根据您的情况,我了解到您的文件已放入共享云端硬盘。在这种情况下,为了创建权限,需要在共享驱动器中创建文件。为此,需要在请求“权限:插入”的查询参数中包含 supportsAllDrives=True。但是当我看到pydrive的脚本InsertPermission()时,permission = self.auth.service.permissions().insert(fileId=file_id, body=new_permission).execute(http=self.http)是用来请求的。 Ref 在这种情况下,此请求不能用于共享云端硬盘中的文件。我认为通过这个,发生了像File not found这样的错误。

为了避免这个问题,在当前阶段,似乎需要使用Drive API创建请求。修改后的脚本如下

修改后的脚本:

file1 = drive.CreateFile(metadata={"title": "{0}_Index1.html".format(formatDate), 'mimeType': 'text/html', "parents": [{"kind": 'drive#fileLink', 'myteamDriveId': sharedDriveId, "id": myIdGoesHere}]})
file1.SetContentFile(fileName)  # Set content of the file from given string.
file1.Upload(param={'supportsTeamDrives': True})

access_token = gauth.credentials.access_token # gauth is from drive = GoogleDrive(gauth) Please modify this for your actual script.
file_id = file1['id']
url = 'https://www.googleapis.com/drive/v3/files/' + file_id + '/permissions?supportsAllDrives=true'
headers = {'Authorization': 'Bearer ' + access_token, 'Content-Type': 'application/json'}
payload = {'type': 'anyone', 'value': 'anyone', 'role': 'reader'}
res = requests.post(url, data=json.dumps(payload), headers=headers)

# SHARABLE LINK
link = file1['alternateLink']
  • 在这种情况下,使用 import requestsimport json

注:

  • 在这种情况下,如果您没有在共享驱动器上写入文件的权限,则会发生错误。请注意这一点。

参考: