1.245 messaggi dal 03 marzo 2004
E bravo Ricky :) Sicuramente sarà utile!

E' la prima volta che faccio uso di DLL già pronte quindi spero di non fare troppi pasticci...
Ho salvato HttpImgUpload.dll nella cartella bin della mia sottocartella arerariservata (quella da dove userò l'upload).
Nella pagina da dove eseguirò l'upload basta aggiungere using sistem.web giusto?
Essendo che ho una form con diversi campi (tra cui quello del file) che andranno salvati su un db conviene che prima salvi il file e poi salvi i dati sul db giusto?

L'infinito è... ASP.NET
Devi registrare la dll nell'ambito del tuo progetto tramite
"Add references".

Se guardi nel CHM trovi un paio di esempi su come usare l'oggetto (ti metto un altro esempio qua sotto, non si sa mai). E' tutto incapsulato per cui non ci sono grosse cose da capire. L'unica cosa su cui stare attenti è il fatto che bisogna gestire le eccezioni dal codice chiamante.

Infatti il componente ti restituisce diversi messaggi di errore in seguito alle diverse situazioni di anomalia: puoi gestire le anomalie in funzione del codice/messaggio di errore ritornato. Non fare una gestione degli errori più evoluta è stata una scelta implementativa di questa prima versione.

Ecco l'esempio.

Try

If ((Not (filImg.PostedFile Is Nothing)) And (filImg.PostedFile.ContentType.Substring(0, 5) = "image")) Then

Dim objUpload As New HttpImgUpload(filImg.PostedFile, ConfigurationSettings.AppSettings("UploadFolder").Replace("/", "\\"), Session("ProductCode") & "_HR.JPG", Int32.Parse(ConfigurationSettings.AppSettings("UploadUpperBound")), 300, 300)

' High resolution
objUpload.DestinationFolder = System.Configuration.ConfigurationSettings.AppSettings("UploadFolderHR").Replace("/", "\\")
objUpload.ImageFilename = Session("ProductCode") & "_High.JPG"
objUpload.Format = Imaging.ImageFormat.Jpeg
objUpload.SaveImage()

' Medium resolution
objUpload.ThumbnailFolder = System.Configuration.ConfigurationSettings.AppSettings("UploadFolderMR").Replace("/", "\\")
objUpload.ThumbnailFilename = Session("ProductCode") & "_Medium.JPG"
objUpload.ThumbnailFormat = Imaging.ImageFormat.Jpeg
objUpload.SaveThumbnail(200, 200)

' Low resolution
objUpload.ThumbnailFolder = System.Configuration.ConfigurationSettings.AppSettings("UploadFolderLR").Replace("/", "\\")
objUpload.ThumbnailFilename = Session("ProductCode") & "_Low.JPG"
objUpload.ThumbnailFormat = Imaging.ImageFormat.Jpeg
objUpload.SaveThumbnail(100, 100)

objUpload.Dispose()

Else
' Gestisci l'anomalia
End If

Catch ex As Exception
' Gestisci l'anomalia
End Try



Se hai dubbi o problemi, fammi sapere.

Ciao, Ricky.

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
1.245 messaggi dal 03 marzo 2004
Allora mi sono messa all'opera su un progetto di prova...
Ho registrato la dll e fino a qui tutto ok...

Ho creato la pagina html così:
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="upload2.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
    <title>WebForm1</title>
  </HEAD>
  <body>
    <form id="Form1" method="post" runat="server" enctype="multipart/form-data">
      <INPUT id="Lfile" type="file" name="Lfile" runat="server" class="txtbox">
      <BR>
      <asp:Button id="Button1" runat="server" Text="ButtonOk"></asp:Button><BR>
      <asp:Label id="Msg" runat="server">Label</asp:Label>
    </form>
  </body>
</HTML>


La pagina aspx è questa:
...
    private void Button1_Click(object sender, System.EventArgs e)
    {
      try 
      {
        if ((Not (filImg.PostedFile == Nothing)) && (filImg.PostedFile.ContentType.Substring(0, 5) == "image"))
        {
          Dim objUpload = New HttpImgUpload(filImg.PostedFile, ConfigurationSettings.AppSettings("UploadFolder").Replace("/", "\\"), Session("ProductCode") & "_HR.JPG", Int32.Parse(ConfigurationSettings.AppSettings("UploadUpperBound")), 300, 300);
          objUpload.DestinationFolder = System.Configuration.ConfigurationSettings.AppSettings("UploadFolderHR").Replace("/", "\\");
          objUpload.ImageFilename = Session("ProductCode") & "_High.JPG";
          objUpload.Format = Imaging.ImageFormat.Jpeg; 
          objUpload.SaveImage(); 
        }
        else
        {
        //  intercetto l'errore e lo metto sulla label
        }
      }
      catch
      {
        // eccezione 1
      }
      finally
      {
        // eccezione2
      }
    }
  }
}

Ma ho un errore di traduzione dal Vb al C#... Mi segnala un errore di punteggiatura su HttpImgUpload nella prima riga dell'else!

Inoltre la cartella su cui devo salvare i file la devo segnalare nel web config?

Grazie - Sonia

L'infinito è... ASP.NET
In C# il valore nullo è null, mentre in VB è Nothing.

Puoi usare anche semplicemente una stringa: "Upload".
Io metto sempre i parametri di funzionamento nel web.config per un discorso di facilità successiva di deployment, ma se stai facendo alcune prove, puoi mettere direttamente la stringa.

Occhio che la cartella di destinazione deve avere i permessi di lettura/scrittura per l'utente ASPNET.

