vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: HTML/Internet/Netzwerk · Internet / Browser / IE   |   VB-Versionen: VB4, VB5, VB623.04.03
FTP FileUpload via WININET.DLL

Mal eben schnell eine Datei auf einen FTP-Server uploaden ;-) Wie das geht, erfahren Sie hier.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  45.082 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Sicherlich kennen Sie bereits unsere Visual Basic Extended Library - sprich  VBEx32.DLL - Extended VB Library v2.1.01. Hier finden Sie u.a. eine Funktion namens VBFILEUPLOAD, mit der sich eine beliebige Datei auf einen FTP-Server uploaden lässt.

Wie sich das ganze direkt in VB und mit Hilfe des Windows-API realisieren lässt, zeigt unser heutiger Tipp.

Fügen Sie nachfolgenden Code in ein Modul ein:

Option Explicit
 
' zunächst alle benötigten API-Deklarationen
Private Declare Function InternetOpen Lib "wininet.dll" _
  Alias "InternetOpenA" ( _
  ByVal sAgent As String, _
  ByVal nAccessType As Long, _
  ByVal sProxyName As String, _
  ByVal sProxyBypass As String, _
  ByVal nFlags As Long) As Long
 
Private Declare Function InternetCloseHandle Lib "wininet.dll" ( _
  ByVal hInet As Long) As Integer
 
Private Declare Function InternetConnect Lib "wininet.dll" _
  Alias "InternetConnectA" ( _
  ByVal hInternetSession As Long, _
  ByVal sServerName As String, _
  ByVal nServerPort As Integer, _
  ByVal sUsername As String, _
  ByVal sPassword As String, _
  ByVal nService As Long, _
  ByVal nFlags As Long, _
  ByVal nContext As Long) As Long
 
Private Declare Function FtpPutFile Lib "wininet.dll" _
  Alias "FtpPutFileA" ( _
  ByVal hFtpSession As Long, _
  ByVal lpszLocalFile As String, _
  ByVal lpszRemoteFile As String, _
  ByVal dwFlags As Long, _
  ByVal dwContext As Long) As Boolean
 
' Kostanten
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const INTERNET_INVALID_PORT_NUMBER = 0
Private Const INTERNET_SERVICE_FTP = 1
 
' Übertragungsmodus
Public Enum eTransferType
  FTP_TRANSFER_TYPE_BINARY = &H2
  FTP_TRANSFER_TYPE_ASCII = &H1
End Enum
 
' Handles
Private hOpen As Long
Private hConnection As Long
' Verbindung zum Server herstellen
Public Function Connect(ByVal sRemoteHost As String, _
  Optional ByVal sUsername As String = "anonymous", _
  Optional ByVal sPassword As String = "guest") As Boolean
 
  ' Ist noch eine Verbindung vorhanden?
  ' Wenn ja, muss diese zunächst beendet werden!
  If hOpen <> 0 Or hConnection <> 0 Then
    Disconnect
  End If
 
  ' Neue Verbindung starten
  hOpen = InternetOpen("FTP", _
    INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, _
    vbNullString, 0)
 
  If hOpen Then
    hConnection = InternetConnect(hOpen, _
      sRemoteHost, INTERNET_INVALID_PORT_NUMBER, _
      sUsername, sPassword, INTERNET_SERVICE_FTP, 0, 0)
  End If
 
  Connect = (hConnection <> 0)
End Function
' Datei auf den Server hochladen
Public Function FileUpload( _
  ByVal sLocalFilename As String, _
  ByVal sRemoteFilename As String, _
  Optional ByVal nTransferType As eTransferType = _
  FTP_TRANSFER_TYPE_BINARY) As Boolean
 
  FileUpload = FtpPutFile(hConnection, _
    sLocalFilename, sRemoteFilename, nTransferType, 0)
End Function
' Verbindung zum Server beenden
Public Sub Disconnect()
  If hConnection <> 0 Then
    InternetCloseHandle hConnection
    hConnection = 0
  End If
 
  If hOpen <> 0 Then
    InternetCloseHandle hOpen
    hOpen = 0
  End If
End Sub

Aufrufbeispiel:

Dim sRemoteHost As String
Dim sLocalFile As String
Dim sRemoteFile As String
Dim nTransferMode As eTransferType
Dim bResult As Boolean
 
' Anmeldung am eigenen T-Online Server
sRemoteHost = "home-up.t-online.de"
If Connect(sRemoteHost) Then
  ' Lokaler Dateiname
  sLocalFile = App.Path & "\myHelp.txt"
 
  ' Ziel-Datei auf dem Server
  ' Achtung! Verzeichnis muss bereits existsieren!!!
  sRemoteFile = "/download/help/myHelp.txt"
 
  ' Ascii-Übertragung
  nTransferMode = FTP_TRANSFER_TYPE_ASCII
 
  ' Upload durchführen
  bResult = FileUpload(sLocalFile, sRemoteFile, nTransferMode)
  If bResult Then 
    MsgBox "Upload erfolgreich!"
  Else
    MsgBox "Fehler beim Upload der Datei!"
  End If
 
  ' Verbindung trennen
  Disconnect
End If

Anmerkung:
Die Datei wird in "einem Rutsch" hochgeladen. Während dieser Zeit erfolgt keine Statusmeldung - auch bekommt Ihr Programm erst nach erfolgtem Upload wieder die Kontrolle.
 

Dieser Tipp wurde bereits 45.082 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel