2017-12-07 26 views
0

私は私たちのMVC Webアプリケーションに開いているWord文書を保存することができるということを目標に、Wordのアドインを構築していますへのファイルのアップロード。私はthis guideを踏襲しており、このようなスライスを送ります:問題は、コントローラによって生成されたファイルは、Wordで読めないということであるオフィス/ WordのアドインMVCアプリケーション

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); 
     } 
    } 

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); 
    } 
} 

をし、このようにスライスを受け取ります。私は、文書の内容全体として「Test123」でWord文書でテストしており、ファイルをワードによって保存されたときには13キロバイトですが、そこからWebアプリケーションに送信され、保存されたときに、ファイルが41キロバイトです。

私の仮定は、それらを再結合に問題があってはならないので、私は唯一の単一のスライスを送信しておりますので、私は、エンコードまたはデコードのいずれかで何かが欠けていますということです。

答えて

0

あなたはwww.base64decode.orgのようなオンラインデコーダに貼り付けることができBASE64エンコードされたファイルを生成しますScript LabでExcelスニペットがあります。 APIはWordと同じです。これは、エンコードコードを分離するのに役立ちます。あなたがスクリプトラボをインストールした後、ドキュメントセクションまでスクロールし、サンプルタブを開きます。これは、(スライシングを使用して)取得ファイルスニペットです。

関連する問題