sábado, 20 de febrero de 2016

Conservar el valor obtenido de un Fileupload al hacer un Postback

Cuando desarrollamos en ASP y utilizamos un campo FileUpload para buscar un archivo es de mucha utilidad, pero el problema comienza cuando en nuestra aplicación realizamos un Postback cuando el campo FileUpload ya contiene la ruta de un archivo, después de hacer el  Postback se pierde el contenido del campo FileUpload y tenemos que volver a seleccionar el archivo, el problema radica cuando tenemos que seleccionar varios archivos en diferentes FileUpload.

Un buen amigo me compartio el código, supongamos que tenemos en nuestra aplicación los campos:
  • Label1
  • FileUpload1


Ahora lo que debemos hacer es copiar el siguiente código en el evento Page_Load de nuestra Form.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Me.FileUpload1.HasFile Then
   Session("contiene_FileUpload1") = Me.FileUpload1
   Me.Label1.Text = Me.FileUpload1.FileName
End If

Si ejecutamos el debug nos daremos cuenta que Me.FileUpload1.HasFile guarda un valor True  cuando seleccionamos un archivo con FileUpload, una vez seleccionado el archivo se guarda en la variable de sesión Session("contiene_FileUpload1") el contenido del FileUpload, si revisas el contenido de la variable de sesión estará vacío, pero entonces?, yo también pensé lo mismo, mi amigo me explico que lo que guarda en la variable de sesión es el campo FileUpload no el nombre del archivo seleccionado.

Cuando hagamos un Postback el nombre del archivo seleccionado se guardara en Label1 y en la variable de sesión aunque el campos FileUpload este vació.



Agregamos un botón donde colocaremos el código para guardar el archivo seleccionado, copiamos el siguiente código:

Dim savepath = "c:\inetpub\wwwroot\responsivas"
'verifica que FileUpload=true o que Label1 tenga algún contenido
If Me.FileUpload1.HasFile = False And Me.Label1.Text.Trim.Length > 0 Then
'Copia el contenido de la variable de sesión a FileupLoad
Me.FileUpload1 = Session("contiene_FileUpload1")
End If
If FileUpload1.FileName <> "" Then
   'Copia el archivo a la ruta
   savepath += FileUpload1.FileName
   FileUpload1.SaveAs(Server.MapPath(savePath))
End If


ACTUALIZACION

Si tienes configurado en el web.config de tu aplicación "SQLServer"
   


Al realizar un postback se visualizara el siguiente error:



El problema es porque enviamos en control FileUpload a una variable de sesión, la solución es enviar Fileupload en bytes a la variable de sesión :


Revisa: http://vbpuntonet.blogspot.mx/2016/04/copiar-archivos-con-systemiofilewriteal.html

Comparte