ASPNL logo (1 kb)
Saturday, February 04, 2012




Microsoft MVP

.NET Codewise Community
<< vorige | overzicht | volgende >>

Bestanden uploaden naar de webserver met ASP.NET

Door Michiel van Otegem
26 november 2008

Bestanden uploaden naar de webserver is met ASP.NET kinderlijk eenvoudig. Je gebruikt hiervoor de FileUpload-control die standaard meegeleverd wordt. Plaats deze control op de pagina en geef deze een duidelijke naam, in Listing 1 heet deze Upload. Verder heb je een knop nodig, zodat een Postback gedaan wordt en het door de gebruiker geselecteerde bestand naar de server gestuurd wordt. In listing 1 staat hiervoor een LinkButton met de naam UploadButton. In Listing 1 zie je ook een Repeater-control voor het weergeven van bestanden en het bieden van een link naar die bestanden.

 1: <form id="form1" runat="server">
 2:     <div>
 3:         <asp:FileUpload runat="server" ID="Upload" />
 4:         <asp:LinkButton runat="server" ID="UploadButton" Text="Upload" 
 5:             onclick="UploadButton_Click" />
 6:         <hr />
 7:         <asp:Repeater runat="server" ID="FileList">
 8:             <ItemTemplate>
 9:                 <a href='/files/<%# Container.DataItem %>'
                  ><%# Container.DataItem %></a><br />
10:             </ItemTemplate>
11:         </asp:Repeater>
12:     </div>
13:     </form>

Listing 1, File upload pagina

Met de HTML op z'n plaats kunnen we aan de code beginnen. Uploaden doen we naar de /Files map op de server. Houd er rekening mee dat het account waaronder ASP.NET werkt of de gebruiker die de website benadert rechten moeten hebben om in de map te kunnen schrijven. Het account waaronder ASP.NET werkt is in IIS 5.0 het ASPNET account. Vanaf IIS 6.0 is dit het NETWORK SERVICE account. Wanneer de gebruiker op de UploadButton klikt, moet het bestand op de server opgeslagen worden. Hiervoor moet je dus code koppelen aan de UploadButton, wat je in Visual Web Developer eenvoudig doet door in Design-view te dubbelklikken op de knop. In de code-behind regel 1-8 van listing 2 invoegen werkt ook. Deze code kijkt eerst of er een bestand is door te kijken naar de HasFile-eigenschap van de PostedFile die gekoppeld is aan de FileUpload-control waar je naar kijkt. Om de bestandsnaam zonder pad op te vragen, haal je de gehele bestandsnaam door de FileInfo class. Vervolgens kun je het bestand opslaan. Het volledige pad van de map waarin je wilt opslaan vraag je op met Server.MapPath.

 1: protected void UploadButton_Click(object sender, EventArgs e)
 2: {
 3:     if (Upload.HasFile == true)
 4:     {
 5:         FileInfo info = new FileInfo(Upload.PostedFile.FileName);
 6:         Upload.PostedFile.SaveAs(Server.MapPath("/Files/" + info.Name));
 7:     }
 8: }
 9:  
10: protected void Page_PreRender(object sender, EventArgs e)
11: {
12:     string[] files = Directory.GetFiles(Server.MapPath("/Files/"));
13:     for (int i = 0; i < files.Length; i++)
14:     {
15:         files[i] = new FileInfo(files[i]).Name;
16:     }
17:     FileList.DataSource = files;
18:     FileList.DataBind();
19: }

Listing 2, File upload code-behind

Opgeslagen bestanden downloaden

Om de bestanden die in de Files-map staan te downloaden moet je de bestanden in die map opvragen. Dit doe je met System.File.Directory.GetFiles(). Je krijgt dan een array met de bestandsnamen met hun volledige pad (dus bijvoorbeeld c:/inetpub/wwwroot/mijnsite/files/bestand.txt). Aangezien je alleen de naam wilt tonen, moet je eerst weer even de FileInfo class gebruiken om het pad eruit te filteren. De resulterende lijst kun je aan de Repeater-control koppelen.

Andere opties

Je kunt uiteraard ook de naam van het bestand in een database zetten en op basis daarvan de link opbouwen. Ook is het mogelijk om het bestand als geheel in de database op te slaan, maar dat is over het algemeen niet echt handig en valt buiten het bestek van dit artikel.

<< vorige | ^ naar boven | overzicht | volgende >>
copyright 2000-2007 ASPNL