Tôi có một tệp docx mà tôi muốn trả lại sau khi tôi thực hiện chỉnh sửa. Tôi có đoạn code sau đây ...Làm thế nào để tôi trả về tệp MVX MemoryStream docx?
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"));
Các tập tin có vẻ tốt đẹp, nhưng tôi nhận được thông báo lỗi ("các tập tin bị hỏng" và một tuyên bố "Lời tìm thấy nội dung không đọc được. Nếu bạn tin tưởng vào nguồn bấm Yes"). Bất kỳ ý tưởng?
Cảm ơn trước
EDIT
Đây là ChangeFile trong Model của tôi ...
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;
}
}
Bạn có thể mở tệp tại "~/Documents/savedFile.docx" trực tiếp trong Word mà không tải xuống không? Nếu có, vấn đề là một tải xuống không đầy đủ/bị hỏng. Nếu không, bạn cần hiển thị cho chúng tôi những gì đang xảy ra bên trong 'repo.ChangeFile'. –
Từ mô tả của bạn, có vẻ như những thay đổi bạn đã thực hiện không được thực hiện chính xác. –
Lưu ý rằng có một phương thức 'MemoryStream.ToArray()' bạn không cần sử dụng 'GetBuffer()'. – Lloyd