2017-10-10 17 views
0

语境无法从蟒-PPTX库变换展现对象上传到MS图形API服务端点

我有使用openpyxl和python-PPTX库分别以产生工作簿和PPT工具的Python脚本。这些文件需要通过Microsoft Graph API作为八位字节流直接从虚拟内存上传。

障碍

所有工作良好的工作簿得益于save_virtual_workbook方法,它返回一个内存中工作簿;但是我没有类似的方法,例如我知道的save_virtual_presentation,所以将Presentation对象放在可以通过io.BytesIO.read()方法进行流式处理的表单中一直是一个挑战。

的python.pptx documentationPresentation.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端点帮助我吗?我会非常感激!

+1

使用'data = target_stream.get_value()'有什么问题?如果io.BytesIO.read甚至是(没有听说过它并且无法在文档中找到它),那么不应该有任何外部函数的需要。如果你得到的是一个与开始的'python-pptx'“模板”演示文稿一致的空白演示文稿,我会怀疑你的演示文稿生成代码,就像在最后打开一个新的演示文稿或其他东西。也许你应该至少写出一个简单的幻灯片或其他东西的最小数量。 – scanny

+0

'getvalue()'没有下划线就行了。千谢谢@scanny! –

回答

1

一切看起来都不错,直到您读到BytesIO对象。在拨打put()时,请尝试使用data=target_stream.getvalue()而不是现在拨打read()。这是将BytesIOStringIO对象的内容作为字节获取的常规方式。

+0

这样做。谢谢,scanny! –

相关问题