Artiklar » .NET 2x » Ladda upp bild på servern med en upload-class

 
 

Ladda upp bild på servern med en upload-class

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

I förra artikeln visade jag på hur man enkelt kan ladda upp en bild på servern men några få rader kod. Nu tänkte jag visa hur man kan bygga en egen upload-class som man kan återanvända i projekten. Att använda en egen upload-class innbär att man placerar koden i en separat fil som kan kopieras in från projekt till projekt där den kan tänkas att behövas.

Vi startar upp Visual Web Developer och skapar oss en sida. Lägg till 3st kontroller på sidan, <asp:FileUpload>, <asp:Button> och <asp:Literal>. Nu kan ni använda "Toolbox" (Ctrl-Alt-X) för att dra ut era kontroller. Under "Standard"-kontroller bör ni hitta dessa. I nuläget så gör vi inte något mer än att vi lägger till onclick="Button1_Click" på våran <asp:button>.

Default.aspx bör nu se ut så här innanför <form>-taggen, Kod:
<div>
  <asp:FileUpload ID="FileUpload1" runat="server" />
  <asp:Button ID="Button1" runat="server" Text="Upload" onclick="Button1_Click" />
  <asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>

Det är allt vad vi behöver göra nu på sidan.

Nu går vi över till fönstret "Solution Explorer" i Visual Web Developer (Ctrl-Alt-L). Högerklicka på översta raden och välj "Add New Item..." och välj "Class".  Innan du trycker "Add" ändra "Class1.cs" till "Upload.cs". Du kommer nu att få en varningskylt som säger att du håller på att skapa filen utanför "App_Code"-mappen och undrar om du inte vill spara den där istället. Klicka på "Ja", du vill ha den i "App_Code"-mappen.

I våran class-fil så kan vi ändra våra using-direktiv till dessa:
using System;
using System.IO;
using System.Web;
using System.Web.UI.WebControls;

Det är de som behövs för tillfället.

Vi skapar upp två funktioner private static bool CheckPictureType(string fileName){ } och public static string UploadPicture(FileUpload fileName, int maxFileSize){ }. I CheckPictureType så kan vi kopiera in innehållet från http://www.aspsidan.se/default.asp?page=admDefault&adminPage=admArticles&action=readArt&artId=643 som ligger i funktionen bool CheckFileType(string fileName) { }.

I public static string UploadPicture(FileUpload fileName, int maxFileSize){ } så har jag lagt till ytterligare en sak, maxFileSize. Detta gör att jag kan använda samma uppladdnings-class för olika bild-typers filstorlek och då enbart styra intMaxSize vid anropet till min class med hur stora bilderna får vara.

Nu tänker jag enbart visa koden för det som ligger i "UploadPicture"-metoden. Jag har skrivit den så ni borde förstå det hela utan en massa text, Kod:
if (fileName.HasFile)
{
  if (fileName.PostedFile.ContentLength < maxFileSize)
  {
    if (CheckPictureType(fileName.FileName))
    {
      fileName.SaveAs(HttpContext.Current.Server.MapPath(fileName.FileName));
      return "Save ok.";
    }
    else
      return "This is not a guilty pic extension.";
    }
  else
    return "Picture to large, maximum size " + maxFileSize + " bytes.";
}
else
  return "No picture";

Eftersom jag kör med "public static string" så kommer funktionen returnera tillbaka en "string", den utnyttjar jag för att skicka tillbaka statusen.

Ni bör nu ha en class som ser ut så här, Kod:
using System;
using System.IO;
using System.Web;
using System.Web.UI.WebControls;

/// <summary>
/// Upload class...
/// </summary>
///
public class Upload
{
  private static bool CheckPictureType(string fileName)
  {
    string extension = Path.GetExtension(fileName);
    switch (extension.ToLower())
    {
      case ".jpg":
        return true;
      case ".gif":
        return true;
      case ".png":
        return true;
      default:
        return false;
    }
  }

  public static string UploadPicture(FileUpload fileName, int maxFileSize)
  {
    if (fileName.HasFile)
    {
      if (fileName.PostedFile.ContentLength < maxFileSize)
      {
        if (CheckPictureType(fileName.FileName))
        {
          fileName.SaveAs(HttpContext.Current.Server.MapPath(fileName.FileName));
          return "Save ok.";
        }
        else
          return "This is not a guilty pic extension.";
      }
      else
        return "Picture to large, maximum size " + maxFileSize + " bytes.";
    }
    else
  return "No picture";
  }
}

Inga direkta konstigheter, beroende på villkoren så returneras text beroende på ev. fel.

Vi går tillbaka till våran fil "default.aspx.cs" och lägger till protected void Button1_Click(object sender, EventArgs e) { } så att knappen har något att jobba mot. I denna så ska vi nu lägga en rad kod, Literal1.Text = Upload.UploadPicture(FileUpload1, 2100000);. Kod:
protected void Button1_Click(object sender, EventArgs e)
{
  Literal1.Text = Upload.UploadPicture(FileUpload1, 2100000);
}


Vad gör denna? Literal1.Text sätter en text i våran <asp:Literal>-kontroll, eftersom våran nedladdning returnerar ett meddelande om status så är det det vi utnyttjar här. Upload.UploadPicture(FileUpload1, 2100000); skickar över filen som finns i <asp:FileUpload id="FileUplaod1"> med storleken att den får max vara  2100000byte till våran class "Upload" och metoden "UploadPicture". Har ni gjort rätt så bör intellisensen ge er "UploadPicture" när ni skrivit "Upload.".

När ni har en fungerande upload-class så kopierar ni in den i App_Code i alla era projekt där den behövs, klicka in de tre kontrollerna ovan på sidan tillsammans med "onClick" på knappen. 3st rader kod CB och vips så kan ni enkelt ladda upp filer på servern.

Som i den förra artikeln så får ni själva kontrollera att ni har tillåtelse att spara ner filen i aktuellt bibliotek, samt skydda er på alla tänkbara sätt.

Vill ni få lite mera kontroll över classens funktion och innehåll så kan kommentera funktinen med 3st "///" på raden ovanför funktionen. Nu kommer det dyka upp lite text där ni kan fylla på information. Denna text kommer VWD att utnyttja i intellisensen när ni skriver "Upload.UploadPicture(" när ni anropar funktionen... Perfekt för att veta vad som behöver fyllas på, utan att gå tillbaka till funktionen.

2008-02-20 12:55 Uppdaterat namnen på metoder och variablar...
 
     

  » 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,0625 sekunder att ladda sidan