【发布时间】:2021-12-09 12:59:47
【问题描述】:
我需要从 Google Cloud Storage 上的存储桶中打开一个 .xlsx 文件,问题是我在 /api/ficha-excel 处得到 :FileNotFoundError
[Errno 2] 没有这样的文件或目录:'ficha.xlsx'
这些是我存储桶中的设置。
UPLOAD_ROOT = 'reportes/'
MEDIA_ROOT = 'reportes'
这些是路由bucket/reportes/ficha.xlsx
这是我的get函数的代码:
directorio = FileSystemStorage("/reportes").base_location
os.makedirs(directorio, exist_ok=True)
# read
print("Directorios: ", directorio)
plantilla_excel = openpyxl.load_workbook(f"{directorio}/ficha.xlsx")
print(plantilla_excel.sheetnames)
currentSheet = plantilla_excel['Hoja1']
print(currentSheet['A5'].value)
路径有什么问题?我想不通。
【问题讨论】:
-
根据documentation,FileSystemStorage 类的 location 参数需要有一个指向保存文件的目录的绝对路径。该位置默认为您的 MEDIA_ROOT 设置的值。我建议您尝试使用绝对路径设置 MEDIA_ROOT 和位置,例如。 'gs://mybucket/folder/file.xlsx'。还为读取/查看存储对象提供适当的权限。
-
@PriyashreeBhadra 使用 default_storage 怎么样?我还需要将 media_root 定义为绝对路径吗?
-
如何编辑到绝对路径?这是我的设置: DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage' GS_PROJECT_ID = 'green-carrier-xxxxxx' GS_BUCKET_NAME = 'inversiones-admision' UPLOAD_ROOT = 'reportes/' MEDIA_ROOT = 'reportes' MEDIA_URL = 'storage.googleapis.com{ }/'.format(GS_BUCKET_NAME) ,据我所知,我必须把它放在视图上? plantilla_excel = openpyxl.load_workbook("//inversiones-admision/ficha.xlsx")
-
我认为this 应该回答你的问题。尝试让我知道它是否有效。
-
我已经这样做了,我可以使用 django-storages 和 default_storage 完善我的存储桶上打开的文件,问题是我需要使用 openpyxl 读取文件并且我无法提取或获取路径打开的文件。
标签: django excel django-rest-framework google-cloud-storage openpyxl