首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过新的REST API将文档发布到OneNote

通过新的REST API将文档发布到OneNote
EN

Stack Overflow用户
提问于 2014-04-16 04:38:26
回答 2查看 556关注 0票数 2

由于某些原因,我通过新的REST API上传到OneNote的任何文档在从OneNote查看时都会损坏。其他一切都很好,但文件(例如Word文档)无法单击,如果您尝试打开它,它会显示为损坏。

这类似于字节数组或其在内存中出现问题时可能发生的情况,但情况似乎并非如此。我使用基本上相同的过程将文件字节上传到SharePoint、OneDrive等。只有到了OneNote,文件才看起来损坏。

以下是C#的简化版本

代码语言:javascript
复制
HttpRequestMessage createMessage = null;
HttpResponseMessage response = null;

using (var streamContent = new ByteArrayContent(fileBytes))
{
    streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
    streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
    streamContent.Headers.ContentDisposition.Name = fileName;

    createMessage = new HttpRequestMessage(HttpMethod.Post, authorizationUrl)
      {
          Content = new MultipartFormDataContent
            {
                { 
                new StringContent(simpleHtml, 
                System.Text.Encoding.UTF8, "text/html"), "Presentation"
                },

              {streamContent}
            }
      };

    response = await client.SendAsync(createMessage);

    var stream = await response.Content.ReadAsStreamAsync();

    successful = response.IsSuccessStatusCode;
}

有没有人有任何想法或工作代码,通过Windows应用商店应用程序通过OneNote API上传实际的二进制文档?

EN

回答 2

Stack Overflow用户

发布于 2014-04-16 07:36:59

WinStore code sample包含一个上传附件的工作示例(方法: CreatePageWithAttachedFile)。我能想到的上述代码片段和代码示例之间的细微差别是,代码示例上载了一个pdf文件(而不是文档),并且示例使用了StreamContent (而上面的代码片段使用了ByteArrayContent)。我下载了代码示例,并在本地对其进行了修改,以使用文档文件和ByteArrayContent。我成功上传并查看了附件。使用以下代码从给定流中获取字节数组:

代码语言:javascript
复制
   using (BinaryReader br = new BinaryReader(stream))
   {
       byte[] b = br.ReadBytes(Convert.ToInt32(s.Length)); 
   }

其余的代码看起来与上面的代码片段非常相似,总体上对我来说工作得很成功。

在对问题进行故障排除时,还需要考虑以下几点:

  • 首先验证附件文件本身是否未损坏。例如,是否可以在没有OneNote API的情况下打开它?
  • 验证该API返回了201 Http状态代码,结果页面包含附件图标,并允许下载/查看附加文件。
票数 3
EN

Stack Overflow用户

发布于 2014-04-17 05:13:07

因此,问题在于(奇怪的)在未显示的HTML内容中发送的标记中添加了meta Content Type。文档提到了在object标记中添加type=mime类型,由于WinStore示例没有这样做(它只将mime类型添加到MediaTypeHeaderValue中),因此我删除了它,它工作得很好。

只需将其更改为如下所示:

代码语言:javascript
复制
<object data-attachment=\"" + fileName + "\" data=\"name:" + attachmentPartName + "\" />

感谢您用示例代码为我指明了正确的方向!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23094058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档