2010-09-21 6 views
1

Je développe une application de bureau dans VB.NET 2005. J'ai une exigence selon laquelle un utilisateur doit sélectionner un fichier .txt à partir de sa machine (client) et après avoir cliqué sur le bouton de sauvegarde, je besoin de ce fichier à enregistrer dans le serveur dans un dossier spécifique.Joindre des fichiers .txt dans .NET

De même, je devrais être capable de récupérer le fichier aussi bien.

S'il vous plaît aider à cette exigence.

+1

Et qu'est-ce qui est (fonctionne) le 'Serveur'? –

Répondre

0

L'option la plus simple serait probablement de mettre en place un partage de fichiers sur le serveur, puis l'application cliente enregistre simplement le fichier texte dans ce répertoire partagé. Ou configurez un serveur FTP sur le serveur et envoyez-le via (ou une autre technologie similaire, DAV etc, peut-être utile de poser des questions sur Superuser.com à ce sujet car ce ne serait pas vraiment une question de programmation).

Sinon, vous pouvez écrire un serveur Web ou un serveur TCP/IP pour exécuter sur le serveur et accepter les connexions entrantes du client et transférer le fichier via celui-ci. Mais cela semble un peu exagéré.

0

Comme ho1 mentionne, une bonne option serait d'envoyer le fichier texte sur FTP. Here is a useful link pour FTP à partir de l'intérieur de votre application.

2

C'est ainsi que je le fais. Les choses dont vous avez besoin est un dossier nommé "Uploads". Tout le reste est fait automatiquement.

D'abord, lorsqu'un utilisateur ouvre la page sur laquelle le téléchargement est effectué sur un LoadLoad, je fais ce qui suit pour m'assurer que le dossier de l'utilisateur authentifié est créé.

Protected Sub Page_Load (ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 

    If My.User.IsAuthenticated Then 
     Try 
      If Not Page.IsPostBack Then 
       Select Case My.Computer.FileSystem.DirectoryExists (Server.MapPath ("~/Uploads")) 
        Case False 
         My.Computer.FileSystem.CreateDirectory (Server.MapPath ("~/Uploads")) 
       End Select 
       Select Case My.Computer.FileSystem.DirectoryExists (Server.MapPath ("~/Uploads/" & My.User.Name)) 
        Case False 
         My.Computer.FileSystem.CreateDirectory (Server.MapPath ("~/Uploads/" & My.User.Name)) 
       End Select 
       ListMyFiles() 
      End If 
     Catch ex As Exception 
     'Some code for catching exceptions 
     End Try 
    Else 
     Response.Redirect ("YOUR LOGIN PAGE") 
    End If 

End Sub 

Puis sur la page j'ai déjà ajouté un contrôle ASP: FileUpload. Sur la eveent Click de ce contrôle j'ajouter ce code

Try 
     Select Case FileUpload1.HasFile 
      Case True 
       Dim fname = FileUpload1.PostedFile.FileName 
       SaveFile(FileUpload1.PostedFile) 
       ListMyFiles() 
      Case False 
       Fupload.Text = "Please select a file for uploading!" 
     End Select 
    Catch ex As Exception 
    'Some code for catching exceptions 
    End Try 

La fonction SaveFile a le code suivant

Sub SaveFile (ByVal file As HttpPostedFile) 
    Try 
     Dim _ 
      filext = _ 
       Split (FileUpload1.PostedFile.FileName, ".") (_ 
                   Split (FileUpload1.PostedFile.FileName, ".").Length - _ 
                   1) 
     Select Case filext 
      Case "txt" 
       Dim foldername = "~/Uploads/" & My.User.Name 
       Dim filename = foldername & "/Uploaded_" & FileUpload1.FileName 
       Dim savePath As String = "~/Uploads/" & My.User.Name 
       Dim pathToSave As String = Server.MapPath (filename) 
       Select Case IO.File.Exists (pathToSave) 
        Case False 
         FileUpload1.SaveAs (pathToSave) 
         Dim uploadedFile = My.Computer.FileSystem.ReadAllText ((pathToSave)) 
         uploadedFile = uploadedFile 
         My.Computer.FileSystem.WriteAllText (pathToSave, uploadedFile, False) 
         Dim msg As String = "Your file was uploaded successfully." 
         Fupload.Text = msg 

        Case True 
         Dim _ 
          msg As String = _ 
           "You have already uploaded this file. Please delete the file from server first and then try to upload it again." 
         Fupload.Text = msg 

       End Select 
      Case Else 
       Dim _ 
        msg As String = "The file type '" & filext & _ 
            "' you are trying to upload is not allowed. You can only upload '.txt' files." 
       Fupload.Text = msg 

     End Select 
    Catch ex As Exception 
     'Some code for catching exceptions 
    End Try 


End Sub 

et les fonctions de ListMyFiles a le code suivant.

Protected Sub ListMyFiles() 
    Try 
     Dim foldername = "~/Uploads/" & My.User.Name 

     Dim files As New List(Of MyFiles) 
     For Each s As String In My.Computer.FileSystem.GetFiles (Server.MapPath (foldername) & "\") 
      Dim f As New MyFiles 
      f.Filename = Split (s, "\") (Split (s, "\").Length - 1) 
      f.CompletePath = s 
      f.FileSize = My.Computer.FileSystem.GetFileInfo (s).Length 
      files.Add (f) 
     Next 
     ListFiles.DataSource = files 
     ListFiles.DataBind() 
    Catch ex As Exception 
     'Some code for catching exceptions 
    End Try 

End Sub 

J'espère avoir résolu votre problème. Je sais que vous pourriez modifier le code, mais cela a fait le travail pour moi. Vous pouvez utiliser un autre moyen en stockant les fichiers en tant que binaires sur votre base de données, mais je choisis de le faire de cette façon, car c'est plus simple.

+0

Je sais que le 'My'-Namespace a ses beautés, mais je préfère importer l'espace de noms' System.IO' et utiliser 'File',' Directory' et 'Path' directement, cela économise beaucoup de frappe. – Bobby

+0

En outre, vous pouvez vous abstenir d'utiliser l'espace de noms 'Microsoft.VisualBasic', il est là pour des raisons de compatibilité, mais je défie toute la signification de VB.NET étant une langue OO. F.e., utilisez '" MyString ".Split (". "C)' à la place. Vous devez également utiliser '[System.IO.] Path.Combine (String, String)' pour concaténer les chemins. – Bobby

+0

Merci pour la contribution, je vais en tenir compte. – Besnik

Questions connexes