Pujar fitxers al servidor

Avui m’he estat barallant amb el control d’ASP.NET FileUpload. Aquest control et permet poder seleccionar un fitxer del teu ordinador i pujar-lo al servidor. Un fet que sembla tant senzill a vegades ens pot provocar algun que altre mal de cap. Tot i que ja ha anat evolucionant la tecnologia i la manera que es tracta aquesta petició no s’ha pogut escapar mai de la mecànica que té, és a dir, seleccionar un fitxer, prémer un botó perquè aquest comenci a  pujar al servidor.

Aquest control està limitat funcionalment per motius de seguretat, per exemple, no es pot preseleccionar un fitxer ni tampoc es pot fer que pugi de forma automàtica sense la autorització de l’usuari. Us imagineu que les webs poguessin pre-seleccionar els fitxer? o pitjor encara que pugessin sense autoritzar?

Tot i així a les webs es veu de tot, tot si val per poder dissimular el comportament funcional o l’aspecte d’aquest control. Per exemple, que immediatament després de seleccionar el fitxer comenci a pujar, o canviar el boto horrible de Examinar. Nom del qual no podem modificar nativament ja que depèn del navegador. Mireu aquesta web com parla dels diferents estils que pot tenir aquest control depenent del navegador i tècniques per poder-lo modificar.

Parlem ara dels controls Ajax que permeten pujar els fitxers asíncronament. Durant molt de temps Google utilitzava iframes per pujar els fitxers fent creure a tothom que es feia asincronament. Ara desconec si encara utilitza aquesta tècnica però tampoc importa massa ja, et pots trobar molts controls per internet que diuen pujar els fitxers asíncronament.

Pujar asíncronament un fitxer si és possible tot i que és més insegur que fer-ho sincronament, però es pot fer un progress bar? Doncs si, existeixen maneres per fer-ho, una d’elles és amb plugins jquery com aquest i flash. De moment els navegadors no permeten saber la mida del fitxer amb javascript, per tant com pots fer un progress bar si ja no saps què envies? doncs un cop ha arribat la petició al servidor és quan ja es sap la mida del fitxer, però clar, ja ha arribat, ja el tens allà. Cap navegador et permet tractar els fitxers del teu ordinador perquè aquest pugui ser pujat en trossos. Aquesta afirmació té l’excepció en la utilització d’ActiveX, Flash o Silverlght que al ser aplicacions que s’executen completament en el client si podrien tenir aquest accés sempre i quan nosaltres haguem acceptat els avisos de perills de seguretat que un bon navegador ens informaria.

Continuant amb el FileUpload hi ha també altres maneres de poder canviar el seu aspecte utilitzant el JQuery.

La tècnica bàsica per fer que un cop seleccionat el fitxer aquest comenci a pujar és simplement:

<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" />
<asp:FileUpload ID="FileUpload1" runat="server" />

On Server side


Button2.Attributes.add("Style", "Display:none" );
FileUpload1.Attributes.Add( "onchange", Button2.ClientID + ".Click()") ;

És a dir, ocultar el botó que ens fa el postback al servidor perquè aquest comenci a pujar i simular un click amb javascript.

Advertisements

Un pensament sobre “Pujar fitxers al servidor

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s