語境無法從蟒-PPTX庫變換展現對象上傳到MS圖形API服務端點
我有使用openpyxl和python-PPTX庫分別以產生工作簿和PPT工具的Python腳本。這些文件需要通過Microsoft Graph API作爲八位字節流直接從虛擬內存上傳。
障礙
所有工作良好的工作簿得益於save_virtual_workbook
方法,它返回一個內存中工作簿;但是我沒有類似的方法,例如我知道的save_virtual_presentation
,所以將Presentation對象放在可以通過io.BytesIO.read()
方法進行流式處理的表單中一直是一個挑戰。
的python.pptx documentation說Presentation.save(file)
作品......
「裏
file
可以是一個文件(字符串)或類似文件的 對象的路徑。」
除了在執行POC時,我沒有保存到本地文件系統的選項,所以我嘗試了使用文件類對象的各種方法。除了下面的嘗試之外,沒有人接近對MS Graph API端點的放入請求。
最近的小姐
在這種情況下,prs
是在以前的代碼,我在這裏沒有列入考慮它是556線的創建演示文稿對象。
<<Omitted code that generates the Workbook and PowerPoint, of which prs is an output>>
headers = {'Authorization' : 'Bearer {0}'.format(access_token),
'Accept' : 'application/json',
'Content-Type' : 'application/octet-stream'}
endpoint_url = 'https://graph.microsoft.com/v1.0/me/drive/items/<<removed id>>:/Test.pptx:/content'
target_stream = io.BytesIO()
prs.save(target_stream)
response = requests.put(url=endpoint_url,
headers=headers,
data=io.BytesIO.read(target_stream),
verify=False,
params=None)
put請求成功,但保存到服務端點的文件是空的pptx shell。我排除了prs
本身是一個空pptx外殼,所以我得出結論target_stream
不是prs
的有效轉換。
摘要
可有人請通過建議如何將演示文稿對象prs
變成東西,我可以插入data=io.BytesIO.read(<<input>>)
併成功上傳到MS圖形API端點幫助我嗎?我會非常感激!
使用'data = target_stream.get_value()'有什麼問題?如果io.BytesIO.read甚至是(沒有聽說過它並且無法在文檔中找到它),那麼不應該有任何外部函數的需要。如果你得到的是一個與開始的'python-pptx'「模板」演示文稿一致的空白演示文稿,我會懷疑你的演示文稿生成代碼,就像在最後打開一個新的演示文稿或其他東西。也許你應該至少寫出一個簡單的幻燈片或其他東西的最小數量。 – scanny
'getvalue()'沒有下劃線就行了。千謝謝@scanny! –