Artiklar » .NET 2x » Ladda upp bild på servern

 
 

Ladda upp bild på servern

Författare: mactommy
Datum: den 20 februari 2009
Antal lästa: 3736
Ej stjärnmärkt

I denna artikel kommer jag visa det absoult enklaste sättet att ladda upp en fil på sin webserver förutsatt att ni har .NET installerat, inga komponenter eller annat behövs, bara lite C#-kod.

Jag kommer att använda mig av två stycken kontroller, <asp:FileUpload> och <asp:Button> för att göra det enkelt. Eftersom det är lite att skriva så förklarar jag inte var ni hittar snabbknapparna för dessa så att ni kan dra in de på sidan.

Skapa ett ny "Web Site" genom Visual Web Developer. På default.aspx-sidan så skriver vi följande innanför <form>-taggen, Kod:
<asp:FileUpload ID="fileUpload" runat="server" />
<asp:Button ID="butUpload" runat="server" Text="Upload" onclick="butUpload_Click" />

Vi har nu ett textbox med en "bläddra" knapp och vi har en knapp för att påbörja uppladdningen.

Nu går vi över till CodeBehind-filen "default.aspx.cs". Här börjar vi med att lägga till using System.IO; överst på sidan. I detta nu så kan vi hoppa över protected void Page_Load(object sender, EventArgs e){ } och lägger upp funktionen där vi tar emot knapptryckningen onclick="butUpload_Click". Kod:
protected void butUpload_Click(object sender, EventArgs e)
{
}

"protected void" innbär att det inte kommer att returneras tillbaka någon info. När vi klickar på knappen så går vi till funktionen och sparar ner våran fil.

Vi lägger till en IF-sats för att veta om vi har någon info i våran textbox och slipper då förhoppningsvis ett felmeddelande om någon råkar klicka på knappen utan att ha valt en fil, Kod:
if (fileUpload.HasFile)
{
  string fileName = MapPath(fileUpload.FileName);
  fileUpload.SaveAs(fileName);
}

"fileUpload.HasFile" är ID:et på våran kontroll <asp:FileUpload ID="fileUpload" runat="server" /> som återkommer i koden.

Detta är allt som behövs. Nu har ni ett script som lägger upp en fil på servern via en websida.

Detta innebär som ni förstår att man kan ladda upp vilken fil som helst på servern och det är inte så lämpligt. Nu lägger vi till och kollar av filändelsen. Vi skapar en ny funktion "CheckFileType". Jag kommer här utnyttja fördelen med att använda en boolean (true/false) för att kolla att filändelsen är korrekt.

Vi börjar med att skapa en ny funktion, Kod:
bool CheckFileType(string fileName)
{
}

Vi har "CheckFileType" av typen boolean och i den funktionen så ska vi skicka in vårat filnamn på den filen som vi provar att ladda upp.

Nu tänker jag använda mig av en "switch-case"-sats, som är motsvarigheten till ASP:ens "select-case". Men vi börjar med att hämta ut filändelsen med string ext = Path.GetExtension(fileName); och kör "ext" genom switch-satsen. ext.ToLower() gör att vi enbart behöver hålla koll på filextension med små bokstäver, motsvarigheten till .ToLower() i klassisk ASP är LCase(ext)... Kod:
switch (ext.ToLower())
{
  case ".jpg":
    return true;
  case ".gif":
    return true;
  case ".png":
    return true;
  default:
    return false;
}

Om vi har en giltig filändelse så kommer vi att returnera "true", annars "false". För att kolla av filändelsen så kör vi med if (CheckFileType(fileUpload.FileName)) där vi laddar upp våran fil. Vi behöver i det här läget aldrig skriva if(CheckFileType(fileUpload.FileName) == true), utan returneras det en boolean så förstår servern att den släpper igenom ett true-villkor automatiskt i IF-satsen.

Har ni förstått någorlunda så bör eran codeBehind-fil se ut ungefär så här, Kod:
using System;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
  }

  bool CheckFileType(string fileName)
  {
    string ext = Path.GetExtension(fileName);
    switch (ext.ToLower())
    {
      case ".jpg":
        return true;
      case ".gif":
         return true;
      case ".png":
        return true;
      default:
        return false;
    }
  }

  protected void butUpload_Click(object sender, EventArgs e)
  {
    if (fileUpload.HasFile)
    {
      if (CheckFileType(fileUpload.FileName))
      {
        string fileName = MapPath(fileUpload.FileName);
        fileUpload.SaveAs(fileName);
      }
    }
  }
}

Sen är det upp till er och leverera ev. felkoder/felmeddelande om inte filen gick att ladda upp.

Innan ni gör detta så får ni kontrollera om ni har en speciell mapp som är öppen för nedsparning. T.ex. WEB10 har mappen "upload" där man har möjlighet att spara ner filer via webben. På övriga ställen får man ett fel...
 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 1  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 0,0781 sekunder att ladda sidan