【问题标题】:How can I download an image from an AWS bucket to generate a PDF from, using FPDF?如何使用 FPDF 从 AWS 存储桶下载图像以生成 PDF?
【发布时间】:2022-03-25 17:35:45
【问题描述】:

我有一个像这样的 FPDF 对象:

import fpdf

pdf = FPDF()

#Cover page
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(175, 10, 'TEST - report',0,1,'C')

我正在尝试直接使用来自 AWS S3 存储桶的 .png 文件来生成 PDF,如下所示:

pdf.image(bucket_folder_name + '/' + file_name + '.png')

不幸的是,我得到了错误:

[Errno 2] No such file or directory

有什么问题?

【问题讨论】:

  • 先下载文件再指定路径
  • 重点是我想直接从S3桶上传文件
  • 不能,需要先下载
  • S3 存储桶不是您的本地文件夹,您可以直接上传它 - 先下载对象然后上传

标签: python amazon-ec2 amazon-emr amazon-s3


【解决方案1】:

要使用 S3 存储桶中的文件,您需要先下载它们 - S3 存储桶不像本地文件夹,您可以提供路径并使用文件。

首先使用download_file下载文件,然后将文件名传递给pdf.image(...)

download_file 方法有以下参数:

s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME')

类似这样的:

import boto3
s3 = boto3.client('s3')
...

filename_with_extension = file_name + '.png';
outputPath = '/tmp/' + filename_with_extension;

s3.download_file(bucket_folder_name, filename_with_extension, outputPath)

pdf.image(outputPath)

重要提示:您必须写入 /tmp 目录,因为这是 AWS 允许您写入(和读取)的唯一可用文件系统。

任何其他路径都将导致 [Errno 13] Permission denied 错误以表明这一点。

docs

您可以为每个 Lambda 函数配置 512MB 到 10,240MB 之间的临时存储,增量为 1MB。临时存储在每个函数的 /tmp 目录中可用。

【讨论】:

  • 好的,我做到了,响应看起来不错,但我仍然收到错误:[Errno 2] No such file or directory, when I run pdf.image("test.png"), where “test.png”是我的原始文件名。有任何想法吗? :(
  • 你保存文件了吗?
  • 让我添加一个完整的答案,因为我昨天在手机上输入了这个 - 一秒钟
  • 万岁,它有效!你让我很开心,非常感谢:)
  • 非常欢迎,享受使用 AWS :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
  • 2016-10-21
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多