Avatar billede pablopablo Nybegynder
28. marts 2008 - 17:23 Der er 6 kommentarer og
1 løsning

Undgå at gemme i session

Hejsa

Jeg bruger en upload funktion, som uplader JPG billeder til serveren. Hver gang et billede uploades vises det med det samme på siden...

Men for at kunne gøre dette gemmes thumbnial billede i session som jo ikke er optimalt - det resulterer i, at når jeg uplaoder et billede på 600kb så smides en Out of memory exception... men jeg ved ikke hvordan jeg ellers løse det...

Håber MEGET I kan hjælpe mig!

Se min kode nedenfor:

            ms = new MemoryStream();
            final_image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

            // Store the data in my custom Thumbnail object
            string thumbnail_id = DateTime.Now.ToString("yyyyMMddHHmmssfff");
            Thumbnail thumb = new Thumbnail(thumbnail_id, ms.GetBuffer());

            // Put it all in the Session (initialize the session if necessary)           
            List<Thumbnail> thumbnails = Session["file_info"] as List<Thumbnail>;
            if (thumbnails == null)
            {
                thumbnails = new List<Thumbnail>();
                Session["file_info"] = thumbnails;
            }
            thumbnails.Add(thumb);

            Response.StatusCode = 200;
            Response.Write(thumbnail_id);

Mvh. PabloPablo
Avatar billede kalp Novice
28. marts 2008 - 18:41 #1
hvad med, at forklare mere om siden.
Jeg forstår ikke hvorfor det skal i session?
Hvad gør brugeren og hvad sker der?

umiddelbart, så ville jeg lave en redirekt til siden selv med en url parameter.. evt filnavn på det nye billeder og i pageload hive billedet frem ud fra parametren i url'en.

og ellers... ajax.
Avatar billede pablopablo Nybegynder
28. marts 2008 - 23:27 #2
Hej igen...jeg bruger dette objekt til upload:
http://swfupload.org/

Du kan se en demo af hvordan det jeg bruger virker her:
http://demo.swfupload.org/applicationdemo/index.php
(Prøv at uploade et JPG)

Jeg har dog integreret det i asp.net og det virker fint, bortset fra den omtalte exception - out of memory.

Du kan se min fulde C# code behind kode her:
http://www.unicdesign.dk/uploadProfileIdImage.txt

Jeg bruger det til uploade et JPG billede...app. kan uploade flere billede på en gang, og hver gang app. har uploadet et af de valgte billeder vises det på skærmen i et lille thumbnail som app. også generere....og det er åbenbart for at holde styr på alle div. thumbs, at de bliver gemt i brugerens session...

Jeg håber du er mere med nu...:) og at du kan se hvordan jeg kan forbedre det!

På forhånd tak!

Mvh.
Avatar billede ieconfig Nybegynder
29. marts 2008 - 19:49 #3
Hvis du skal vise billedet efter en upload kan du håndterer din upload logik i pageload og vises billedet i prerender.

page_load
{
  fileupload1.SaveAs(...)
}
page_prerender
{
  image1.imageurl = ...
}
Avatar billede pablopablo Nybegynder
29. marts 2008 - 21:53 #4
ieconfig >> har du kigget på det jeg bruger? Jeg forstår i hvert fald ikke hvordan jeg skal bruge det i denne sammenhægn...? Jeg er ikke interesseret i alternative løsningsforslag...
Avatar billede ieconfig Nybegynder
29. marts 2008 - 22:47 #5
protected void Page_Load(object sender, EventArgs e)
{
  string fileNameFinal = "Id_" + User.Identity.Name + "." + fileType;
  uploadedFileFinal = Server.MapPath("~/App_Data/JPG/IDs/" + fileNameFinal);
  osv..
}
protected void Page_PreRender(object sender, EventArgs e)
{
  // <asp:Image ID="Image1" på din aspx
  Image1.ImageUrl = "~/App_Data/JPG/IDs/" + fileNameFinal";
}

- så vil du vise det uploadede billede i samme response uden at skulle gemme det i en session variable og lave round-trip for at vise billedet.
Avatar billede pablopablo Nybegynder
30. marts 2008 - 10:50 #6
Hej igen ...jeg forstår gost at man kan gemme et billede og vise det igen, når man kender placeringen på det...Men det jeg efterspørger er jo noget andet...hver gang et billede uploades genereres et thums og billede vises...Det som reelt er problemet, er, at jeg ikke selv er men på, hvad den sidste den af koden skal med for, for at det virker?

// Store the thumbnail in the session (Note: this is bad, it will take a lot of memory, but this is just a demo)
            ms = new MemoryStream();
            final_image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

            // Store the data in my custom Thumbnail object
            string thumbnail_id = DateTime.Now.ToString("yyyyMMddHHmmssfff");
            Thumbnail thumb = new Thumbnail(thumbnail_id, ms.GetBuffer());

            System.Web.HttpContext.Current.Trace.Write("55555");

            // Put it all in the Session (initialize the session if necessary)           
            List<Thumbnail> thumbnails = Session["file_info"] as List<Thumbnail>;
            if (thumbnails == null)
            {
                thumbnails = new List<Thumbnail>();
                Session["file_info"] = thumbnails;
            }
            thumbnails.Add(thumb);

            Response.StatusCode = 200;
            Response.Write(thumbnail_id);

Linie inden:

graphic.DrawImage(original_image, paste_x, paste_y, new_width, new_height);

står jo for at tegne/vise billede på skrærmen, så hvorfor det bliver gemt i session er jeg ikke med på, kan I ikke fortælle mig det?
Avatar billede pablopablo Nybegynder
01. april 2008 - 10:26 #7
hej igen...jeg var ikke helt med på hvordan kontrollen virkede...men det er jeg nu, og nu har jeg fikset det...uden brug af session...:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester