Ho un file docx che vorrei restituire dopo aver apportato delle modifiche. Ho il seguente codice ...Come posso restituire un file docx di MemoryStream 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"));
il file sembra bene, ma sto ottenendo i messaggi di errore ("il file essere corrotti" e un altro che indica "Parola trovato contenuto illeggibile. Se si considera attendibile l'origine fare clic su Sì"). Qualche idea?
Grazie in anticipo
EDIT
Questa è la ChangeFile nel mio modello ...
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;
}
}
È possibile aprire il file in "~/Documents/savedFile.docx" direttamente in Word senza il download? Se sì, il problema è un download incompleto/corrotto. Altrimenti, è necessario mostrarci cosa succede all'interno di 'repo.ChangeFile'. –
Dalla tua descrizione sembra che le modifiche che hai apportato non vengano eseguite correttamente. –
Si noti che esiste un metodo 'MemoryStream.ToArray()' che non è necessario utilizzare 'GetBuffer()'. – Lloyd