0

서블릿에 자바 스크립트 단어 addin을 통해 2013 docx라는 단어를 보냅니다. 그러나 스트림을 파일에 쓰고 나면 pdf/word (압축 형식) 파일이 손상되어 크기가 다릅니다. 그것은 더 많은 바이트를 가지고 있습니다. js 출력에서 ​​slice.value.size는 말해줍니다 (이것은 hdd에 파일을 저장할 때 같은 크기를 보여줍니다). FormData와 Apache Fileupload를 사용하면 동일한 결과를 얻을 수 있습니다. 어떤 도움을 주시면 감사하겠습니다.XHR을 통해 파일을 업로드하고 파일에 스트림을 작성하십시오.

JS :

function sendDoc(){ 
    Office.context.document.getFileAsync("pdf", 
     function (result) { 
      if (result.status == Office.AsyncResultStatus.Succeeded) { 
       var myFile = result.value; 
       myFile.getSliceAsync(0, function (slice) { 
        if (slice.status == Office.AsyncResultStatus.Succeeded) { 
         showMessage("sending (" + slice.value.size + " bytes)"); 

         var request = new XMLHttpRequest(); 
         request.onreadystatechange = function() { 
          if (request.readyState == 4) { 
           myFile.closeAsync(function (r) { 
            if (r.status == Office.AsyncResultStatus.Succeeded) { 
             showMessage("sent"); 
            }else { 
             showMessage("error"); 
            } 
           }); 
          } 
         } 
         request.open("POST", "myserver"); 
         request.send(slice.value.data); 

        }else { 
         showMessage(slice.status); 
        } 
       }); 
      } else { 
       showMessage(result.status); 
      } 
     }); 
} 

서블릿 :

public void doPost(HttpServletRequest request, HttpServletResponse response) { 
     try { 
      InputStream in = request.getInputStream(); 
      FileOutputStream out = new FileOutputStream("c:/temp/test.pdf"); 
      IOUtils.copy(in, out); 
      in.close(); 
      out.close(); 

     } catch (Exception e) { 
      log.error(e.getMessage()); 
     } 
    } 

답변

0

그것을 자신을 해결했다. 유니 코드 번호를 문자로 변환하고 BASE64를 인코딩해야했습니다.

var fileContent = new String(); 
var docdata = slice.value.data; 
for (var j = 0; j < docdata.length; j++) { 
    fileContent += String.fromCharCode(docdata[j]); 
} 
var data = btoa(fileContent); 
request.send(data); 
관련 문제