语境无法从蟒-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! –