2014-04-15 2 views
2

어떤 이유로 든 새 REST API를 통해 OneNote에 업로드 한 문서가 OneNote에서 볼 때 손상되었습니다. 다른 모든 것은 괜찮지 만 파일 (예 : Word 문서)은 클릭 할 수 없으며 열려고하면 손상된 것으로 표시됩니다.새로운 REST API를 통해 OneNote에 문서 올리기

이것은 바이트 배열이나 메모리에 문제가있을 때와 비슷하지만 그렇게 보이지 않는 것과 비슷합니다. 기본적으로 동일한 프로세스를 사용하여 파일 바이트를 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; 
} 

사람이 어떤 생각을 가지고 또는 작업 코드는 윈도우 스토어 앱을 통해 OneNote의 API를 통해 실제 바이너리 문서를 업로드합니까?

답변

3

WinStore code sample에는 첨부 파일을 업로드하는 방법의 실제 예 (메서드 : CreatePageWithAttachedFile)가 들어 있습니다. 위의 코드 조각과 코드 샘플 사이의 약간의 차이점은 코드 샘플은 문서 대신 pdf 파일을 업로드하고 샘플은 StreamContent를 사용한다는 것입니다 (위의 코드 조각은 ByteArrayContent를 사용함). 코드 샘플을 다운로드하고 로컬로 수정하여 문서 파일과 ByteArrayContent를 사용했습니다. 첨부 파일을 업로드하고 성공적으로 볼 수있었습니다.

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

코드의 나머지는 위의 코드에 꽤 비슷하고 전반적인 나를 위해 성공적으로 일을 다음 주어진 스트림에서 바이트 배열을 얻기 위해 다음 사용합니다.

  • 자체가 처음부터 손상되지 첨부 파일을 확인 : 여기

    이 문제를 해결하면서 고려해야 할 몇 가지 더 것들입니다. 예를 들어 OneNote API를 사용하지 않고도 열 수 있습니까?
  • API가 201 Http Status 코드를 반환했는지 확인하고 결과 페이지에 첨부 파일 아이콘이 포함되어 있으며 첨부 파일을 다운로드하거나 볼 수 있습니다.
2

그래서 이상하게도 HTML 콘텐츠에 표시되지 않은 메타 콘텐츠 유형이 추가되었습니다 (표시되지 않았습니다). 문서는 object 태그에 type = [mime type]을 추가하는 것을 가리키며, WinStore 예제는 MIME 타입을 MediaTypeHeaderValue에 추가하기 만하면 제거하고 완벽하게 작동합니다. 이에 변화가 일 :

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

감사를 샘플 코드를 올바른 방향으로 날을 가리키는 위해

+1

다행 당신이 그것을 작동하지만 type 속성은 선택 사항이며 우리가 테스트 한 가지고 그것은 작동합니다!.. type 속성의 유무에 관계없이 –

관련 문제