Avatar billede sbjerre Nybegynder
14. maj 2003 - 09:10 Der er 5 kommentarer og
1 løsning

Generering af thumbnails uden brug af HD

Hej

Jeg har kigget på nedenstående spørgsmål som jeg har fået til at virke fint, men jeg leder efter en løsning der ikke bruger harddisken, som "midlertidig" lagring

http://www.eksperten.dk/spm/259027

Grunden til dette er at flere brugere kan uploade på samme tid hvorved der måske vil gå kludder i skrivning og læsning til/fra fil på disk.

Min umiddelbare løsning var at generere et filnavn ud fra session ID'et, men jeg ville helst finde en løsning der ikke bruger harddisken!

Er der nogen har gode ideer?

Koden ser pt ud som følger:

*********************************************************


public void UploadButton_Click(object sender, System.EventArgs e)
{
    UploadImagePanel.Visible = false;
    ImageUploadedPanel.Visible = true;

    string strImageUploaded = "";

    System.Drawing.Image OriginalImage;
    System.Drawing.Image ThumbnailImage;

    //Upload Image
    Stream imgStream = UploadFile.PostedFile.InputStream;
    int imgLen = UploadFile.PostedFile.ContentLength;
    string imgContentType = UploadFile.PostedFile.ContentType;
    string imgName = ImageTitle.Text;
    string imgDate = ImageDate.Text;
    byte[] binOriginalImage = new byte[imgLen];
    int n = imgStream.Read(binOriginalImage,0,imgLen);

    //Convert stream to DataType Image
    OriginalImage = System.Drawing.Image.FromStream(imgStream);
   
    //Get Height and Width og original image
    int OriginalImageHeight = (int)OriginalImage.Height;
    int OriginalImageWidth = (int)OriginalImage.Width;

    int Multiplier;
    int MaxSize = 100; // in pixels

    if(OriginalImageHeight > OriginalImageWidth)
    {
        Multiplier = Convert.ToInt32(Math.Floor(OriginalImageHeight / MaxSize));
    }
    else
    {
        Multiplier = Convert.ToInt32(Math.Ceiling(OriginalImageWidth / MaxSize));
    }

    int ThumbnailImageHeight = OriginalImageHeight / (Multiplier+1);
    int ThumbnailImageWidth = OriginalImageWidth / (Multiplier+1);

    ThumbnailImage = OriginalImage.GetThumbnailImage(ThumbnailImageWidth, ThumbnailImageHeight, null, IntPtr.Zero);

    //Save thumbnail to disk
    ThumbnailImage.Save(Server.MapPath("tempthumbnail.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);

    //Create a filestream, so the thumb can be converted to byte
    FileStream fs = new FileStream(Server.MapPath("tempthumbnail.jpg"), FileMode.OpenOrCreate, FileAccess.Read);
    byte[] binThumbnailImage = new byte[fs.Length];
    int tn = fs.Read(binThumbnailImage, 0, Convert.ToInt32(fs.Length));
    fs.Close();

    int ImageID = SaveImageToDB(imgName);
    //Save original image
    SaveImageDataToDB(binOriginalImage, imgContentType, OriginalImageHeight, OriginalImageWidth, n, 0, ImageID);
    //Save thumbnail image
    SaveImageDataToDB(binThumbnailImage, imgContentType, ThumbnailImageHeight, ThumbnailImageWidth, tn, 1, ImageID);

}


*********************************************************

/søren
Avatar billede burningice Nybegynder
14. maj 2003 - 13:59 #1
istedet for at bruge FileStream bruger du MemoryStream... Det er usandsynligt lidt du skal skrive om. Erstatte alle FileStream med MemoryStream, og lidt andet jeg ikke lige har tid til at undersøge :)
Avatar billede sbjerre Nybegynder
14. maj 2003 - 15:20 #2
ok.. takker for det.
Jeg kigger på det!
Avatar billede sbjerre Nybegynder
14. maj 2003 - 15:36 #3
ok så har jeg kigget...  :o)
Det jeg skal finde ud af er at transformere et Image Object (ThumbnailImage) til en byte[] , som jeg så kan gemme i en MSSQL.

How to?

/søren
Avatar billede burningice Nybegynder
23. maj 2003 - 11:43 #4
istedet for at save til en sti, skal du save til en stream:

MemoryStream ms = new MemoryStream();
ThumbnailImage.Save(ms, ThumbnailImage.RawFormat);
Avatar billede sbjerre Nybegynder
12. april 2004 - 02:52 #5
.
Avatar billede burningice Nybegynder
12. april 2004 - 11:17 #6
så er det ved at være lukketid, hva'... ;)
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