Upload a File Ftp - "Could Not find A Part Of Path"

giovedì 05 giugno 2008 - 11.48

Mikyct86 Profilo | Junior Member

Salve,
Si sta verificando una cosa che nn riesco a spiegare.
Sto cercando di creare un upload tramite ftp in Asp.Net in vb.
In Locale tutto bene.L'upload riesce con successo.
Ma sul pubblicato sull'HostServer nn riesce a trovare il path del file in locale.
Qui è il mio codice

Public Sub UploadFile2(ByVal Path As String, ByVal LocalPath As String, ByVal Name As String)
'Create a FTP Request Object and Specfiy a Complete Path
Dim reqObj As FtpWebRequest = WebRequest.Create("ftp://" + Host + Path + Name)
'Call A FileUpload Method of FTP Request Object
reqObj.Method = WebRequestMethods.Ftp.UploadFile
'If you want to access Resourse Protected You need to give User Name and PWD
reqObj.Credentials = New NetworkCredential(_UserName, _Password)
'FileStream object read file from Local Drive
Dim streamObj As FileStream = File.OpenRead(LocalPath)
'Store File in Buffer
Dim buffer(streamObj.Length) As Byte
'Read File from Buffer
streamObj.Read(buffer, 0, buffer.Length)
'Close FileStream Object Set its Value to nothing
streamObj.Close()
streamObj = Nothing
'Upload File to ftp://localHost/ set its object to nothing
reqObj.GetRequestStream().Write(buffer, 0, buffer.Length)
reqObj = Nothing
End Sub

Public Sub SendViaFtp()
Try
Dim FileName() As String
FileName = FileUpload1.FileName.Split(".")
If FileName(FileName.Length - 1) <> "jpg" Then
Utilities.WriteAlert("Formato File non accettato")
End If
Dim localpath As String
localpath = Path.GetFullPath(FileUpload1.PostedFile.FileName)
Dim RemotePath As String
RemotePath = "/salemi.biz/app_themes/salemi/images/categorie/cat_" & DropDownList1.SelectedValue & "/prod_" & txtProdottoID.Text
If (FileUpload1.HasFile) Then
Dim file_size = FileUpload1.PostedFile.ContentLength
If file_size > 0 Then

objFtp.UploadFile2(RemotePath, localpath, ".jpg")
Utilities.WriteAlert("invio Eseguito con successo")
End If
End If

Catch ex As Exception
Utilities.WriteAlert(ex.Message)
End Try
End Sub

Aiuto!

rossimarko Profilo | Guru

Ciao,

il problema è dovuto al fatto che non salvi in locale il file che l'utente ti ha inviato con il controllo FileUpload.

>Dim localpath As String
>localpath = Path.GetFullPath(FileUpload1.PostedFile.FileName)
>Dim RemotePath As String
>RemotePath = "/salemi.biz/app_themes/salemi/images/categorie/cat_" & DropDownList1.SelectedValue & "/prod_" & txtProdottoID.Text
>If (FileUpload1.HasFile) Then
>Dim file_size = FileUpload1.PostedFile.ContentLength
>If file_size > 0 Then

>objFtp.UploadFile2(RemotePath, localpath, ".jpg")
>Utilities.WriteAlert("invio Eseguito con successo")
>End If
>End If

Per salvarlo puoi usare il metodo FileUpload1.PostedFile.SaveAs("C:\temp\xxx.file")

Una volta eseguita l'operazione la variabile localpath dovrà contenere il percorso completo del file salvato (nell'esempio "c:\temp\xxx.file")
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mikyct86 Profilo | Junior Member

Nulla.Ora mi da accesso negato!
Boh...Perche succede solo sull'host server.In locale mi funziona alla grande!

rossimarko Profilo | Guru

Ti da accesso negato perchè l'utente con cui gira il processo di asp.net non ha i permessi di scrittura nella cartella che hai impostato. Sul fatto che ti funziona sul tuo pc è una cosa normale, in quanto i percorsi rimangono uguali.

Cerco di fare un po' di chiarezza con un esempio pratico.
Supponiamo che tu abbia un file sotto sotto d:\temp\prova.zip. Apri la pagina e decidi di inserire questo file nel controllo upload. Nel momento in cui fai il postback e carichi il file lato server verrà inviato lo stream con il contenuto del file. Nel codice del pulsante che utilizzerai per fare l'upload dovrai prendere questo stream e salvarlo sul disco del server, altrimenti non potrai accederci. Ovviamente la cartella in cui lo salvi deve avere i permessi di scrittura.

Nel tuo caso invece la fase di salvataggio non viene fatta. Tu crei il nome del file locale con il seguente codice:
localpath = Path.GetFullPath(FileUpload1.PostedFile.FileName)

Se lo esegui in locale funziona correttamente (infatti il percorso sarà ancora d:\temp\prova.zip e il file viene trovato), ma se lo esegui su server il file D:\temp\prova.zip sul disco del server non esiste e ti da errore (per ovvie ragioni visto che non è stato salvato ma si strova sul client).

Se ti servono maggiori informazioni prova a guardare questo link: http://support.microsoft.com/kb/323245/en-us


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mikyct86 Profilo | Junior Member

Ok ho capito.
Ma non riesco a inviare un file sul server.mi dice sempre accesso negato cosa posso fare?

Il mio codice è il seguente:

Public Sub SendViaFtp()
Try
Dim FileName() As String
FileName = FileUpload1.FileName.Split(".")
If FileName(FileName.Length - 1) <> "jpg" Then
Utilities.WriteAlert("Formato File non accettato")
Exit Sub
End If
Dim localpath As String
localpath = Path.GetFullPath(FileUpload1.PostedFile.FileName)
Dim fn As String = System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName)
Dim SaveLocation As String = Server.MapPath("images") & "\" & fn
Try
FileUpload1.PostedFile.SaveAs(SaveLocation)
Response.Write("The file has been uploaded.")
Catch Exc As Exception
Response.Write("Error: " & Exc.Message)
Exit Sub
End Try
localpath = SaveLocation
Dim RemotePath As String
RemotePath = "/salemi.biz/app_themes/salemi/images/categorie/cat_" & DropDownList1.SelectedValue & "/prod_" & txtProdottoID.Text
If (FileUpload1.HasFile) Then
Dim file_size = FileUpload1.PostedFile.ContentLength
If file_size > 0 Then
objFtp.UseSSL = False
objFtp.UploadFile2(RemotePath, localpath, ".jpg")
Utilities.WriteAlert("invio Eseguito con successo")
End If
End If
Catch ex As Exception
Utilities.WriteAlert(ex.Message)
End Try
End Sub

Ps:Devo inviare un file da un sito di amministrazione (una foto ad esempio) al sito principale.

rossimarko Profilo | Guru

Il problema dei permessi va gestito su windows. Bisogna assegnare i permessi di scrittura sulla cartella in cui vai a salvare i file.

Guarda questo link: http://support.microsoft.com/?scid=kb%3Bit%3B323245&x=19&y=12
Se vai alla sezione: "Creazione della directory Data" ti spiega cosa fare per assegnare i permessi

Marco
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mikyct86 Profilo | Junior Member

Grazieeeeeeeeeeeeeeeeeeeeee!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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