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