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

    Modifica script creazione thumbnails

    Ripropongo in maniera più ordinata un mio problema che ho postato nei giorni scorsi, in maniera un po' confusa.
    Premetto che conosco pochissimo di .NET (lavora in ASP classico). Mi sono trovato di fronte all'esigenza di usare degli script in .NET e, grazie all'aiuto di alcuni utenti di questo forum, sono riuscito a portare a termine il tutto.

    L'esigenza è:
    1. fare l'upload di un file zip contenente solo immagini e decomprimere lo zip in una cartella sul server.
    2. Creare le thumbanils delle immagini caricate e salvarle su una cartella del server.

    Per il punto 1 non ho nessun problema, uso uno script che funziona egregiamente.

    Per il punto 2 uso uno script che fa ciò che mi serve, anche se la qualità delle immagini ridimensionate non è alta. Da qualche giorno a questa parte, inoltre, lo script dà dei problemi, nel senso che a fronte di circa 200 immagini caricate (in un unico zip), una parte vengono ridimensionate nelle dimensioni corrette, altre invece, vengono ridimensionate molto più piccole.
    Considerato che devo mettere mano allo script, pensavo di modificare lo script che si occupa del ridimensionamento ed usarne un altro che sto già usando in un altro sito e che ridimensiona le immagini con l'interpolazione bicubica, dando ottimi risultati.

    Il mio problema è che l'altro script, tramite form fa l'upload di un'immagine alla volta e poi ridimensiona quell'immagine caricata.
    Io vorrei fare l'upload e l'unzip col mio primo script (che funziona bene) e poi ridimensionare le immagini col nuovo script, dicendogli però di leggere le immagini in una particolare cartella del server e non cercando una particolare immagine appena "uploadata" tramite form.

    Essendo davvero alle primissime armi con .NET, non sono in grado di modificare gli script per farli funzionare e mi servirebbe il supporto di qualcuno più esperto.

    Questa è la porzione di codice che si occupa del salvataggio delle immagini decompresse dallo zip.
    codice:
    Sub BtnUp_Click(sender As Object, e As EventArgs)
    dim strFile as string
    strFile = inputFile.PostedFile.FileName
    
    Dim strNomeFile as string
    strNomeFile = System.IO.Path.GetFileName(strFile)
    dim strPercorsoFileUpload,strPercorsoFileUnzip as string
    
    strPercorsoFileUpload =server.mappath("/public/zip")
    
    strPercorsoFileUnzip =server.mappath("/public/temp/unzip")
    
    
    inputFile.PostedFile.SaveAs( strPercorsoFileUpload & "\" & strNomeFile)
    
    scompatta(strPercorsoFileUnzip,strPercorsoFileUpload & "\" & strNomeFile,true,false)
    End Sub
    Per creare le thumbanils, vorrei usare lo script resonup.cs (che ho già testato e crea delle thumbnails di ottima qualità) che ho pubblicato qui sotto.
    Ho una pagina che fa l'upload della singola immagine (e io vorrei sostituire a questo il mio scritp che fa l'upload dello zip) e che richiama uno script resonup.cs che si occupa della creazione delle thumbanils.

    upload.aspx
    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="resonup.cs"/>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="/admin/style.css" />
    <title><asp:Literal id="titletext" runat="server"/></title>
    
    </head>
    
    <body>
    <form name="inviafile" id="inviafile" enctype="multipart/form-data" runat="server">
    
    File:
    
    <input id="File1" type="file" runat="Server"/>
    
    <input id="Submit1" type="submit" value="Upload" runat="Server" onserverclick="SubmitButton_Click"/>
    
    
    <asp:Label id="Status" runat="server"></asp:Label>       
    </form>
    </body>
    </html>
    resonup.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" : 
          case ".exif" : 
          case ".ico" : 
          case ".wmf" : 
          case ".png" : 
          case ".gif" : 
          case ".bmp" : 
          case ".tiff" : 
          case ".tif" : 
          case ".jpeg" : 
          case ".jpg" : imageFlag = true; break; 
    
          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>
    ";
           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>" + fileName + "</u>\" already exist... Upload Aborted.</span>
    ";
        }
    
      } //  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], 640.0, 480.0, "/images/resized/", 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], 185.0, 135.0, "/images/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], 66.0, 99.0, "/public/temp/", true);
    	
       Response.Redirect("chiudi.asp"); 
       }
       
       
    } // protected void SubmitButton_Click(Object sender, EventArgs e)
    Ecco qui... qualche idea?

    Grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Nessuno????

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: Non so se la mia risposta sia adeguata; vedi un po' tu

    Allora, non ho voglia di vedere e modificare tutto quel codice. Io faccio così.

    codice:
    <%@ Import Namespace="g=gdi.img" %>
    <%@ Import Namespace="System.IO" %>
    
    <script runat="server">
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
            'Dim strFile As String
            'strFile = inputFile.PostedFile.FileName
    
            'Dim strNomeFile As String
            'strNomeFile = System.IO.Path.GetFileName(strFile)
            'Dim strPercorsoFileUpload, strPercorsoFileUnzip As String
    
            'strPercorsoFileUpload = Server.MapPath("/public/zip")
    
            'strPercorsoFileUnzip = Server.MapPath("/public/temp/unzip")
    
    
            'inputFile.PostedFile.SaveAs(strPercorsoFileUpload & "\" & strNomeFile)
    
            'scompatta(strPercorsoFileUnzip, strPercorsoFileUpload & "\" & strNomeFile, True, False)
    
            creaMiniature("C:\dati\ProveNikon\images", "c:\tmp", 300)
            
            Response.Redirect("chiudi.asp")
        End Sub
        
        Protected Sub creaMiniature(ByVal directoryInput As String, ByVal directoryOutput As String, ByVal dimMax As Integer)
            Dim files As String() = Directory.GetFiles(directoryInput, "*.jpg")
            
            For i As Integer = 0 To files.Length - 1
                g.ImgResizeAndSaveToFile(files(i), dimMax, Path.Combine(directoryOutput, Path.GetFileName(files(i))))
            Next
          
        End Sub
        
    </script>

    La prima parte, punto 1, lo fa la tua procedura.
    Perciò, tutto si riduce a leggere i file di data estensione, per esempio, jpg, dalla directory delle immagini decompresse, e a creare in un'altra directory, le miniature, di buona qualità, con lo stesso nome.

    Per fare questo, utilizzo due dll, scaricate da qui:
    http://web.tiscali.it/archivio_esempi/zip/gdi.zip

    Le decomprimo e le metto nella directory bin del sito. Ed è tutto.

    ps. nella procedura semplificata che uso, salvo l'immagine con estensione jpg. La qualità è max (interpolazione bicubica); la compressione è quella media.
    Se volessi altre caratteristiche (esempio, estensione png, gif, scrittura testo su immagine, fusione di logo in immagine...) lo potrei ottenere con qualche riga di codice in più, perchè la maggior parte del lavoro è nelle dll.

    Ciao
    Pietro

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Grazie per la risposta!

    Ho provato, ma ho qualche problema.

    Nel mio file che si occupa dell'upload e dell'unzip, ad un certo punto c'è: Server.Transfer("thumbs.aspx"), che porta ad un file che si occupa della creazione delle thumbnails (di qualità bassa, però).

    Utilizzando il codice che hai postato tu, ho riscritto come segue il file thumbs.aspx (ho anche scaricato le due dll che mi hai indicato e le ho caricate nella cartella bin).

    codice:
    <%@ Page Language="VB" Trace="false" Debug="true" %>
    <%@ Import Namespace="g=gdi.img" %>
    <%@ Import Namespace="System.IO" %>
    
    <script runat="server">
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim strSorgente, strDestinazione As string
    creaMiniature(strSorgente, strDestinazione, 300)
    
    Response.Redirect("scegli_galleria.asp")
    End Sub
    
    Protected Sub creaMiniature(ByVal strSorgente As String, ByVal strDestinazione As String, ByVal dimMax As Integer)
    Dim files As String() = Directory.GetFiles(strSorgente, "*.jpg")
    
    strSorgente =server.mappath("/public/temp/unzip")
    strDestinazione =server.mappath("/public/temp/thumbs")
    
    For i As Integer = 0 To files.Length - 1
    g.ImgResizeAndSaveToFile(files(i), dimMax, Path.Combine(strDestinazione, Path.GetFileName(files(i))))
    Next
    
    End Sub
    
    </script>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Upload Files zippati</title>
    <link rel="stylesheet" type="text/css" href="/admin/style.css" />
    </head>
    <body>
    </body>
    </html>
    L'errore che mi viene restituito è:
    Exception Details: System.ArgumentNullException: Value cannot be null.
    Parameter name: path

    Source Error:
    Line 13:
    Line 14: Protected Sub creaMiniature(ByVal strSorgente As String, ByVal strDestinazione As String, ByVal dimMax As Integer)
    Line 15: Dim files As String() = Directory.GetFiles(strSorgente, "*.jpg")
    Line 16:


    Stack Trace:
    [ArgumentNullException: Value cannot be null.
    Parameter name: path]
    System.IO.Directory.GetFiles(String path, String searchPattern, SearchOption searchOption) +2051570
    System.IO.Directory.GetFiles(String path, String searchPattern) +6
    ASP.admin_gallery_thumbs_aspx.creaMiniature(String strSorgente, String strDestinazione, Int32 dimMax) in E:\Sites\miosito.com\htdocs\admin\gallery\thumbs.a spx:15
    ASP.admin_gallery_6thumbs_aspx.Page_Load(Object sender, EventArgs e) in E:\Sites\miosito.com\htdocs\admin\gallery\thumbs.a spx:9
    System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Object o, Object t, EventArgs e) +15
    System.Web.Util.CalliEventHandlerDelegateProxy.Cal lback(Object sender, EventArgs e) +33
    System.Web.UI.Control.OnLoad(EventArgs e) +99
    System.Web.UI.Control.LoadRecursive() +47
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436


  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    mi dispiace che non abbia funzionato. Vediamo un poco.

    Creo un sito vergine, nuovo. Con IIS imposto il framework del sito al 2.

    Nel sito aggiungo la directory chiamata "Bin" e ci butto del due dll.

    Adesso faccio due pagine, unzip.aspx, e creaminiature.aspx

    unzip.aspx è
    codice:
    <%@ Page Language="VB" %>
    
    <script runat="server">
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
            'salvo nella sessione la directory di input, di output e
            'la dimensione max della miniatura
            
            Me.Session("directoryInput") = Server.MapPath("/ProveNikon/images")
            Me.Session("directoryOutput") = Server.MapPath("/tmp")
            Me.Session("dimMax") = 300
            
            'esegue CreaMiniature.aspx
            Server.Transfer("CreaMiniature.aspx")
        End Sub
    </script>
    nota che salvo nella sessione i parametri che mi interessano, la directory di input, quella di output e la dimensione max delle miniature. Alla fine c'è il famoso Server.Transfer


    la pagina CreaMiniature è:
    codice:
    <%@ Page Language="VB" %>
    
    <%@ Import Namespace="g=gdi.img" %>
    <%@ Import Namespace="System.IO" %>
    
    <script runat="server">
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
            'richiamo le variabili dalla sessione
            Dim directoryInput As String = TryCast(Me.Session("directoryInput"), String)
            Dim directoryOutput As String = TryCast(Me.Session("directoryOutput"), String)
            Dim dimMax As Integer = CInt(Me.Session("dimMax"))
            
            'se esistono, creo le miniature
            If directoryInput IsNot Nothing AndAlso directoryOutput IsNot Nothing AndAlso dimMax > 0 Then
                creaMiniature(directoryInput, directoryOutput, dimMax )
            End If
            
            'trasferisco ad altra pagina
            Me.Response.Redirect("altra_pagina.asp")
            
        End Sub
        
        Protected Sub creaMiniature(ByVal directoryInput As String, ByVal directoryOutput As String, ByVal dimMax As Integer)
            Dim files As String() = Directory.GetFiles(directoryInput, "*.jpg")
            
            For i As Integer = 0 To files.Length - 1
                g.ImgResizeAndSaveToFile(files(i), dimMax, Path.Combine(directoryOutput, Path.GetFileName(files(i))))
            Next
          
        End Sub
        
    </script>
    nota che alla fine c'è il redirect ad altra pagina asp

    La directory di output deve avere i permessi di scrittura per l'utente asp.net o per l'utente everyone


    ps. a me funziona che è una bellezza Prova e fai sapere. Ciao
    Pietro

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ho fatto una prova completa. Un file asp spedisce un file di immagini jpg zippate ad un file aspx, che lo disassembla e crea le miniature, restituendo il controllo alla pagina chiamante. Se sei interessato metto il codice.
    Pietro

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Pietro, grazie per la tua disponibilità e per l'aiuto che mi hai dato.
    Col tuo ultimo suggerimento sono riuscito proprio adesso a far funzionare il tutto.

    Posto gli script.

    Nel file che fa l'upload e l'unzip, c'è un Server.Transfer("thumbs.aspx") che mi porta a questo file:
    codice:
    <%@ Page Language="VB" Trace="false" Debug="true" %>
    
    <script runat="server">
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    
    Me.Session("directoryInput") = server.mappath("/public/temp/unzip")
    Me.Session("directoryOutput") = server.mappath("/public/temp/thumbs")
    Me.Session("dimMax") = 180
    
    Server.Transfer("thumbs1.aspx")
    End Sub
    </script>
    Questo file porta a thumbs1.aspx:
    codice:
    <%@ Page Language="VB" %>
    
    <%@ Import Namespace="g=gdi.img" %>
    <%@ Import Namespace="System.IO" %>
    
    <script runat="server">
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    
    Dim directoryInput As String = TryCast(Me.Session("directoryInput"), String)
    Dim directoryOutput As String = TryCast(Me.Session("directoryOutput"), String)
    Dim dimMax As Integer = CInt(Me.Session("dimMax"))
    
    
    If directoryInput IsNot Nothing AndAlso directoryOutput IsNot Nothing AndAlso dimMax > 0 Then
    creaMiniature(directoryInput, directoryOutput, dimMax )
    End If
    
    Me.Response.Redirect("scegli_galleria.asp")
    
    End Sub
    
    Protected Sub creaMiniature(ByVal directoryInput As String, ByVal directoryOutput As String, ByVal dimMax As Integer)
    Dim files As String() = Directory.GetFiles(directoryInput, "*.jpg")
    
    For i As Integer = 0 To files.Length - 1
    g.ImgResizeAndSaveToFile(files(i), dimMax, Path.Combine(directoryOutput, Path.GetFileName(files(i))))
    Next
    
    End Sub
    </script>
    Anche se la soluzione che ho usato (grazie al tuo aiuto) funziona, posta pure la prova che hai fatto. Mi interessa sicuramente!

    Grazie ancora!

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    sono contento che funzioni
    Ti spiego la prova che ho fatto.
    Ho creato un sito exnovo chiamato prova.

    Con IIS imposto il framework 2

    Dentro creo le directory di output, "dirOutput" e "miniature", dotate di permessi di scrittura per l'utente asp.net

    Creo la directory bin dove metto le dll recuperate da qui:
    http://web.tiscali.it/archivio_esempi/zip/gdi.zip
    http://web.tiscali.it/archivio_esempi/zip/zip.zip

    (sono 4 dll)

    Aggiungo il file chiamato "web.config" dove metto l'istruzione per poter fare l'upload di file di dimensioni maggiori di 4M
    codice:
    <?xml version="1.0"?>
    <configuration>
    	<system.web>
    		<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="it-IT" uiCulture="it-IT"/>
    		<httpRuntime maxRequestLength="102400"/>
    	</system.web>
    </configuration>

    creo il file asp "upload.asp"
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <link href="Styles.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <h3>Upload immagini zippate con creazione di miniature</h3>
        <h5>upload.asp</h5>
        <form id="form1" action="upload.aspx" method="post" enctype="multipart/form-data" onsubmit="window.setTimeout(function(){document.getElementById('Submit1').disabled=true;document.getElementById('div2').style.display='';}, 0);" >
            <div id="div1">
                <input id="file1" name="file1" type="file" size="60" onkeydown="this.blur();" />
                
    
            </div>
            <hr />
            <input id="Submit1" type="submit" value="submit" />
        </form>
        
        <div id="div2" style="display:none;">
            Operazione in corso, prego attendere...
            
    
            [img]pleasewait.gif[/img]
        </div>
        <%
        dim p_messaggio
        p_messaggio = trim(request("p_messaggio"))
        if p_messaggio <> "" then
            response.Write "<div>" & p_messaggio & "</div>"
        end if
        if p_messaggio = "Operazione eseguita con successo!" then
            Set fs = Server.CreateObject ( "Scripting.FileSystemObject" )
            Set dir = fs.GetFolder( Server.MapPath("./dirOutput/miniature") )
            For Each File In dir.Files
              Response.Write( "[img][/img]"  ) 
            Next    
        
        end if
    
        %>
    
    </body>
    </html>
    creo la pagina aspx che si occupa de decompattare il file zip e creare le miniature
    codice:
    <%@ Page Language="VB" %>
    
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Collections.Generic" %>
    <%@ Import Namespace="System.Text" %>
    <%@ Import Namespace="System.Drawing" %>
    <%@ Import Namespace="System.Drawing.Text" %>
    <%@ Import Namespace="System.Drawing.Drawing2D" %>
    <%@ Import Namespace="System.Drawing.Imaging" %>
    <%@ Import Namespace="System.Web" %>
    <%@ Import Namespace="g=gdi.img" %>
    <%@ Import Namespace="z=Zip" %>
    
    
    <script runat="server">
        
        'percorso di upload 
        Dim strPercorsoFileUpload As String = Server.MapPath("~/dirOutput")
        Dim strPercorsoMiniature As String = Server.MapPath("~/dirOutput/miniature")
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim Messaggio As String = ""
            Dim fc As System.Web.HttpFileCollection = Nothing
            
            Try
                fc = Me.Request.Files
                If fc.Count = 0 Then Throw New Exception("Nessun file zip importato")
                
                For i As Integer = 0 To fc.Count - 1
                    Dim pf As System.Web.HttpPostedFile = fc(i)
                    If pf.FileName = "" OrElse pf.ContentLength = 0 Then
                        Throw New Exception("Nessun file zip importato")
                    End If
                    'salvo il file zip e lo scompatto
                    uploadAndUnzip(pf)
                Next
                'creo le miniature
                creaMiniature(strPercorsoFileUpload, strPercorsoMiniature, 300)
                
                'svuoto la directory di output
                svuotaDirectory(strPercorsoFileUpload)
               
                Messaggio = "Operazione eseguita con successo!"
                
                
            Catch ex As Exception
                Messaggio = ex.Message
            End Try
            
            'redireziono sulla pagina chiamante
            Me.Response.Redirect("upload.asp?p_messaggio=" & Me.Server.UrlEncode(Messaggio))
    
        End Sub
        
        
        Private Sub uploadAndUnzip(ByVal pf As System.Web.HttpPostedFile)
            'ricavo il nome del file con percorso 
            Dim strFile As String = pf.FileName
    
            'ricavo il nome del file senza percorso 
            Dim strNomeFile As String = Path.GetFileName(strFile)
    
            'ricavo l'estensione del file
            Dim strEstensioneFile As String = Path.GetExtension(strFile).ToLower()
    
            If strEstensioneFile.ToLower <> ".zip" Then
                Throw (New Exception("Bisogna importare un file con estensione .zip"))
            End If
    
            'file trasferito 
            Dim strPercorsoFileUploadFile As String = Path.Combine(strPercorsoFileUpload, strNomeFile)
    
            'salvataggio file zip
            pf.SaveAs(strPercorsoFileUploadFile)
    
            'decomprimo i file
            z.UnZip(strPercorsoFileUploadFile, strPercorsoFileUpload)
            
        End Sub
        
        Protected Sub creaMiniature(ByVal directoryInput As String, ByVal directoryOutput As String, ByVal dimMax As Integer)
            Dim files As String() = Directory.GetFiles(directoryInput, "*.jpg")
            
            For i As Integer = 0 To files.Length - 1
                g.ImgResizeAndSaveToFile(files(i), dimMax, Path.Combine(directoryOutput, Path.GetFileName(files(i))))
            Next
          
        End Sub
    
        Protected Sub svuotaDirectory(ByVal directoryOutput As String)
            Dim files As String() = Directory.GetFiles(directoryOutput)
            
            For i As Integer = 0 To files.Length - 1
                File.Delete(files(i))
            Next
            
        End Sub
        
    </script>
    E finalmente... lo provo . Fai sapere.
    Pietro

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Mille grazie Pietro!

    Scarico tutti i file e copio tutti gli script, stasera provo e poi ti faccio sapere.

    Solo una domanda.
    Il file .NET che decomprime lo zip e crea le miniature lo chiami upload.aspx? E' il file che trovo in action nel form di upload.asp?

    Ciao!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.