我試圖在AWS Lambda中使用python庫PyPDF2打開一個PDF。 但它給了我拒絕訪問的權利
代碼from PyPDF2 import PdfFileReader
pdf = PdfFileReader(open('S3 FILE URL'/span>, 'rb'/span>)
if pdf.isEncrypted:
pdf.decrypt('')
width = int(pdf.getPage(0).mediaBox.getWidth()
height = int(pdf.getPage(0) .mediaBox.getHeight()
我的桶的權限
阻止所有公眾訪問。
關閉
阻止公眾對桶和物件的訪問,通過新的訪問控制串列(ACL)授予的訪問。
關閉
阻止公眾訪問水箱和通過任何訪問控制串列(ACL)授予的物件。
關閉
阻止公眾訪問桶和通過新的公共桶或接入點策略授予的物件
關閉
阻止通過和公共水桶和物件的跨賬戶訪問任何公共水桶或存取點策略
關閉
uj5u.com熱心網友回復:
我相信你必須在AWS控制臺中對你的S3桶的這一部分進行修改。我相信這應該可以解決你的問題。
uj5u.com熱心網友回復:
你試圖使用open()來獲取一個URL,這就跳過了一個步驟。open()只能操作本地檔案系統中的檔案 - https://docs.python.org/3/library/functions.html#open
你需要使用 urllib3/etc.從 S3 首先獲取檔案(假設該桶也是可公開訪問的,正如 Manish 指出的)。
urllib3 的使用建議。使用 urllib3 下載檔案的最佳方法是什么
因此將兩者結合起來:
pdf = PdfFileReader(open('S3 FILE URL'/span>, 'rb'/span>)
變成了(類似于)
import urllib3
def fetch_file(url, save_as)。
http = urllib3.PoolManager()
r = http.request('GET', url, preload_content=False)
with open(save_as, 'wb') as out:
while True:
data = r.read(chunk_size)
if not data:
break not data.
out.write(data)
r.release_conn()
if __name__ == "__main__"/span>:
pdf_filename = "my_pdf_from_s3.pdf".
fetch_file(s3_file_url, pdf_filename)
pdf = PdfFileReader(open(pdf_filename, 'rb'/span>)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/319181.html
標籤:

