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 requests
和 import json
。
注:
- 在这种情况下,如果您没有在共享驱动器上写入文件的权限,则会发生错误。请注意这一点。
参考:
我正在测试我的脚本,该脚本使用 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 requests
和import json
。
注:
- 在这种情况下,如果您没有在共享驱动器上写入文件的权限,则会发生错误。请注意这一点。