首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将文件传递到Google Drive API (MediaFileUpload)而不将其保存到磁盘

如何将文件传递到Google Drive API (MediaFileUpload)而不将其保存到磁盘
EN

Stack Overflow用户
提问于 2021-11-18 13:35:54
回答 2查看 97关注 0票数 0

我们有一个网站,前端是React,后端是python。我正在尝试创建一个python后端(使用Flask),用户上传文件,python将其上传到Google Drive。我找到了通过API上传文件到Google Drive的代码:

代码语言:javascript
运行
复制
file_metadata = {
    'name': filename,
    'parents': [folder_id]
}
media = MediaFileUpload(uploaded_file,
                        mimetype='application/msword',
                        resumable=True)
file = service.files().create(body=file_metadata,
                              media_body=media,
                              fields='id').execute()

此代码适用于uploaded_file是磁盘上的路径的情况。然而,我想上传文件到谷歌,而不必先将其保存到磁盘(因为它将占用空间,我们将不得不删除它)。我尝试直接传递文件,因为我从Flask请求对象中获得了它。

代码语言:javascript
运行
复制
uploaded_file = request.files['file']

然后我得到消息"expected str,bytes or os.PathLike object,not str“。我试过了

代码语言:javascript
运行
复制
uploaded_file = request.files['file'].read()

来获取以字节为单位的文件。然后我得到消息"'utf-8‘编解码器无法解码0xd0位置的字节:无效的继续字节“。据我所知,这意味着编码不是'utf-8‘,而是其他编码,但我们不能事先知道用户上传的文件将采用什么编码,我也找不到找到它的方法。除了将文件保存到磁盘并在上传到Google drive后明确删除之外,还有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-18 13:45:28

您可以使用googleapiclient.http中的MediaIoBaseUpload

代码语言:javascript
运行
复制
from googleapiclient.http import MediaIoBaseUpload
import io


f = io.BytesIO(b'mybytestring')
MediaIoBaseUpload(f, mimetype='application/msword')
票数 0
EN

Stack Overflow用户

发布于 2021-11-18 13:47:05

您可以使用io缓冲区来保存上传的文件,而无需将其写入磁盘。请参见下面的示例。

代码语言:javascript
运行
复制
import io
uploaded_file: FileStorage = request.files['file']
buffer = io.BytesIO()
buffer.name = uploaded_file.filename
uploaded_file.save(buffer)
media = MediaFileUpload(buffer,
                        mimetype='application/msword',
                        resumable=True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70020831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档