使用Google Drive API我可以使用files.update()
方法更新任何可写文件的属性:
import datetime
data = {'modifiedTime': datetime.datetime.utcnow().isoformat() + 'Z'}
drive_service.files().update(fileId=file_id, body=data, fields='id').execute()
假设我在网络上的某处发布了PNG图片:'image':'http://pngimg.com/uploads/eagle/eagle_PNG1228.png'
或保存在本地驱动器"/Users/username/Downloads/my_image.png"
上的png文件。
如何将已发布在网页上的PNG文件或保存在本地驱动器上的PNG文件设置为存储在Google云端硬盘上的文件的缩略图?
这是我到目前为止所尝试的内容。
保存在我的本地驱动器上的source.png
文件后,我继续使用此代码将其编码为base64_encoded.png
文件(我不确定我是否正确执行):
import base64
src = '/source.png'
dst = '/base64_encoded.png'
image = open(src, 'rb')
image_read = image.read()
encodestring = base64.encodestring(image_read)
image_result = open(dst, 'wb')
image_result.write(encodestring)
我将此base64_encoded.png
文件上传到Google云端硬盘。我复制了其网址:https://drive.google.com/open?id=1234567890abcdefgh
。
我将此网址设置为Google云端硬盘上文件的thumbnail
元数据属性:
metadata = { "contentHints": { 'thumbnail':{'image':'https://drive.google.com/open?id=1234567890abcdefgh'}}}
result = drive_service.files().update(fileId='abcdefgh1234567', body=metadata).execute()
但我收到错误:...returned "Invalid value for ByteString: https://drive.google.com/open?id=1234567">
错误在哪里?
答案 0 :(得分:2)
这个示例脚本怎么样?
contentHints.thumbnail.image
是URL安全的Base64编码图像。因此,您要用作新缩略图的图像数据必须转换为URL安全的Base64编码数据。为此,它在Python上使用base64.urlsafe_b64encode()
。
更新缩略图有一些限制。请查看https://developers.google.com/drive/v3/web/file#uploading_thumbnails上的详细信息。
我使用zip文件作为样本。 Zip文件在Google云端硬盘上没有缩略图。当使用drive.files.get
确认时,hasThumbnail
为false。所以这可以用。虽然我将此脚本用于Google文档和图片,但更新的图片并未反映给他们。这可能会触及限制。缩略图被赋予zip文件时,hasThumbnail
变为真。在我的环境中,在第一次更新时,更新有时会失败。但当时,第二次更新工作正常。我不知道原因。对不起。
import base64 # Use this
with open("./sample.png", "rb") as f:
metadata = {
"contentHints": {
"thumbnail": {
"image": base64.urlsafe_b64encode(f.read()).decode('utf8'),
"mimeType": "image/png",
}
}
}
res = drive_service.files().update(
body=metadata,
fileId="### file ID ###"
).execute()
print(res)
如果这对你没用,我很抱歉。
答案 1 :(得分:0)
您的网址不符合网址安全的Base64编码图片(请参阅RFC 4648 section 5)
尝试使用任何localhost然后上传您的图像,然后使用缩略图的路径。我找到了jsfiddle,如果这是URL安全的Base64编码,您可以在其中试用您的网址。
测试了您的驱动器网址:
经过测试的 www.localhost:8080/image/dog.png
网址
希望这有帮助。