无法重命名服务器上的文件,然后通过服务帐户上传到谷歌云端硬盘API



我现在已经通读了几篇文章/docs/问题,每一篇都解决了我问题的一部分,但我似乎无法将它们全部放在一起工作。我使用的是Flask/Python、Google Drive API v3和服务帐户,但我想在Heroku上运行该网站,Heroku已经安装好了。由于Heroku没有文件存储空间,我需要直接将文件上传到谷歌硬盘,这迟早都需要完成

基本上我想做的是:

  • 人们在网站上输入数据并上传文件
  • 然后根据用户的数据对该文件进行重命名(需要支持中文字符/utf8(
  • 然后重命名后的文件使用服务帐户上传到Google Drive

我可以用utf-8字符重命名文件并将其保存在本地,但不知道如何将其上传到谷歌我之前尝试过一种方法,,但我不知道是创建了一个没有内容的文件,还是文件上传正确,我在列出文件/文件夹时确实看到了文件和文件夹(但现在不起作用,因为我认为我现在的尝试完全一样(

我的代码:

def upload_service(file, filename):
file_metadata = {
'name': filename,
'parents': 'Upload'
}
mime = mimetypes.guess_type(file.filename)[0]
media = MediaFileUpload(filename, mimetype=mime)
cloudFile = service.files().create(body=file_metadata, media_body=media).execute()
result = service.files().list().execute()

在这里,file是上传的实际文件,filename是用户键入的输入。所有操作都很好,但对于media = MediaFileUpload(filename, mimetype=mime),我得到了一个FileNotFoundError: [Errno 2] No such file or directory: 'gtmuCfr.jpg'错误,指出不存在名为filenamefile的文件。这适用于文件的原始名称和新名称。

好的,我终于发现了这个问题,并能够修复它(大部分(。

with open(new_name.encode("utf-8"), "wb") as save_file:
file = save_file.write(f.read())
upload_service(file, new_name)

这样做解决了问题,因为file是存储它的int(我想(,但由于它没有filename属性,我需要在函数中使用path/new_name
功能内部的唯一区别是:

file_metadata = {
'name': path,
'parents': 'Upload'
}
mime = mimetypes.guess_type(path)[0]
media = MediaFileUpload(path, mimetype=mime)

其中我需要使用我发送的CCD_ 10作为第二个参数。现在唯一剩下的问题是没有选择上传文件夹/父文件夹进行上传,但我可以在我的驱动器中看到文件(在授予权限后(,并且它们具有正确的内容。

最新更新