【发布时间】:2017-04-12 14:52:23
【问题描述】:
我正在编写一个 Django 应用程序,我需要为此使用 reportlab 生成 PDF,并将其保存到 FileField。我的问题是我的媒体存储在 S3 中,我不知道如何将这个 pdf 直接保存到 S3。
我正在本地创建 pdf,然后读取它并保存到 s3 中的 FileField,然后删除本地版本,但我想知道是否有更好的解决方案,我可以将文件直接保存到 S3。
这是我现在生成合同的方式:
#temporary folder name to generate contract locally
folder_name = (
'/tmp/'
+ '/contracts/'
+ gig.identifier
)
mkdir_p(folder_name)
address = (
folder_name
+ '/contract_'
+ lang
+ '.pdf'
)
doc = SimpleDocTemplate(
address,
pagesize=A4,
rightMargin=72,
leftMargin=72,
topMargin=120,
bottomMargin=18
)
doc.build(Story,
canvasmaker=LogoCanvas)
local_file = open(address)
pdf_file = File(local_file)
contract = Contract.objects.create(lang=lang, gig=gig)
contract.contract_file.save('contract_'+lang+'.pdf', pdf_file)
contract.save()
#remove temporary folder
shutil.rmtree(folder_name)
return True
合同模型定义如下:
class Contract(models.Model):
gig = models.ForeignKey(Gig, related_name='contracts')
lang = models.CharField(max_length=10, default='')
contract_file = models.FileField(
upload_to=get_contract_path,
blank=True,
null=True,
default=None
)
【问题讨论】:
-
你是怎么解决这个问题的?
-
@DiegoGallegos 我想我没有。我一直在本地编写 PDF,然后如果我没记错就保存它。
标签: python django amazon-web-services amazon-s3 reportlab