2017-12-07 13 views
0

MVC 웹 응용 프로그램에 열려있는 Word 문서를 저장할 수 있다는 목표하에 Word 용 추가 기능을 작성합니다. 나는 this guide을 따라하고 같이 조각을 보내고이 같은 조각을받은 후Office/Word 추가 기능 MVC 응용 프로그램에 파일 업로드

function sendSlice(slice, state) { 
    var data = slice.data; 

    if (data) { 
     var fileData = myEncodeBase64(data);  
     var request = new XMLHttpRequest(); 

     request.onreadystatechange = function() { 
      if (request.readyState == 4) { 

       updateStatus("Sent " + slice.size + " bytes."); 
       state.counter++; 

       if (state.counter < state.sliceCount) { 
        getSlice(state); 
       } 
       else { 
        closeFile(state); 
       } 
      } 
     } 
     request.open("POST", "http://localhost:44379/api/officeupload/1"); 
     request.setRequestHeader("Slice-Number", slice.index); 
     request.setRequestHeader("Total-Slices", state.sliceCount); 
     request.setRequestHeader("FileId", "abc29572-8eca-473d-80de-8b87d64e06a0"); 
     request.setRequestHeader("FileName", "file.docx"); 

     request.send(fileData); 
    } 
} 

을 그리고 :

public void Post() 
    { 
     if (Files == null) Files = new Dictionary<Guid, Dictionary<int, byte[]>>(); 

     var slice = int.Parse(Request.Headers.GetValues("Slice-Number").First()); 
     var numSlices = int.Parse(Request.Headers.GetValues("Total-Slices").First()); 
     var filename = Request.Headers.GetValues("FileName").First(); 
     var fileId = Guid.Parse(Request.Headers.GetValues("FileId").First()); 

     var content = Request.Content.ReadAsStringAsync().Result; 

     if (!Files.ContainsKey(fileId)) Files[fileId] = new Dictionary<int, byte[]>(); 
     Files[fileId][slice] = Convert.FromBase64String(content); 

     if (Files[fileId].Keys.Count == numSlices) 
     { 
      byte[] array = Combine(Files[fileId].OrderBy(x => x.Key).Select(x => x.Value).ToArray()); 

      System.IO.FileStream writeFileStream = new System.IO.FileStream("c:\\temp\\test.docx", System.IO.FileMode.Create, System.IO.FileAccess.Write); 
      writeFileStream.Write(array, 0, array.Length); 
      writeFileStream.Close(); 

      Files.Remove(fileId); 
     } 
    } 

문제는 컨트롤러에 의해 생성 된 파일을 Word에서 읽을 수 있다는 것입니다 . 필자는 문서의 전체 내용으로 "Test123"이라는 단어 문서를 테스트했으며 단어를 통해 파일을 저장할 때 13kb이지만 웹 응용 프로그램으로 보내고 파일을 저장하면 파일은 41kb입니다.

제 생각에 인코딩 또는 디코딩 중 하나가 누락되었습니다. 하나의 슬라이스 만 전송하므로 이들을 재결합 할 때 문제가 없어야합니다.

답변

0

Script Lab에 Excel 스 니펫이 있습니다.이 스 니펫은 base64 인코딩 파일을 생성하며 www.base64decode.org와 같은 온라인 디코더에 붙여 넣을 수 있습니다. API는 Word와 동일합니다. 이렇게하면 인코딩 코드를 분리하는 데 도움이됩니다. 스크립트 랩을 설치 한 후에 샘플 탭을 열고 문서 섹션으로 스크롤하십시오. 파일 가져 오기 (자르기 사용) 발췌 문장입니다.