vb如何把一个图片发送到一网站的指定目录下,并且,在本地用vb可以查看上传到网站上的图片,不知道可不可以实现,请高手指点,小弟急用,谢谢了!
(有网站的操作权,但没有FSO)

解决方案 »

  1.   

    使用 Internet Transfer 控件文本传送协议(HyperText Transfer Protocol)(HTTP) 和文件传送协议(File Transfer Protocol) (FTP)。使用 Internet Transfer 控件可以通过 OpenURL 或 Execute 方法连接到任何使用这两个协议的站点并检索文件。在 FPT 协议中使用 Execute 方法
    Execute 方法具有四个参数:url、operation、data 和 requestHeaders。FTP 操作只用到了 operation 参数和 url 参数,其中后者是可选的。例如,要从远程计算机中得到一个文件,可用下面的代码:Inet1.Execute "FTP://ftp.microsoft.com", _
    "GET disclaimer.txt C:\Temp\Disclaimer.txt"如果正在用 FTP 从匿名 FTP 服务器中获取文件,就应熟悉在服务器目录树中漫游的特定命令,以及将其中文件获取到本地的硬盘中的命令。例如,要用 FPT 协议改变目录,应使用带有希望改变到的目录路径的“CD”命令。对绝大多数通用操作,如将文件传入服务器,以及从服务器获取文件,Internet 传输控件在 Execute 方法中使用了(与 FTP)相同或相近的命令。例如,下面的代码将“CD”命令作为 Execute 方法的参数以改变路径:'txtURL 文本框包含了要打开的路径。
    'txtRemotePath 文本框包含了要改变到的路径。
    Inet1.Execute txtURL.Text, "CD " & txtRemotePath.Text 注意 在 Execute 方法中使用 FTP 命令时,没有用到 data 和 requestHeaders 参数。所有的操作和它们的参数都在 operation 参数中作为字符串进行传递;参数之间用空格进行分隔。在下面的描述中,不要把“file1”和“file2”项与 data 和 requestHeaders 参数搞混。FTP 操作的语法是:operationName file1 file2例如,要获取文件,在下面的代码中包含了操作的名称 (“获取”),以及该操作所需的两个文件名:'得到名为“Disclaimer.txt”的文件,并将其复制到
    ' C:\Temp\Disclaimer.txt。
    Inet1.Execute, _
    "GET Disclaimer.txt C:\Temp\Disclaimer.txt"下表列出了该控件支持的 FTP 命令:操作 描述 示例 
    CD file1 改变目录。改变到由 file1 指定的目录中。 Execute , "CD docs\mydocs"
     
    CDUP 改变到父目录。功能与“CD ..”相同。 Execute , "CDUP"
     
    DELETE file1 删除由 file1 指定的文件。 Execute , "DELETE discard.txt"
     
    DIR [file1] 在由 file1 指定的目录中查找。如果没有指定 file1 目录,则查找当前工作目录。使用 GetChunk 方法返回数据。 Execute , "DIR /mydocs"
     
    GET file1 file2 获取由 file1 指定的远程文件,并创建由 file2 指定的新的本地文件。 Execute , _
    "GET getme.txt C:\gotme.txt"
     
    MKDIR file1 创建由 file1 指定的目录。是否能够成功地执行,取决于用户在远程主机上的权限。 Execute , "MKDIR /myDir"
     
    PUT file1 file2 将由 file1 指定的本地文件,复制到由 file2 指定的远程主机文件中。 Execute , _
    "PUT C:\putme.txt /putme.txt"
     
    PWD 打印工作目录。返回当前目录的名称。用 GetChunk 方法返回数据。 Execute , "PWD"
     
    QUIT 结束当前连接。 Execute , "QUIT"
     
    RECV file1 file2 与 GET 相同。 Execute , _
    "RECV getme.txt C:\gotme.txt"
     
    RENAME file1 file2 文件重命名。是否能够成功地执行,取决于用户在远程主机上的权限。 Execute , 
    "RENAME old.txt new.txt"RMDIR file1 删除目录。是否能够成功地执行,取决于用户在远程主机上的权限。 Execute , "RMDIR oldDir"
     
    SEND file1 将文件复制到 FTP 站点。(与 PUT 相同) Execute , _
    "SEND C:\putme.txt /putme.txt"
     
    SIZE file1 返回由 file1 指定文件的大小。 Execute "SIZE /largefile.txt"
    重点 如果代理服务器是 CERN 代理服务器,就不允许使用直接的 FTP 连接(使用 Execute 方法)。在这种情况下,要获得文件,则需使用带 Open、Put 和 Close 语句的 OpenURL 方法,就象前面“用 OpenURL 方法保存到文件”提到的那样。还可以用 OpenURL 方法得到目录列表,即将目标目录作为 URL,并调用该方法。
      

  2.   

    Option ExplicitPublic Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
    (ByVal sAgent As String, ByVal LAccessType As Long, ByVal sProxyName As String, _
    ByVal SProxyBypass As String, ByVal lFlags As Long) As LongPublic 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 lService As Long, _
    ByVal lFlags As Long, ByVal lContext As Long) As LongPublic Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
    (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _
    ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _
    ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _
    ByVal dwContext As Long) As BooleanPublic 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 BooleanPublic Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" _
      (ByVal hFtpSession As Long, ByVal lpszFileName As String) As Boolean
      
    Public Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" _
      (ByVal hFtpSession As Long, ByVal lpszExsiting As String, ByVal lpszNew As String) As Boolean
      
    Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As IntegerPublic Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _
       (ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _
        lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, _
        ByVal dwContent As Long) As Long
        
    Public Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _
    (ByVal hFind As Long, lpvFndData As WIN32_FIND_DATA) As LongPublic Type FILETIME
      dwLowDateTime As Long
      dwHighDateTime As Long
    End Type
    Public Type WIN32_FIND_DATA
       dwFilAttributes As Long
       ftCreationTime As FILETIME
       ftLastAccessTime As FILETIME
       ftLastWriteTime As FILETIME
       nFileSizeHigh As Long
       nFileSizeLow As Long
       dwReserved0 As Long
       dwReserved1 As Long
       cFileName As String * 260
       cAlternate As String * 14
    End Type 
    Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
            "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
     
    Type OPENFILENAME
         lStructSize As Long
         hwndOwner As Long
         hInstance As Long
         lpstrFilter As String
         lpstrCustomFilter As String
         nMaxCustFilter As Long
         nFilterIndex As Long
         lpstrFile As String
         nMaxFile As Long
         lpstrFileTitle As String
         nMaxFileTitle As Long
         lpstrInitialDir As String
         lpstrTitle As String
         flags As Long
         nFileOffset As Integer
         nFileExtension As Integer
         lpstrDefExt As String
         lCustData As Long
         lpfnHook As Long
         lpTemplateName As String
    End Type'//////////////////////////
    '
    '上传程序 MyFtp
    'ClientAdd:本地要发送的文件目录;ServerAdd: 网站目录
    '/////////////////////////
    Public Sub MyFtp(ByVal ClientAdd As String, ByVal ServerAdd As String)
    On Error Resume Next
    lnginet = InternetOpen(vbNullString, INTERNET_OPEN_TYPE_PRECONFIG, _
       vbNullString, vbNullString, 0&)
    If lnginet Then
      lnginetconn = InternetConnect(lnginet, "61.129.32.7", 0, _
            "zj01003321", "s6p6e2z8", 1, 0, 0)
      If lnginetconn Then
          blnRC = FtpPutFile(lnginetconn, ClientAdd, ServerAdd, 0, 0)
          If blnRC Then
            MsgBox "图片上传成功!", vbOKOnly + vbInformation, "提示"
          End If
          InternetCloseHandle lnginetconn
          InternetCloseHandle lnginet
        Else
        DoEvents
        End If
      Else
         DoEvents
      End If
       InternetCloseHandle lngHINet
       InternetCloseHandle lnginetconn
       InternetCloseHandle lnginet
    End Sub
      

  3.   

    lnginetconn = InternetConnect(lnginet, "61.129.32.7", 0, _
            "zj01003321", "s6p6e2z8", 1, 0, 0)
    61.129.32.7 :目标网站
    zj01003321:用户名
    s6p6e2z8:密码
      

  4.   

    INTERNET_OPEN_TYPE_PRECONFIG
    这个是什么东东啊?
    提示“变量未定义”
      

  5.   

    Const INTERNET_OPEN_TYPE_PRECONFIG = 0                      'use registry configuration
    Const INTERNET_OPEN_TYPE_DIRECT = 1                         'direct to net
    Const INTERNET_OPEN_TYPE_PROXY = 3                          'via named proxy
    Const INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4    'prevent using java/script/INS
      

  6.   

    通过调试,终于好用了,呵呵,不过,就可以传单个文件,可不可以传一个目录?
    还有,如何下载。FtpGetFile怎么用啊,!谢谢各位!GO ON!
      

  7.   


    使用 Internet Transfer 控件文本传送协议(HyperText Transfer Protocol)(HTTP) 和文件传送协议(File Transfer Protocol) (FTP)。使用 Internet Transfer 控件可以通过 OpenURL 或 Execute 方法连接到任何使用这两个协议的站点并检索文件。在 FPT 协议中使用 Execute 方法
    Execute 方法具有四个参数:url、operation、data 和 requestHeaders。FTP 操作只用到了 operation 参数和 url 参数,其中后者是可选的。例如,要从远程计算机中得到一个文件,可用下面的代码:Inet1.Execute "FTP://ftp.microsoft.com", _
    "GET disclaimer.txt C:\Temp\Disclaimer.txt"如果正在用 FTP 从匿名 FTP 服务器中获取文件,就应熟悉在服务器目录树中漫游的特定命令,以及将其中文件获取到本地的硬盘中的命令。例如,要用 FPT 协议改变目录,应使用带有希望改变到的目录路径的“CD”命令。对绝大多数通用操作,如将文件传入服务器,以及从服务器获取文件,Internet 传输控件在 Execute 方法中使用了(与 FTP)相同或相近的命令。例如,下面的代码将“CD”命令作为 Execute 方法的参数以改变路径:'txtURL 文本框包含了要打开的路径。
    'txtRemotePath 文本框包含了要改变到的路径。
    Inet1.Execute txtURL.Text, "CD " & txtRemotePath.Text 注意 在 Execute 方法中使用 FTP 命令时,没有用到 data 和 requestHeaders 参数。所有的操作和它们的参数都在 operation 参数中作为字符串进行传递;参数之间用空格进行分隔。在下面的描述中,不要把“file1”和“file2”项与 data 和 requestHeaders 参数搞混。FTP 操作的语法是:operationName file1 file2例如,要获取文件,在下面的代码中包含了操作的名称 (“获取”),以及该操作所需的两个文件名:'得到名为“Disclaimer.txt”的文件,并将其复制到
    ' C:\Temp\Disclaimer.txt。
    Inet1.Execute, _
    "GET Disclaimer.txt C:\Temp\Disclaimer.txt"下表列出了该控件支持的 FTP 命令:操作 描述 示例 
    CD file1 改变目录。改变到由 file1 指定的目录中。 Execute , "CD docs\mydocs"
     
    CDUP 改变到父目录。功能与“CD ..”相同。 Execute , "CDUP"
     
    DELETE file1 删除由 file1 指定的文件。 Execute , "DELETE discard.txt"
     
    DIR [file1] 在由 file1 指定的目录中查找。如果没有指定 file1 目录,则查找当前工作目录。使用 GetChunk 方法返回数据。 Execute , "DIR /mydocs"
     
    GET file1 file2 获取由 file1 指定的远程文件,并创建由 file2 指定的新的本地文件。 Execute , _
    "GET getme.txt C:\gotme.txt"
     
    MKDIR file1 创建由 file1 指定的目录。是否能够成功地执行,取决于用户在远程主机上的权限。 Execute , "MKDIR /myDir"
     
    PUT file1 file2 将由 file1 指定的本地文件,复制到由 file2 指定的远程主机文件中。 Execute , _
    "PUT C:\putme.txt /putme.txt"
     
    PWD 打印工作目录。返回当前目录的名称。用 GetChunk 方法返回数据。 Execute , "PWD"
     
    QUIT 结束当前连接。 Execute , "QUIT"
     
    RECV file1 file2 与 GET 相同。 Execute , _
    "RECV getme.txt C:\gotme.txt"
     
    RENAME file1 file2 文件重命名。是否能够成功地执行,取决于用户在远程主机上的权限。 Execute , 
    "RENAME old.txt new.txt"RMDIR file1 删除目录。是否能够成功地执行,取决于用户在远程主机上的权限。 Execute , "RMDIR oldDir"
     
    SEND file1 将文件复制到 FTP 站点。(与 PUT 相同) Execute , _
    "SEND C:\putme.txt /putme.txt"
     
    SIZE file1 返回由 file1 指定文件的大小。 Execute "SIZE /largefile.txt"
    重点 如果代理服务器是 CERN 代理服务器,就不允许使用直接的 FTP 连接(使用 Execute 方法)。在这种情况下,要获得文件,则需使用带 Open、Put 和 Close 语句的 OpenURL 方法,就象前面“用 OpenURL 方法保存到文件”提到的那样。还可以用 OpenURL 方法得到目录列表,即将目标目录作为 URL,并调用该方法。
    Public Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
    (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _
    ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _
    ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _
    ByVal dwContext As Long) As BooleanPublic 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 BooleanPublic Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" _
      (ByVal hFtpSession As Long, ByVal lpszFileName As String) As Boolean
      
    Public Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" _
      (ByVal hFtpSession As Long, ByVal lpszExsiting As String, ByVal lpszNew As String) As Boolean
      
    Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As IntegerPublic Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _
       (ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _
        lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, _
        ByVal dwContent As Long) As Long
        
    Public Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _
    (ByVal hFind As Long, lpvFndData As WIN32_FIND_DATA) As LongPublic Type FILETIME
      dwLowDateTime As Long
      dwHighDateTime As Long
    End Type
    Public Type WIN32_FIND_DATA
       dwFilAttributes As Long
       ftCreationTime As FILETIME
       ftLastAccessTime As FILETIME
       ftLastWriteTime As FILETIME
       nFileSizeHigh As Long
       nFileSizeLow As Long
       dwReserved0 As Long
       dwReserved1 As Long
       cFileName As String * 260
       cAlternate As String * 14
    End Type 
    Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
            "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
     
    Type OPENFILENAME
         lStructSize As Long
         hwndOwner As Long
         hInstance As Long
         lpstrFilter As String
         lpstrCustomFilter As String
         nMaxCustFilter As Long
         nFilterIndex As Long
         lpstrFile As String
         nMaxFile As Long
         lpstrFileTitle As String
         nMaxFileTitle As Long
         lpstrInitialDir As String
         lpstrTitle As String
         flags As Long
         nFileOffset As Integer
         nFileExtension As Integer
         lpstrDefExt As String
         lCustData As Long
         lpfnHook As Long
         lpTemplateName As String
    End Type'//////////////////////////
    '
    '上传程序 MyFtp
    'ClientAdd:本地要发送的文件目录;ServerAdd: 网站目录
    '/////////////////////////
    Public Sub MyFtp(ByVal ClientAdd As String, ByVal ServerAdd As String)
    On Error Resume Next
    lnginet = InternetOpen(vbNullString, INTERNET_OPEN_TYPE_PRECONFIG, _
       vbNullString, vbNullString, 0&)
    If lnginet Then
      lnginetconn = InternetConnect(lnginet, "61.129.32.7", 0, _
            "zj01003321", "s6p6e2z8", 1, 0, 0)
      If lnginetconn Then
          blnRC = FtpPutFile(lnginetconn, ClientAdd, ServerAdd, 0, 0)
          If blnRC Then
            MsgBox "图片上传成功!", vbOKOnly + vbInformation, "提示"
          End If
          InternetCloseHandle lnginetconn
          InternetCloseHandle lnginet
        Else
        DoEvents
        End If