由于某些原因,我通过新的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应用商店应用程序通过OneNote API上传实际的二进制文档?
发布于 2014-04-16 07:36:59
该WinStore code sample包含一个上传附件的工作示例(方法: CreatePageWithAttachedFile)。我能想到的上述代码片段和代码示例之间的细微差别是,代码示例上载了一个pdf文件(而不是文档),并且示例使用了StreamContent (而上面的代码片段使用了ByteArrayContent)。我下载了代码示例,并在本地对其进行了修改,以使用文档文件和ByteArrayContent。我成功上传并查看了附件。使用以下代码从给定流中获取字节数组:
using (BinaryReader br = new BinaryReader(stream))
{
byte[] b = br.ReadBytes(Convert.ToInt32(s.Length));
}其余的代码看起来与上面的代码片段非常相似,总体上对我来说工作得很成功。
在对问题进行故障排除时,还需要考虑以下几点:
发布于 2014-04-17 05:13:07
因此,问题在于(奇怪的)在未显示的HTML内容中发送的标记中添加了meta Content Type。文档提到了在object标记中添加type=mime类型,由于WinStore示例没有这样做(它只将mime类型添加到MediaTypeHeaderValue中),因此我删除了它,它工作得很好。
只需将其更改为如下所示:
<object data-attachment=\"" + fileName + "\" data=\"name:" + attachmentPartName + "\" />感谢您用示例代码为我指明了正确的方向!
https://stackoverflow.com/questions/23094058
复制相似问题