I denna artikel så tänkte jag visa hur man enkelt laddar upp en bild samt skapar en thumbnail av den i ASP.NET
Det första vi ska göra är att skapa ett nytt webbprojekt. I detta webbprojekt så ska det finnas en katalog som heter images och i denna katalog ska du skapa en katalog som heter thumbs. Glöm inte att sätta skrivrättigheter på dessa mappar. Sedan ska du dra ut de kontroller vi kommer att använda. Dessa kontroller listas nedan
-
<asp:FileUpload ID="fuImage" runat="server" /><asp:Button ID="btnUpload" runat="server" Text="Ladda upp" />
-
-
<asp:Label ID="lblStatusMessage" runat="server"></asp:Label>
Som du kanske ser så har inte våran knapp något Click-event, och något sådant behövs heller inte utan att sköts
via Page_Load.
Om vi går till Code-läget och hoppar till page-load så är det första vi ska göra att kolla om det är en Postback samt
om våran fileupload innehåller någon fil. Detta görs genom följande kodrader
-
// Börja med att kolla om det är en Postback
-
if (IsPostBack)
-
{
-
// Om det är en postback så kollar vi om vi har en fil
-
// Har vi det så tar vi hand om den
-
if (fuImage.HasFile)
-
{
Som du ser så är det inga konstigheter här, utan vi kollar först om det är en Postback och sedan om vi har en fil på ingång.
Eftersom vi inte vill tillåta annat än bilder så kontrollerar vi detta
-
// Vi tar med hjälp av metoden GetExtension reda på vilken filtyp
-
// det är då vi vill ha möjlighet att begränsa filtyperna till olika
-
// bildformat då det är bilduppladdning vi håller på med. För att förenkla
-
// kollen senare av filändelsen så gör vi om den så att den bara innehåller
-
// små bokstäver med hjälp av metoden ToLower()
-
String extension = System.IO.Path.GetExtension(fuImage.FileName).ToLower();
-
// Sedan skapar vi en array med de filtyper som vi vill godkänna
-
String[] extensions = { ".gif", ".jpeg", ".jpg" };
-
-
// Denna variabel sätts till true om det är en tillåten filtyp vi har att göra
-
// med.
-
bool allowed = false;
-
// Vi loopar igenom våran array med tillåtna filändelser
-
foreach (String ex in extensions)
-
{
-
// Om vi får en match betyder det att våran fil är tillåten och allowed sätts till true
-
if (ex.Equals(extension))
-
allowed = true;
-
}
Koden förklarar sig självt väldigt bra tycker jag och vi hoppar direkt till nästa del, vilken tar upp själva sparandet av filen samt
skapandet av thumbnailen.
-
// Nu kollar vi om det var en tillåten fil vi hade sparar vi den
-
// i mappen images, annars skriver vi bara ut ett felmeddelande
-
if (allowed)
-
{
-
// Vi sparar våran filnamn i en variabel innan vi använder den då vi
-
// vill använda den för att förminska bilden. Guid.NewGuid skapar ett så
-
//gott som unikt värde som kan användas då man behöver unika namn.
-
String filename = Guid.NewGuid() + extension;
-
// Sparar filen,
-
fuImage.SaveAs(Server.MapPath("images/") + filename);
-
// Efter att bilden är sparad så ska vi förminska den
-
// Vi börjar med att ladda in våran bild i ett Image-objekt
-
// med hjälp av den den InputStream som vi får av upload-kontroll
-
System.Drawing.Image imgImage = Bitmap.FromStream(fuImage.PostedFile.InputStream);
-
// För att våran bild ska ha de rätta proportionerna även efter
-
// förminskningen så tar vi ut höjd samt bredd från orginalbilden.
-
int height, width;
-
// Vi tar ut höjden och bredden från orginalbilden för att
-
// kunna kontrollera den.
-
height = imgImage.Height;
-
width = imgImage.Width;
-
// Här bestämmer jag att maximala höjden på den nya bilden ska vara 120 pixlar.
-
if (height > 120)
-
{
-
// Vi sätter bredden till 120* förhållandet mellan bredd & höjd på orginalbilden
-
width = 120 * width / height;
-
height = 120;
-
}
-
-
// Skapar våran thumbnail från orginalbilden med de nya värdena
-
imgImage = imgImage.GetThumbnailImage(width, height, null, System.IntPtr.Zero);
-
// Sedan sparar vi denna bild med samma namn som orginalet i katalogen thumbs som återfinns i mappen images
-
imgImage.Save(Server.MapPath("images/thumbs/") + filename);
-
// Sist men absolut inte minst så förstör vi våra objekt för att frigöra minnet
-
imgImage.Dispose();
-
fuImage.Dispose();
-
// Talar om att allt gick som det skulle samt visar thumbnailen
-
lblStatusMessage.Text = "Bild uppladdad och thumbnail skapad <img src=\"images\\thumbs\\" + filename + "\">";
-
}
-
else
-
lblStatusMessage.Text = "Otillåten filtyp.";
-
-
}
-
-
}
Så enkelt var det att i ASP.NET både ladda upp en bild och skapa en thumbnail. Hur du väljer att presentera de uppladdade bilderna tänkte jag låta vara upp till dig. För att du ska kunna testa så finns som vanligt möjlighet att ladda ner hela projektet samt att testa det live direkt här.
Demo: http://aspdotnet.nu/upload/demo/ImageUploadWithResize/
Script: http://aspdotnet.nu/upload/script/ImageUploadWithResize.rar