net imagen guardar asp c# asp.net canvas file-upload character-encoding

c# - asp - Cómo convertir cadena base64 a archivo binario de imagen y guardar en servidor



guardar imagen en sql server asp net c# (1)

Esta pregunta ya tiene una respuesta aquí:

Como ejemplo, he convertido un elemento de lienzo con una imagen de nuevo tamaño y publicado en un campo de entrada oculto que ahora está codificado como

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...

Este valor luego se publicó en la misma página que necesito para convertir esta cadena en una imagen y guardarla en el servidor.

Código detrás del archivo (upload.aspx)

protected void btnUpload_Click(object sender, EventArgs e) { HttpPostedFile filePosted = Request.Files["newinput"]; string base64String = filePosted.ToString(); // Convert Base64 String to byte[] byte[] imageBytes = Convert.FromBase64String(base64String); MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length); // Convert byte[] to Image ms.Write(imageBytes, 0, imageBytes.Length); System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true); //I DONT KNOW HOW TO WRITE ABOVE INTO THE SaveAs CONDITION BELOW if (filePosted != null && filePosted.ContentLength > 0) { string fileNameApplication = Path.GetFileName(filePosted.FileName); string fileExtensionApplication = Path.GetExtension(fileNameApplication); // generating a random guid for a new file at server for the uploaded file string newFile = Guid.NewGuid().ToString() + fileExtensionApplication; // getting a valid server path to save string filePath = Path.Combine(Server.MapPath("~/Assets/") + Request.QueryString["id"] + "/", newFile); if (fileNameApplication != String.Empty) { filePosted.SaveAs(filePath); } }

Estoy bastante seguro de que necesito convertir esto imagedata en un archivo binario antes de guardarlo en el servidor, pero no puedo entender cómo debo modificar el código anterior. ¿Algunas ideas? El código para guardar en el servidor no funciona.

Una vez que he convertido esto en una imagen y he cambiado su nombre como se indica arriba, lo estoy almacenando en una base de datos a través de LINQ, con una URL adjunta.

Cualquier ayuda sería muy apreciada.


La esperanza debajo de las funciones ayuda.

public string ImageToBase64(Image image, System.Drawing.Imaging.ImageFormat format) { using (MemoryStream ms = new MemoryStream()) { // Convert Image to byte[] image.Save(ms, format); byte[] imageBytes = ms.ToArray(); // Convert byte[] to Base64 String string base64String = Convert.ToBase64String(imageBytes); return base64String; } } public Image Base64ToImage(string base64String) { // Convert Base64 String to byte[] byte[] imageBytes = Convert.FromBase64String(base64String); MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length); // Convert byte[] to Image ms.Write(imageBytes, 0, imageBytes.Length); Image image = Image.FromStream(ms, true); return image; }

EDIT 1 -

Según los comentarios, parece que está obteniendo la cadena base64 y debe guardarla como imagen en el servidor y luego, cuando sea necesario, debe mostrar esa imagen usando la ruta física del servidor.

De acuerdo. Base64ToImage le dará una imagen para su cadena base64. Puede guardarlo en el servidor usando

image.Save("PATH", System.Drawing.Imaging.ImageFormat.Jpeg);

Y esta "RUTA" que ha suministrado o creado puede almacenarse en DB como URL, que puede usar en el momento de la visualización.

Nota: asegúrese de tener acceso de escritura a la carpeta donde está guardando la imagen.

EDIT-2 Su función debería verse a continuación. Por favor ponga código de validación, manejo de errores según sea necesario.

protected void btnUpload_Click(object sender, EventArgs e) { HttpPostedFile filePosted = Request.Files["newinput"]; string base64String = filePosted.ToString(); // Convert Base64 String to byte[] byte[] imageBytes = Convert.FromBase64String(base64String); MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length); // Convert byte[] to Image ms.Write(imageBytes, 0, imageBytes.Length); System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true); string newFile = Guid.NewGuid().ToString() + fileExtensionApplication; string filePath = Path.Combine(Server.MapPath("~/Assets/") + Request.QueryString["id"] + "/", newFile); image.Save(filepath,ImageFormat.Jpeg); }