无法使用 vba 从 ftp 获取文件

Cannot get files from ftp using vba

我想从 ftp 下载图像以便稍后在访问报告中使用它,问题是 ftpgetFile returning 0 而不是在文件夹。

Public Function RecuperarFirmaMuestreadores(userID As Long)
Dim firma As String
Dim id As String
id = CStr(userID) & ".jpg"
sign = ftpfirma("XXX.XX.XXX.XXX", "User", "password", "/document/", id)
End Function



Function ftpfirma(ByVal HostName As String, ByVal Username As String, ByVal Password As String, ByVal sDir As String, id As String) As String



Dim sOrgPAth As String
Dim pData As WIN32_FIND_DATA
Dim hFind As Long, lRet As Long
Dim hConnection, hOpen, hFile  As Long
Dim sFiles() As String
Dim firma As Long

sPath = String(MAX_PATH, 0)


hOpen = InternetOpen("FTPGET", 1, vbNullString, vbNullString, 1)
hConn = InternetConnect(hOpen, HostName, INTERNET_DEFAULT_FTP_PORT, Username, Password, 1, 0, 2)

' Change Directory
Call FtpSetCurrentDirectory(hConn, sDir)

' get list of directory
Call FtpGetCurrentDirectory(hConn, sPath, Len(sPath))

Call FTPGetFile(hConn, id, "C:\Documents and Settings\Adrian\Mis documentos\Descargas", True, 0, 0 Or GENERIC_READ, 0)

' Close Internet Connection
Call InternetCloseHandle(hOpen)
Call InternetCloseHandle(hConn)


End Function

在 ftp 中存在图像,它位于 /documents 中,名称类似于 123.jpg,我正在下载到我的下载文件夹中,但我没有遇到错误。

提前致谢。

编辑

我试了你说的但是没用,getLastError return 0

Call FTPGetFile(hConn, id, "C:\Documents and Settings\Adrian\Mis documentos\Descargas\" & id, True, 0, INTERNET_FLAG_PASSIVE, 0)
e = getLastError()

马丁给出的解决方案

确保标志值不是像这种情况下的 0,而是 INTERNET_FLAG_PASSIVE

 hConn = InternetConnect(hOpen, HostName, INTERNET_DEFAULT_FTP_PORT, Username, Password, 1, INTERNET_FLAG_PASSIVE, 2)

非常感谢大家的回答。

我们成功地使用了这个变体:

Private Const FTP_TRANSFER_TYPE_UNKNOWN     As Long = 0
Private Const INTERNET_FLAG_RELOAD          As Long = &H80000000

<snip>

    If FtpGetFileA(hConn, strRemoteFile, strLocalFile, 1, 0, FTP_TRANSFER_TYPE_UNKNOWN Or INTERNET_FLAG_RELOAD, 0) Then
        Debug.Print "done"
    Else
        Debug.Print "fail"
    End If

FtpGetFile 的第三个 lpszNewFile 参数是文件路径,而不是目录。

所以它应该是这样的:

Call FTPGetFile(hConn, id, "C:\Documents and Settings\Adrian\Mis documentos\Descargas\" & id, ...)

此外,一般来说,您应该使用 INTERNET_FLAG_PASSIVEInternetConnect

没有标志,InternetConnect默认为活动模式,当涉及防火墙或 NAT 时,该模式几乎不可用。