Upload Asp.net

mercoledì 05 novembre 2003 - 17.42

6969 Profilo | Junior Member

In una procedura di Upload sto incontrando difficoltà solo per il fatto che i file che devono essere caricati non sono dei tipi noti (cioè predefiniti, come ad ex.: text, image,...). L'estensione dei file che devono essere caricati è alfanumerica (ex.: *.02D,*.03X,...) oppure *.pdd.
Utilizzando la proprietà ContentType della classe HtttpPostedFile mi viene consentito di discriminare i file solo in base al tipo (o sottotipo) e non alla particolare estensione.
Cosa mi consigliate di fare? Vi ringrazio per qualsiasi consiglio, ciao alessandro.

Brainkiller Profilo | Guru

Ciao,
Alessandro, come no?
Prova a guardare nell'area Tips & Tricks questo esempio di Upload File.
http://www.dotnethell.it/Tips/Tip.aspx?TipID=67

Puoi recuperare il nome usando la proprietà .Filename dell'oggetto HttpPostedFile e dopo eventualmente usare la Path.GetExtension(<nomedelfile>) per recuperare la tua estensione .pdd piuttosto che .exe o altro.
Da qui puoi negare o garantire la scrittura del file su disco e quindi l'upload oppure rimandare l'utente ad un messaggio d'errore.
Mi sembra abb. chiaro.
Facci sapere.
Ciao

David

6969 Profilo | Junior Member

Caro David,
ti ringrazio per i consigli, tutto OK.

A presto, alessandro.

6969 Profilo | Junior Member

Ciao a tutti,
sempre in riferimento all' Upload ho difficoltà nel confrontare le estensioni alfanumeriche (.02X, 03D,...). Dove X e D sono fisse e i numeri possono invece variare. L'IF che vorrei funzionasse é:

if StandardExtensionFile=".pdd" or StandardExtensionFile=".##x" or_ StandardExtensionFile=".##d" then...

e l'intero script (in VB.NET) che metto a disposizione di tutti è:

Sub Button_Upload(s As Object, e As EventArgs)

' extract the filename part from the full path of the posted file
dim fileName as string = System.IO.Path.GetFileName(InputFileUp.PostedFile.FileName)
' extract the Extension from fileName
dim ExtensionFile as string = System.IO.Path.GetExtension(fileName)
dim StandardExtensionFile as string
StandardExtensionFile = ExtensionFile.ToLower

if StandardExtensionFile=".pdd" or StandardExtensionFile=".##x" or StandardExtensionFile=".##d" then

' retrieve the destination dir path
dim destDir as string = Server.MapPath ("/UploadFile")
' combine the destination directory with the filename
dim destPath As String = System.IO.Path.Combine(destDir, fileName)
' save the file on the server
InputFileUp.PostedFile.SaveAs(destPath)

Label1.Visible=True
Label1.Text= StandardExtensionFile
else
Label1.Visible=True
end if

End sub

Il problema sono i caratteri ##. Cosa mi consigliate?

Vi ringrazio. Per David: non preoccuparti se non hai tempo, cmq grazie. Ale

Brainkiller Profilo | Guru

Ciao,
allora immagino che tu con il simbolo # volevi indicare una qualsiasi cifra no? Una specie di carattere jolly, così si chiamano. Allora, le opzioni sono tre, puoi usare la funzione VB.NET IsNumeric e passargli i due caratteri dell'estensione che ti servono quindi se è per esempio ".02X" passi a IsNumeric "02" la quale ti ritorna vero se sono numeri oppure falso se esiste una lettera.
Oppure, puoi costruire un controllo customizzato, personalizzato, tuo, in cui controlli se il primo carattere è una qualsiasi cifra fra 0 e 9 e così anche per il secondo.
Oppure ancora industriarti e se non le conosci ancora studiarti le regular expressions che sono fatte apposta per questi tipi di operazioni.

ciao
David

6969 Profilo | Junior Member

Grazie David dei consigli,

cmq io ho adottato un'altra soluzione (aggirando il problema).

Dato che i miei "particolari" file (ex.:04X , 19D) sono dei file asci e pur non avendo
l'estensione .txt rientrano nel tipo text/plain, non faccio altro che consentire il caricamento di file text/plain e contemporaneamente nego il caricamento di .txt.
In questo modo i file risultanti da tale intersezione sono proprio i miei file (ex.:04X , 19D).
Riporto di seguito l'intera routin, spero che possa servire a qualcuno:

Sub Button_Upload(s As Object, e As EventArgs)

' extract the filename part from the full path of the posted file
dim fileName as string = System.IO.Path.GetFileName(InputFileUp.PostedFile.FileName)
' extract the Extension from fileName
dim ExtensionFile as string = System.IO.Path.GetExtension(fileName)
dim StandardExtensionFile as string
StandardExtensionFile = ExtensionFile.ToLower

If ((InputFileUp.PostedFile.ContentType.StartsWith("text/plain"))and not(StandardExtensionFile=".txt")) or StandardExtensionFile=".pdd" then

' retrieve the destination dir path
dim destDir as string = Server.MapPath ("/UploadFile")
' combine the destination directory with the filename
dim destPath As String = System.IO.Path.Combine(destDir, fileName)
' save the file on the server
InputFileUp.PostedFile.SaveAs(destPath)

Label1.Visible=false

else
Label1.Visible=True
end if

End sub

Ciao a tutti...

Brainkiller Profilo | Guru

Grazie del contributo :)
Felice che tu abbia risolto :)

David

6969 Profilo | Junior Member

Caro David,

sempre in riferimento all'Upload,

ho utilizzato il controllo HtmlInputFile ma non riesco, pur avendo importato il
NameSpace="System.Web.UI.HtmlControls.HtmlInputFile" a disporre di tutte le
proprietà concepite per questo controllo (come accept oppure EnableViewState)
in poche parole il mio editor non me le rende disponobili nel menù a tendina e non
le riesco ad attivare neanche se le imposto a livello di Sub...

Cosa mi consigli, grazie, alessandro.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5