Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764

    Upload e resize + passaggio valore in querystring da pagina ASP Classic

    Sto usando un vecchio script (di Riddick) di upload di immagini con ridimensionamento, che funziona egregiamente.
    Vorrei fare una modifica, ma senza successo (per mia imperizia).

    Richiamo la pagina di upload da una pagina scritta in ASP Classic e vorrei passare in querystring un valore, da recuperare e usare nel codice ASP.Net.

    Questa è la pagina carica_foto.aspx, alla quale vorrei accordare la querystring, da usare poi nel file ridimensiona.cs.

    codice:
    %@ Page Language="C#" LCID=1040 Debug="true" Trace="false" %>
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Drawing" %>
    <%@ Import Namespace="System.Drawing.Imaging" %>
    <%@ Import Namespace="System.Drawing.Drawing2D" %>
    <%@ Import Namespace="System.Globalization" %>
    <%@ Import Namespace="System.Web.UI.HtmlControls" %>
    
    <script Language="C#" runat="server" src="ridimensiona.cs"/>
    
    <!doctype html>
    <html lang="it">
    <head>
      <title><asp:Literal id="titletext" runat="server"/></title>
      
    </head>
    
    <body>
        <form name="inviafile" id="inviafile" enctype="multipart/form-data" runat="server"><br>
         File:<br />
         <input id="File1" type="file" runat="Server"/><br>
         <input id="Submit1" type="submit" value="Upload" runat="Server" onserverclick="SubmitButton_Click"/>
         <br>
         <asp:Label id="Status" runat="server"></asp:Label>       
        </form>
    </body>
    </html>

    Questo è il file ridimensiona.cs

    codice:
    void Page_Load(object sender, System.EventArgs e)
      {
      
      } // void Page_Load(object sender, System.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 += "";
            } // 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)  
      
    protected void SubmitButton_Click(Object sender, EventArgs e)
    {
      HttpFileCollection uploadedFiles = Request.Files;
    
      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], 1800.0, 1200.0, "/images/foto/", 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], 640.0, 480.0, "/images/daily_news/foto/thumbs/", 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).
        
        // Cartella temporanea per scrivere poi nel db
        UploadAndResizeAnImage(uploadedFiles[i], 1800.0, 1200.0, "/images/foto/temp/", true);
        
       Response.Redirect("chiudi.asp"); 
       }
       
       
    } // protected void SubmitButton_Click(Object sender, EventArgs e)
    Vorrei passare in querystring un id numerico (per esempio: 123456) ed inserirlo qui:
    UploadAndResizeAnImage(uploadedFiles[i], 1800.0, 1200.0, "/images/foto/", true);
    in modo da ottenere il percorso /images/foto/123456.

    Qualche suggerimento?
    Grazie
    Ultima modifica di Roby140569; 02-04-2018 a 17:49

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Ho risolto così.

    codice:
    protected void SubmitButton_Click(Object sender, EventArgs e)
    {
      HttpFileCollection uploadedFiles = Request.Files;
      String id = Request.QueryString["id"];
    
      for (int i = 0; i < uploadedFiles.Count; i ++)  
       {
    
        UploadAndResizeAnImage(uploadedFiles[i], 1800.0, 1200.0, "/images/foto/" + id, true);
      
       Response.Redirect("chiudi.asp"); 
       }  
       
    }

  3. #3

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Quote Originariamente inviata da djciko Visualizza il messaggio
    non vedo qual'era la difficoltà
    Boh, non ci arrivavo...

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Sempre a riguardo del codice di Riddick che ho postato in questo topic, ho un problema con le immagini: se carico un'immagine verticale, me la ruota di 90° in senso antiorario.
    Sembra che non funzioni il controllo su larghezza e altezza della foto o che non capisca quando la foto è verticale.
    Qualche idea?

  6. #6

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.