Come determinare altezza e larghezza di una immagine caricata tramite il controllo upload in asp.net

Capita spesso di caricare tramite pagina Asp.Net un'immagine.

Il supporto fornito dal Framework .Net consente di farlo in maniera molto più semplice che in passato accedendo alla proprietà PostedFile del controllo INPUT di tipo file modificato per essere eseguito sul server.

Ad esempio:

<input id="imgUpload" type="file" runat="server">

La necessità spesso è quella di verificare il tipo di file inviato oppure altezza e larghezza in pixel per evitare che venga caricata un'immagine troppo grande.

A seguito dell'evento di upload si può fare:

'Creo un oggetto immagine leggendo lo stream di upload

Dim imgUploaded As System.Drawing.Image

imgUploaded = System.Drawing.Image.FromStream(imgUpload.PostedFile.InputStream)

'Determino altezza e larghezza dell'immagine

Dim imgUploadedWidth As Single = imgUploaded.PhysicalDimension.Width

Dim imgUploadedHeight As Single = imgUploaded.PhysicalDimension.Height

 'A questo punto posso fare tutti i controlli del caso

If imgUploadedWidth > 120 Or imgUploadedHeight > 60 Then

Me.ErrorMessageImg.Text = "Le dimensioni massime dell'immagine possono essere di 120*60. Caricare un'immagine più piccola."

Return

End If

Try

ImageBrowse.PostedFile.SaveAs(Server.MapPath(virtualPath))

Catch ex As Exception

Me.ErrorMessageImg.Text = "Errore: impossibile caricare l'immagine sul sito. " + ex.Message.ToString

Return

End Try

Share

Disabilitare i performance counters delle Enterprise Library

Stanco degli svariati errori che le Enterprise Library danno provando di accedere ai Performance Counters, ai WMI, all'event viewer ecc. ecc. ho trovato un rapido modo per disabilitarli (il che spero che provochi anche un aumento di prestazioni).

Per fare ciò:

  1. Aprire con visual studio la soluzione completa:
    Start->Programmi ->Microsoft Patterns and Practices -> Enterprise Library -> Applications Blocks -> Enterprise Library..sln
  2. Cercare il progetto "Common", premere il tasto destro e selezionare "Properties"
  3. Nelle  “Configuration Properties”  selezionare l'opzione "Build"
  4. Nella sezione  "Conditional Build" rimuovere tutto tranne  “DEBUG;TRACE”"
  5. Ricompilare l'intera soluzione (verificare in "Common" se sono rimasti effettivamente solo  “DEBUG;TRACE”  in quanto al primo giro non me li aveva salvati)
  6. A questo punto bisogna riportare le DLL nella GAC usando:
    Start->Programmi ->Microsoft Patterns and Practices -> Copy assemblies to bin directory
  7. Se non si usa la GAC è necessario ricopiare le DLL usate nella directory bin dell'applicazione
  8. Per sicurezza rimuovere e ricreare le reference nella vostra applicazione e ricompilarla
  9. Mettete tutto sul server di produzione
  10. E finalmente niente più errori

 (Thanks to:  Sashidhar Kokku at http://dotnetjunkies.com/WebLog/sskokku/archive/2005/03/25/61376.aspx)

Share

SecurityException utilizzando le Microsoft Enterprise Library

Utilizzando le Microsoft Enterprise Library si può ricevere il seguente errore:

System.Security.SecurityException: Requested registry access is not allowed

In genere ciò non avviene sulla propria workstation di sviluppo ma quando si installa l'applicazione sul web server di produzione (dal cliente oppure in hosting).

Il motivo è che le Enterprise Library per funzionare correttamente richiedono la creazione nel registro di appositi Performance Counter

Quindi è necessario aggiungere alcune chiavi di registro. Si possono inserire manualmente le righe seguenti nel registro oppure si possono copiare in una file con estensione .reg (ad esempio enterprise.reg) e facendoci poi doppio click sopra avviene automaticamente l'installazione.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEnterprise Library Backup Sink]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEnterprise Library Caching]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEnterprise Library Configuration]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEnterprise Library Cryptography]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEnterprise Library Data Service]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEnterprise Library Distributor Service]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEntLib Exception Handler]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEnterprise Library Exception Handling]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEnterprise Library Instrumentation]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEnterprise Library Logging Service]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEnterprise Library Security]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationEnterprise Library Security Cryptography]
"EventMessageFile"="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll"

Alcuni post indicano come strettamente necessaria esclusivamente l'ultima chiave ma da me non ha funzionato finchè non le ho installate tutte.

Aggiornamento: "Come disabilitare i performance counters nelle Enterprise Library"

Share