如何添加文件并从 OneDrive for Business 同步添加文件附件

Howto add a file with addFileAttachmentAsync from OneDrive for Business

我想使用 Office.js / Outlook 方法 addFileAttachmentAsync 将 OneDrive 中的文件添加到新撰写的邮件中。此文件由另一位 Office365 用户与我共享。如果我使用 Onedrive 界面创建 link 并添加文本“&download=1”,这一切都非常有效。

如果我使用 Graph createLink 创建一个 link,我们确实会得到一个 URI,并且该 URI 似乎有效,但在上传完成后立即生成错误。

如何使用 Graph 生成有效的 URI?

提前感谢您的努力!

威尔科

手工制作的 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


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

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

与以下主体 {"type":"edit","scope":"anonymous"} 交付网络Url:

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

如果我用OneDrive界面创建一样link结果如下:

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

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


结果图片

小url的结果(由图返回):https://softmakersbv-my.sharepoint.com/:i:/g/personal/wilcotroost_softmakers_nl/EaNXPGdDsBBDo_uVZPK2c0EB6gHaA3ASNj5ly0QyzKGgzQ?e=G30d5L

更长的结果url(手工制作):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)
          }) 

只有手工linkUrl作品。我的问题是我喜欢用图形 API 创建一个 link。

您要用于 addFileAttachmentAsync API 的 URI 应该可以公开访问。

为了测试,如果您打开全新的私人浏览器或隐身模式,您应该能够在不登录的情况下访问 URI。

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

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

这个问题的解决方案证明比预期的更简单。很明显,图表 API 给出的 URL 没有切蛋糕。 Outlook Add-Ins 团队对此很清楚。剩下的大问题是;如何从 Graph.

中获得正确的 URL

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

中与 addFileAttachmentAsync 一起成功使用

感谢大家花时间回答我的问题。

威尔科