Upload fisiere. Upload dinamic

ASP .NET include un control cu ajutorul căruia putem încărca fişiere pe server. Acesta este FileUpload. FileUpload este echivalentul HTML pentru <input type="file">



Pentru a putea încărca un fişier pe server, adăugăm în pagină un control FileUpload şi un buton



În pagina aspx avem următorul cod:



<div class="div_upload_fisier" >
<h2>Upload un singur fişier</h2>
<em>Alegeţi fişierul</em>:
<asp:FileUpload ID="fisier_1_0" runat="server" />
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Încarcă fişier"
onclick="Button1_Click" />

</div>



Utilizatorul va alege fişierul printr-un click pe browse. După alegerea fişierului pentru upload, la click pe buton, pagina va trimite datele spre server. Metoda PostedFile.SaveAs a unui control FileUpload salveaza fisierul pe disc. Sintaxa pentru un control cu id-ul FileUpload1 este:

FileUpload1.PostedFile.SaveAs("cale_completă_fişier");

Codul C# pentru exemplul aspx de mai sus este următorul:


fisier_1_0.PostedFile.SaveAs(Request.PhysicalApplicationPath + Path.GetFileName(fisier_1_0.PostedFile.FileName));


Metoda SaveAs() trebuie să primească ca parametru un string ce reprezintă calea către fişier + numele fişierului. În cazul de mai sus, Request.PhysicalApplicationPath returnează calea fizică curentă a apicaţiei web, iar Path.GetFileName() returnează numele fişierului ales de utilizator pentru upload. fisier_1_0.PostedFile.FileName conţine calea+numele original al fişierului.

Clasa Path necesită folosirea namespace-ului System.IO. Putem scrie using System.IO sau să procedăm ca în imaginea de mai jos (click dreapta pe cuvântul Path)



Upload dinamic

Pentru a putea face un upload dinamic (adică să lăsăm utilizatorul să aleagă câte fişiere vrea) avem nevoie de puţin javascript.



Codul javascript este următorul (în partea de HEAD)


<script language="javascript" type="text/javascript">
var j=0;
function adauga_doc() {
j++;

var a = document.createElement('input');
var b = document.createElement('br');
a.setAttribute('type', 'file');
a.setAttribute('id', 'fisier_2_' + j);
a.setAttribute('name', 'fisier_2_' + j);

document.getElementById('adauga_documente_div').appendChild
(a);
document.getElementById('adauga_documente_div').appendChild
(b);
}
</script>


Funcţia adauga_doc() va adăuga un control <input type="file"> pentru upload-ul fişierelor. În mod normal acest control necesită ca tag-ul <form> să conţină atributul enctype="multipart/form-data" dar deoarece avem un control FileUpload pe pagină, acel atribut este creat automat de ASP .NET. Se crează elementul input de tip file cu id-ul şi numele unic (prin incrementarea variabilei j) ori de câte ori utilizatorul apasă pe link-ul "încă un fişier". În acest fel vom avea controale cu id şi nume unic pentru a nu exista probleme la încărcare.

În secţiunea body avem următorul cod HTML


<div class="div_upload_dinamic">
<h2>Upload dinamic</h2>
<em>Alegeţi un fişier</em>:
<asp:FileUpload ID="fisier_2_0" runat="server" />
<div id="adauga_documente_div" runat="server"></div>
<a onclick="adauga_doc();" style="cursor:pointer;color:Blue;text-decoration:underline;">Încă un fişier</a><br /><br />

<asp:Button ID="Button2" runat="server" Text="Încarcă fişierele"
onclick="Button2_Click" />
<br />
</div>


Observăm că la elementul <a> avem atributul onclick ce execută funcţia adauga_doc()

Codul C# pentru salvarea fişierelor pe server este următorul:


string nume_fisier;
for (int j = 0; j < Request.Files.Count; j++)
{

if (Request.Files[j].ContentLength > 0)
{
nume_fisier = Path.GetFileName(Request.Files[j].FileName);
Request.Files[j].SaveAs(Request.PhysicalApplicationPath.ToString
() + nume_fisier);
}
}


Request.Files reprezintă colecţia de fişiere încărcate. Parcurgem fişierele încărcate şi le salvăm rând pe rând pe server.

Descărcaţi acest exemplu



Limitarea dimensiunii fişierelor încărcate

Putem modifica dimensiunea maximă pe care o poate accepta ASP .NET la upload-ul fişierelor (implicit e 4 mega bytes). În fişierul web.config căutăm tag-ul <system.web> şi adăugăm următoarea linie

<httpRuntime maxRequestLength="10240"/>

10240 reprezintă 10 mega. Putem modifica valoarea în kilobytes a maxRequestLength.

Niciun comentariu: