首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理存储在云(S3或Spaces)上的文件

处理存储在云(S3或Spaces)上的文件
EN

Stack Overflow用户
提问于 2019-05-17 20:18:06
回答 1查看 451关注 0票数 0

我已经设置了一个脚本来处理用户上传的excel文件。当文件存储在本地磁盘上时,脚本工作得很好。

代码语言:javascript
复制
from openpyxl import load_workbook

wb = load_workbook("file_path.xlsx")  # Load workbook from disk works fine
ws = wb.worksheets[0]

然后我设置了django-storages,允许用户上传的文件存储在数字海洋空间中。

我现在的问题是如何访问和处理云存储的文件。根据记录,如果我将文件URL传递给load_workbook,它将失败,并显示错误No such file or directory: file_url

是否必须使用requests下载文件,然后将其作为本地文件进行处理?感觉效率低下?我有什么选择?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-17 20:45:43

您可以获取文件的字节内容,将其包装在ContentFile中,并将其传递给openpyxl。假设您的模型为FileContainer,字段名称为file

代码语言:javascript
复制
from django.core.files.base import ContentFile
from openpyxl import load_workbook

fc = FileContainer.objects.first()
bytefile = fc.file.read()
wb = load_workbook(ContentFile(bytefile))
ws = wb.worksheets[0]

我用S3检查过了,它工作得很好。

如果你想在本地保存文件,你可以尝试这样做:

代码语言:javascript
复制
from django.core.files.base import ContentFile
from django.core.files.storage import FileSystemStorage
from openpyxl import load_workbook

fc = FileContainer.objects.first()
local_storage = FileSystemStorage()

bytefile = fc.file.read()
newfile = ContentFile(bytefile)

relative_path = local_storage.save(fc.file.name, newfile)

wb = load_workbook(local_storage.path(relative_path))
ws = wb.worksheets[0]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56186282

复制
相关文章

相似问题

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