2

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

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

这是 C# 的简化版本

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 Store 应用程序通过 OneNote API 上传实际的二进制文档?

4

2 回答 2

3

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

   using (BinaryReader br = new BinaryReader(stream))
   {
       byte[] b = br.ReadBytes(Convert.ToInt32(s.Length)); 
   }

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

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

  • 首先验证附件文件本身没有损坏。例如,它可以在没有 OneNote API 的情况下打开吗?
  • 验证 API 返回 201 Http 状态代码,结果页面包含附件图标并允许下载/查看附件。
于 2014-04-15T23:36:59.300 回答
2

因此,问题是(奇怪地)在未显示的 HTML 内容中发送的标记中添加了元内容类型。文档是指在对象标记中添加 type=[mime type] ,并且由于 WinStore 示例没有这样做(它只是将 mime 类型添加到 MediaTypeHeaderValue 我删除了它并且它工作得很好。

只需将其更改为此即可:

<object data-attachment=\"" + fileName + "\" data=\"name:" + attachmentPartName + "\" />

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

于 2014-04-16T21:13:06.937 回答