Generering af thumbnails uden brug af HD
HejJeg 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