Ciao, Ricky.

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
1.245 messaggi dal 03 marzo 2004
Grazie rickyr rapidissimo :)

Allora ho una sfilza di domande:

Prima tra tutte non capisco COSA faccia il codice... Ci provo a dire quello che ho capito...
if ((Not (filImg.PostedFile == Null)) && (filImg.PostedFile.ContentType.Substring(0, 5) == "image"))
Se ((Falso (il file uplodato non c'è) e ( secnda condizione non l'ho capita)
Dim objUpload = New HttpImgUpload(filImg.PostedFile, ConfigurationSettings.AppSettings("UploadFolder").Replace("/", "\\"), Session("ProductCode") & "_HR.JPG", Int32.Parse(ConfigurationSettings.AppSettings("UploadUpperBound")), 300, 300);
Gli dico dove salvare il file??? (in questa riga continuo ad avere l'errore di sintassi su HttpImgUpload)
objUpload.DestinationFolder = System.Configuration.ConfigurationSettings.AppSettings("UploadFolderHR").Replace("/", "\\");
Gli dico la directory di destinazione? uploadfolderhr cos'è?
objUpload.ImageFilename = Session("ProductCode") & "_High.JPG";
objUpload.Format = Imaging.ImageFormat.Jpeg; 
objUpload.SaveImage(); 
Specifico il formato immagine e salvo l'immagine (in questo caso immagino che se l'img non è nel formato specificato ci sia un errore che devo poi gestire sotto)

Il mio web config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
  <add key="UploadFolder" value="C:\Inetpub\wwwroot\uploadfile2\myPath\" />
  </appSettings>
  <system.web>
...

Modificato da Sonika il 29 settembre 2004 10.57 -

L'infinito è... ASP.NET
1. La seconda condizione indica che il content-type dell'oggetto postato tramite metodo post e enctype multipart è una immagine.

2. In realtà glielo hai già detto nel costruttore. Puoi ridefinire la destinazione tramite la proprietà.

HttpImgUpload objUpload = new HttpImgUpload (filImg.PostedFile, "myPath", "test.jpg", 250000, 300, 300); 
objUpload.DestinationFolder = "myPath"; // opzionale
objUpload.ImageFilename = "test.jpg";  // opzionale
objUpload.Format = Imaging.ImageFormat.Jpeg; // opzionale
objUpload.SaveImage(); 


3. Se nel web.config hai messo alcuni parametri, li inserisci al posto delle dei valori. Attenzione che i percorsi devono essere relativi.

Il tuo web.config deve essere:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<appSettings> 
<add key="UploadFolder" value="myPath" /> 
</appSettings> 
<system.web> 
...


e il codice diventa:

HttpImgUpload objUpload = new HttpImgUpload (filImg.PostedFile, System.Configuration.ConfigurationSettings.AppSettings("UploadFolder"), "test.jpg", 250000, 300, 300); 
objUpload.DestinationFolder = System.Configuration.ConfigurationSettings.AppSettings("UploadFolder"); // opzionale
objUpload.ImageFilename = "test.jpg";  // opzionale
objUpload.Format = Imaging.ImageFormat.Jpeg; // opzionale
objUpload.SaveImage(); 


Ti ricordo che esistono vari costruttori. Non è necessario usare quello più completo, puoi usare anche gli altri. Guarda la documentazione...

Ciao, Ricky.

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
1.245 messaggi dal 03 marzo 2004
1- AppSetting l'ho scritto con A e S maiuscole
2- caterva di errori, devo mettere uno using?
if ((Not (filImg.PostedFile == Null)) && (filImg.PostedFile.ContentType.Substring(0, 5) == "image"))

c:\inetpub\wwwroot\upload2\WebForm1.aspx.cs(54): The type or namespace name 'filImg' could not be found (are you missing a using directive or an assembly reference?)
HttpImgUpload objUpload = new HttpImgUpload (filImg.PostedFile, System.Configuration.ConfigurationSettings.AppSettings("UploadFolder"), "test.jpg", 250000, 300, 300); 
c:\inetpub\wwwroot\upload2\WebForm1.aspx.cs(56): The type or namespace name 'filImg' could not be found (are you missing a using directive or an assembly reference?)
c:\inetpub\wwwroot\upload2\WebForm1.aspx.cs(56): 'System.Configuration.ConfigurationSettings.AppSettings' denotes a 'property' where a 'method' was expected
objUpload.DestinationFolder = System.Configuration.ConfigurationSettings.AppSettings("UploadFolder"); // opzionale 
c:\inetpub\wwwroot\upload2\WebForm1.aspx.cs(57): 'System.Configuration.ConfigurationSettings' does not contain a definition for 'appSettings'
          objUpload.Format = Imaging.ImageFormat.Jpeg; // opzionale 
c:\inetpub\wwwroot\upload2\WebForm1.aspx.cs(59): The type or namespace name 'Imaging' could not be found (are you missing a using directive or an assembly reference?)

L'infinito è... ASP.NET
1. Tu hai definito nella UI:
<INPUT id="Lfile" type="file" name="Lfile"...
...per cui al posto di "filImg" devi mettere "Lfile".

2. Scusa.. errore mio... in C# si usano le parentesi quadre per gli item delle collection.

In C# si scrive
System.Configuration.ConfigurationSettings.AppSettings
["UploadFolder"]

e non
System.Configuration.ConfigurationSettings.AppSettings
("UploadFolder")
.

3. Inoltre devi importare il namespace System.Drawing.

Ciao, Ricky.
Modificato da rickyvr il 29 settembre 2004 11.54 -

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.