Recuperar im�genes de un documento de Word .docx
Gui�n
Este art�culo le ense�a c�mo crear una aplicaci�n web ASP.NET para recuperar todas las im�genes de un documento en formato Microsoft Docx.
Preparar la aplicaci�n web ASP.NET
Usando Visual Studio, cree una aplicaci�n web ASP.NET Core simple con Razor Pages.
Usando el Administrador de paquetes NuGet, consulte dos paquetes para su proyecto:
Aspose.Zip para descompresi�n y
Aspose.Imaging para verificaci�n de im�genes.
Busque la p�gina Index.cshtml dentro de su Explorador de soluciones. Ahora, agregue un formulario a esa p�gina con el atributo enctype="multipart/form-data" dentro de la etiqueta <form>. Necesitaba transferir un documento de Word al servidor web. Luego, agregue un campo de entrada de tipo “archivo” para el archivo docx cargado.
Aqu� est� el marcado HTML completo para el formulario:
1<form method="post" enctype="multipart/form-data">
2 <span>Microsoft *.docx document: </span>
3 <input type="file" name="uploadedFile" required="required" accept=".docx" />
4 <br />
5 <input type="submit" value="Upload" />
6</form>Se han agregado atributos “Aceptar” para comodidad del usuario.
Estructura Docx
Docx documet es un archivo zip en s� mismo. Si tiene im�genes incrustadas, se ubican en la carpeta ‘word/media’ despu�s de la extracci�n. Entonces, el usuario proporciona el archivo docx y env�a el formulario. En el lado del servidor necesitamos componer un m�todo OnPost apropiado para la fuente Index.cshtml.cs. Dentro de este m�todo extraemos
archivo zip usando
el constructor apropiado. Aqu� est� el borrador del m�todo:
1 public void OnPost(IFormFile uploadedFile) {
2 using (Archive archive = new Archive(uploadedFile.OpenReadStream())) {
3 using (Archive archive = new Archive(uploadedFile.OpenReadStream()))
4 {
5 foreach (var entry in archive.Entries.Where(e => e.Name.StartsWith(@"word/media", StringComparison.InvariantCultureIgnoreCase)))
6 {
7 ...
8 }
9 }
10 }
11 }Modelo de p�gina y representaci�n de im�genes
Despu�s de la extracci�n, debemos verificar que la entrada extra�da sea en realidad una imagen. Para ello podemos utilizar el m�todo
Image.CanLoad. Si aprueba la imagen v�lida, necesitamos almacenar bytes dentro del modelo de p�gina para representar esa imagen. Agregue la propiedad Lista p�blica<byte[]> ImageBytes { get; conjunto privado; } a Modelo de �ndice.
Llenamos esta lista con bytes de im�genes extra�das. Para mostrarlos en la p�gina web utilizamos
URI de datos con conversi�n de bytes de imagen a cadena base64.
Aqu� hay una representaci�n del c�digo Razor en Index.cshtml
1 @{
2 if (Model.ImageBytes != null && Model.ImageBytes.Count > 0) {
3 <h4>Images within document:</h4>
4 foreach (byte[] image in Model.ImageBytes) {
5 <img src="data:image;base64,@Convert.ToBase64String(image)"/>
6 }
7 }
8 }Respuesta final
As� que ponlo todo junto. Se ha descomprimido cada entrada del archivo y luego se ha creado una imagen a partir de estos bytes.
No validamos el archivo de usuario en esta muestra. En aplicaciones del mundo real, debes verificar un archivo cargado y su contenido.
A continuaci�n se muestra el m�todo OnPost final.
1p�blico vac�o OnPost (IFormFile uploadedFile)
2{
3 ImageBytes = nueva Lista<byte[]>();
4
5 using (Archive archive = new Archive(uploadedFile.OpenReadStream()))
6 {
7 foreach (var entry in archive.Entries.Where(e => e.Name.StartsWith(@"word/media", StringComparison.InvariantCultureIgnoreCase)))
8 {
9 using (MemoryStream extracted = new MemoryStream())
10 {
11 entry.Open().CopyTo(extracted);
12 extracted.Seek(0, SeekOrigin.Begin);
13
14 if (Aspose.Imaging.Image.CanLoad(extracted))
15 ImageBytes.Add(extracted.ToArray());
16 }
17 }
18 }
19}