我在 C#中有 WebAPI ,我需要通过POST加载文档,修改一些参数,然后将其保存到Azure Blob帐户。
我可以读取文件,我可以修改参数,但是当我将其保存到Azure时,文档将保存为原始文件。
/* file es del tipo System.Net.Http.StreamContent que viene en un POST */
byte[] byteArray = await file.ReadAsByteArrayAsync();
MemoryStream docStream = new MemoryStream();
docStream.Write(byteArray, 0, byteArray.Length);
docStream.Seek(0x00000000, SeekOrigin.Begin);
WordprocessingDocument doc = WordprocessingDocument.Open(docStream, true);
MainDocumentPart mainDocumentPart = doc.MainDocumentPart;
var descedants = mainDocumentPart.Document.Body.Descendants<SdtElement>();
var idRef = descedants.Where(c => c.FirstChild.Elements<SdtAlias>().Where(v => v.Val == "Asunto").Count() > 0).FirstOrDefault();
if (idRef != null && user != null)
{
var tNomRef = idRef.Elements<SdtContentRun>().FirstOrDefault().FirstOrDefault();
var textNomRef = (DocumentFormat.OpenXml.OpenXmlLeafTextElement)tNomRef.LastOrDefault();
textNomRef.Text = info.idDocumento;
}
var titRef = descedants.Where(c => c.FirstChild.Elements<SdtAlias>().Where(v => v.Val == "Título").Count() > 0).FirstOrDefault();
if (titRef != null && user != null)
{
var tNomRef = idRef.Elements<SdtContentRun>().FirstOrDefault().FirstOrDefault();
var textNomRef = (DocumentFormat.OpenXml.OpenXmlLeafTextElement)tNomRef.LastOrDefault();
textNomRef.Text = info.nomDocumento;
}
/* Este objeto se encarga de subir el archivo a un Blob Storage de Azure */
CloudBlockBlob blob = imagesContainer.GetBlockBlobReference(xNombre);
docStream.Position = 0;
blob.UploadFromStream(docStream);
docStream.Close();
docStream.Dispose();
答案 0 :(得分:1)
您正在从流中填充DOM结构。
除非您实际将其保存回某处,否则原始流不会受到影响。
您应该创建一个新流并将编辑过的文档保存到它。
答案 1 :(得分:0)
修改doc(WordprocessingDocument)之后,需要先将更改保存回docStream(MemoryStream),然后再将docStream上传到blob存储。你需要做的只是在上传docStream之前添加doc.Save()。以下代码供您参考。
doc.Save();
CloudBlockBlob blob = imagesContainer.GetBlockBlobReference(xNombre);
docStream.Position = 0;