using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;
using System.IO;
using System.Data;
using System.Drawing.Drawing2D;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
public partial class insert_image : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
bool IsImage(string fileName)
{
string ext = Path.GetExtension(fileName).ToLower();
bool imageFlag = false;
if (ext != null)
{
switch (ext)
{
case ".emf": // Enhanced Windows metafile image format
case ".exif": // Exchangable Image Format
case ".ico": // Windows icon image format (extension .ico)
case ".wmf": // Windows metafile image format (extension .wmf)
case ".png": // Specifies the W3C Portable Network Graphics image format (extension .png)
case ".gif": // Graphics Interchange Format image format (extension .gif)
case ".bmp": //Bitmap image format (extension .bmp)
case ".tiff": // Tag Image File Format (extension .tif)
case ".tif": // Tag Image File Format (extension .tif)
case ".jpeg": // Joint Photographic Experts Group image format (extensions .jpg, .jpeg)
case ".jpg": imageFlag = true; break; // Joint Photographic Experts Group image format (extensions .jpg, .jpeg)
default: imageFlag = false; break; // Not a supported file type.
} // switch (ext)
} // if (ext != null)
else
imageFlag = false;
return imageFlag;
} // bool IsImage(string fileName)
void CalcolaAspectRatio(double orgWidth, double orgHeight, ref double newWidth, ref double newHeight)
{
// Se le dimensioni dell'immagine originale e quelle nuove coincidono non facciamo nulla.
if ((orgWidth == newWidth) && (orgHeight == newHeight)) return;
// Se le dimensioni originali dell'immagine sono minori di quelle desiderate lasciamo stare.
// In pratica NON facciamo l'ingrandimento della stessa.
if ((newWidth > orgWidth) && (newHeight > orgHeight))
{
newWidth = orgWidth;
newHeight = orgHeight;
return;
}
double resw = newWidth;
double resh = newHeight;
double aw = orgWidth / orgHeight; // fattore larghezza.
double ah = orgHeight / orgWidth; // fattore altezza.
// Se l'immagine è più piccola del Thumbnail forziamo le dimensioni di
// quest'ultimo alle dimensioni dell'immagine.
if (resw > orgWidth) resw = orgWidth;
if (resh > orgHeight) resh = orgHeight;
// Se le dimensioni dell'immagine e del Thumbnail corrispondono non facciamo nulla.
// quindi se l'immagine è quadrata...
if (orgWidth != orgHeight)
{
// Se l'immagine non è quadrata
// continuiamo a fare i nostri controlli per calcolarne le
// giuste dimensioni e quindi creare la nostra nuova immagine con
// l'aspectratio corretto.
// Se l'immagine è più larga che alta
if (orgWidth > orgHeight)
{
// L > H => L = tL
// La larghezza del TN sarà quella da noi stabilita
// quindi dobbiamo solo assegnarla.
resw = resw;
// L'altezza del TN invece dovrà essere ricalcolata
// in proporzione alla larghezza dell'immagine originale.
// L > H => tH = tL * (H / L)
resh = ah * resw;
} // if (tmporgWidth > tmporgHeight)
else
{
// Altrimenti se l'immagine è più alta
if (orgWidth < orgHeight)
{
// L < H => H = tH
// L'altezza del TN sarà quella da noi stabilita
// quindi dobbiamo solo assegnarla.
resh = resh;
// La larghezza del TN invece dovrà essere ricalcolata
// in proporzione alla altezza dell'immagine originale.
// L < H => tL = tH * (L / H)
resw = aw * resh;
} // if (orgWidth < orgHeight)
} // else
} // if (orgWidth != orgHeight)
// assegnamo i valori calcolati alle nostre due variabili ed il gioco è fatto.
newWidth = resw;
newHeight = resh;
} // void CalcolaAspectRatio(double orgWidth, double orgHeight, ref double newWidth, ref double newHeight)
void UploadAndResizeAnImage(HttpPostedFile file, double newWidth, double newHeight, string virPath, bool overwrite)
{
string destPath = ".";
double resWidth = 1.0;
double resHeight = 1.0;
bool owr = false;
bool exist = false;
if (virPath != "") destPath = virPath;
if (newWidth > 0) resWidth = newWidth;
if (newHeight > 0) resHeight = newHeight;
if (overwrite)
owr = true;
else
owr = false;
int pathCheck = (destPath.Substring(destPath.LastIndexOf('/') + 1)).Length;
if (pathCheck > 0) destPath += "/";
string fileName = Path.GetFileName(file.FileName);
string estensione = Path.GetExtension(file.FileName).ToLower();
ImageCodecInfo[] imgCodec = ImageCodecInfo.GetImageEncoders();
EncoderParameters encPars = new EncoderParameters(2);
EncoderParameter encPar1 = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
EncoderParameter encPar2 = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, 100L);
encPars.Param[0] = encPar1;
encPars.Param[1] = encPar2;
destPath = Server.MapPath(destPath);
exist = File.Exists(destPath + fileName);
if (!exist && (fileName.Length != 0) || owr)
{
if (!IsImage(fileName))
{
if (fileName.Length != 0)
Status.Text += "<span style=\"color:Red;\">File '" + fileName + "' is not a valid image format. Upload... Aborted.</span><br>";
return;
} // if (!IsImage(fileName))
using (System.Drawing.Image image = System.Drawing.Image.FromStream(file.InputStream))
{
CalcolaAspectRatio(image.Width, image.Height, ref resWidth, ref resHeight);
using (Bitmap bitmap = new Bitmap((int)(resWidth), (int)(resHeight)))
{
string message = "Uploaded";
bitmap.SetResolution(image.HorizontalResolution, image.VerticalResolution);
Graphics g = Graphics.FromImage(bitmap);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.DrawImage(image, new Rectangle(0, 0, (int)(resWidth), (int)(resHeight)));
g.Dispose();
if (exist && owr)
{
message = "OverWritted";
try
{
File.Delete(destPath + fileName);
}
catch (IOException ioe)
{
message = "<div id=\"error\">Error: " + ioe.GetType().Name + ": The write operation could not be performed because the specified part of the file is locked. Not OverWritted</div>";
}
} // if (exist && owr)
if ((estensione == ".jpg") || (estensione == ".jpeg"))
bitmap.Save(destPath + fileName, imgCodec[1], encPars);
else
bitmap.Save(destPath + fileName, image.RawFormat);
Status.Text += "<span style=\"color:Green;\">File '" + fileName + " @ [" + (int)(image.Width) + "px X " + (int)(image.Height) + "px]' " + message + " with this new size [" + (int)(resWidth) + "px X " + (int)(resHeight) + "px]</span><br>";
} // using(Bitmap bitmap = new Bitmap( (int)(resWidth), (int)(resHeight)))
} // using(Image image = Image.FromFile(file))
} // if (!exist && (fileName.Length != 0) || owr)
else
{
if (exist && (!owr))
Status.Text += "<span style=\"color:Red;\">Error : The file \"<u><b><i>" + fileName + "</i></b></u>\" already exist... Upload Aborted.</span><br>";
}
} // void UploadAndResizeAnImage(HttpPostedFile file, double newWidth, double newHeight, string virPath, bool overwrite)
//Inizio Test1 dello script
int GetUserID()
{
string userID = "0";
// C'è qualcosa nella querystring?
if (Request.QueryString.Count != 0)
{
if (Request.QueryString["userid"] != null)
userID = Request.QueryString["userid"];
else
userID = "0";
}
return (Convert.ToInt32(userID));
}
//Fine Test1 dello script
void InserisciNomiDeiFilesNelDB_Access(string fileList, char token, string Categoria)
{
//string fileName = Server.MapPath("image_insert/") + FileUpload1.FileName;
// Estraggo dalla lista concatenata i nomi dei file e ne creo un array di stringhe.
string[] fileListSplitted = fileList.Split(new Char[] { token });
// Conto quante stringhe ne sono uscite
int fLS = fileListSplitted.Length;
string fileName = "";
Status.Text += "<br><hr>Inserimento dei dati nel DataBase : <br><br>";
foreach (string s in fileListSplitted)
{
if (s != "")
{
fileName = s;
// Qui inserite la parte di codice per l'inserimento vero e proprio nel DataBase
int userID = GetUserID();
string connString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("App_Data/Immagini.mdb") + ";";
string sqlString = "INSERT INTO [Privata3] (ID,descrizione,immagine) VALUES ('" + userID + "','" + fileName + "', '" + Categoria + "');";
using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connString))
{
conn.Open();
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(sqlString, conn);
try
{
cmd.ExecuteNonQuery();
Status.Text += "<span style=\"color:Green;\">File '" + fileName + "' Inserito correttamente. <b>Ok!</b><br></span>";
}
catch (Exception ex)
{
// Response.Write("<br>Si è verificato un errore durante l'esecuzione dello script SQL corrente.<br>");
Status.Text += "<span style=\"color:Red;\">Errore : " + ex.Message + "</span><br>";
}
finally
{
conn.Close();
}
} // using (OleDbConnection conn = new OleDbConnection(connString))
// Fine codice per inserimento nel DataBase
}
} // foreach (string s in fileListSplitted)
}
protected void SubmitButton_Click(Object sender, EventArgs e)
{
HttpFileCollection uploadedFiles = Request.Files;
Status.Text = "";
string ListaNomi = "";
string Categoria = "Default";
if ((categoria.Text != "") && ((categoria.Text.ToString()).Length > 0)) Categoria = categoria.Text;
for (int i = 0; i < uploadedFiles.Count; i++)
{
// Qui sotto definisci le dimensioni che vuoi, la cartella di destinazione
// e se l'applicazione deve sovrascrivere o no i files preesistenti.
//
// UploadAndResizeAnImage(HttpPostedFile file, double newWidth, double newHeight, string virPath, bool overwrite)
//
// Quindi se scrivo come qui sotto :
UploadAndResizeAnImage(uploadedFiles[i], 1024.0, 768.0, "image_insert/", true);
// significa che voglio che ogni immagine inviata (uploadedFiles[i])
// venga ridimensionata a 1024x768 (tenendo conto però delle proporzioni originali)
// e che se il file esiste non deve essere sovrascritto (overwrite = false).
// Chiaro? Più di così ;)
// Vogliamo pure i Thumbnails??? allora aggiungiamo, sempre in questo ciclo for :
UploadAndResizeAnImage(uploadedFiles[i], 150.0, 150.0, "image_insert/miniature/", true);
// significa che voglio che ogni immagine inviata (uploadedFiles[i])
// venga ridimensionata a 150x150 (tenendo conto però delle proporzioni originali)
// e che se il file esiste non deve essere sovrascritto (overwrite = false).
// Creiamo una lista concatenata dei file processati
if (uploadedFiles[i].FileName != "")
{
// Se serve recuperare il nome del file per inserirlo in un DB lo potete recuperare qui.
// Consiglio di creare una lista concatenata di stringhe separate da un carattere
//( nel nostro caso è bene usare un carattere che non è possibile usare nel nome del file cioè "|" )
// ListaNomi += Path.GetFileName(uploadedFiles[i].FileName) + "|";
ListaNomi += Path.GetExtension(uploadedFiles[i].FileName) + "|";
}
}
InserisciNomiDeiFilesNelDB_Access(ListaNomi, '|', Categoria);
}
}// protected void SubmitButton_Click(Object sender, EventArgs e)
non so come fare dimmi tu...