如何使用OneDrive for Business中的addFileAttachmentAsync添加文件

时间:2019-04-09 09:09:29

标签: outlook-addin office-js outlook-web-addins

我想使用Office.js / Outlook方法addFileAttachmentAsync将OneDrive中的文件添加到新的合成邮件中。该文件由另一个Office365用户与我共享。如果我使用Onedrive界面创建链接并添加文本“&download = 1”,则所有操作都像一个超级按钮。

如果我使用Graph createLink创建链接,我们确实会获得一个URI,并且该URI似乎可以正常工作,但上传完成后会立即产生错误。

如何使用可工作的Graph生成URI?

预先感谢您的努力!

Wilco

手工制作的URI如下所示:

https://softmakersbv-my.sharepoint.com/:i:/g/personal/tim_softmakers_nl/EWu4nf4kBMBKv4xrfGe91JABLpUSye9VgVJgxhlapA2eiQ?e=1KWtPD

和Graph生成的URI如下所示:

https://softmakersbv-my.sharepoint.com/personal/tim_softmakers_nl/Documents/TimDocuments-00003/2019/04/19.04.00188.png


即使我们确保链接可以公共访问,也不能将其用于addFileAttachmentAsync。通过以下命令使用Graph Createlink:

https://graph.microsoft.com/v1.0/me/drive/items/01ATENY5KYPNW2NH64F5CJEWPK4DYIHSX7/createLink

,其正文为{“ type”:“ edit”,“ scope”:“ anonymous”},并提供了webUrl:

https://softmakersbv-my.sharepoint.com/:i:/g/personal/tim_softmakers_nl/EVh7baaf3C9Eklnq4PCDyv8BbjtwqSi-a92qYg0EYEE0kA

如果我使用OneDrive界面创建相同的链接,结果如下:

https://softmakersbv-my.sharepoint.com/:i:/g/personal/tim_softmakers_nl/EVh7baaf3C9Eklnq4PCDyv8BbjtwqSi-a92qYg0EYEE0kA?e=fCWoUK

第二个URL有效。唯一的不同是最后一部分?e = fCWoUK。如何从Graph获取所需的最后一部分?


结果图片

小网址的结果(通过图形返回):https://softmakersbv-my.sharepoint.com/:i:/g/personal/wilcotroost_softmakers_nl/EaNXPGdDsBBDo_uVZPK2c0EB6gHaA3ASNj5ly0QyzKGgzQ?e=G30d5L

较长网址(手工制作)的结果:https://softmakersbv-my.sharepoint.com/:i:/g/personal/wilcotroost_softmakers_nl/EUuTYN05rlNNpYn0IG7FMfkBnnCu6yUUdbj72YcsTc5Wow?e=jWU5Mw

请求的代码示例

          let _fileName = 'Picos de Europa'

          // graph url ..v1.0/me/drive/items/01ATENY5KYPNW2NH64F5CJEWPK4DYIHSX7/createLink  {"type": "edit", "scope": "anonymous"}
          //let _fileUrl = 'https://softmakersbv-my.sharepoint.com/:i:/g/personal/tim_softmakers_nl/EVh7baaf3C9Eklnq4PCDyv8BbjtwqSi-a92qYg0EYEE0kA' 

          // handmade url (create link from the onedrive interface)
          let _fileUrl = 'https://softmakersbv-my.sharepoint.com/:i:/g/personal/tim_softmakers_nl/EVh7baaf3C9Eklnq4PCDyv8BbjtwqSi-a92qYg0EYEE0kA?e=fCWoUK'            

          Office.context.mailbox.item.addFileAttachmentAsync(_fileUrl + '&download=1', _fileName, {}, (result) => {
            console.log(result)
          }) 

仅手工链接Url有效。我的问题是我想用Graph API创建一个链接。

2 个答案:

答案 0 :(得分:2)

您想为addFileAttachmentAsync API使用的URI应该可以公开访问。

要进行测试,如果打开全新的私有浏览器或隐身模式,则无需登录即可访问URI。

在这种情况下,第一个URI(附加了&download = 1)是可公开访问的,而第二个URI无法公开访问。

请检查您的图形API以生成可公开访问的URI。

答案 1 :(得分:1)

事实证明,此问题的解决方案比预期的要简单。显然,Graph API提供的URL并不能解决问题。 Outlook加载项团队对此很清楚。剩下的最大问题是;如何从Graph获取正确的URL。

正确的答案是;您不需要像createLink这样的功能!如果仅使用OneDrive文件项的ID来获取属性(例如https://graph.microsoft.com/v1.0//me/drive/items/01ATEIIBJLT455YK5FLISCBD37Y7SWE),则会发现一个包含正确URL的属性@ microsoft.graph.downloadUrl。该URL在一个小时的时间内有效,并且可以与Office.js中的addFileAttachmentAsync一起成功使用

感谢您为我的问题投入的时间。

Wilco。