Se afișează postările cu eticheta upload fisiere. Afișați toate postările
Se afișează postările cu eticheta upload fisiere. Afișați toate postările

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.