我有一個docx文件,我想在編輯後返回。我有以下代碼...如何返回MemoryStream docx文件MVC?
object useFile = Server.MapPath("~/Documents/File.docx");
object saveFile = Server.MapPath("~/Documents/savedFile.docx");
MemoryStream newDoc = repo.ChangeFile(useFile, saveFile);
return File(newDoc.GetBuffer().ToArray(), "application/docx", Server.UrlEncode("NewFile.docx"));
該文件似乎不錯,但我收到錯誤消息(「文件被損壞」,另一個聲稱「字中找到不可讀的內容。如果您信任源單擊Yes」 )。有任何想法嗎?提前
感謝
編輯
這是ChangeFile在我的模型......
public MemoryStream ChangeFile(object useFile, object saveFile)
{
byte[] byteArray = File.ReadAllBytes(useFile.ToString());
using (MemoryStream ms = new MemoryStream())
{
ms.Write(byteArray, 0, (int)byteArray.Length);
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(ms, true))
{
string documentText;
using (StreamReader reader = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
{
documentText = reader.ReadToEnd();
}
documentText = documentText.Replace("##date##", DateTime.Today.ToShortDateString());
using (StreamWriter writer = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
{
writer.Write(documentText);
}
}
File.WriteAllBytes(saveFile.ToString(), ms.ToArray());
return ms;
}
}
您是否可以直接在Word中的「〜/ Documents/savedFile.docx」中打開文件而無需下載?如果是,則問題是不完整/損壞的下載。如果不是,你需要告訴我們'repo.ChangeFile'裏面發生了什麼。 –
從您的描述中可以看出,您所做的更改沒有正確完成。 –
請注意,有一個'MemoryStream.ToArray()'方法,您不需要使用'GetBuffer()'。 – Lloyd