如何使用Microsoft XMLHTTP使用VBA获取文件扩展名

我正在使用下面的简单代码从互联网下载和保存一些文件。 我连接的服务器有时会生成excel文件,其他时候是文本文件,我想知道是否有任何可能的方法来找出什么是文件扩展名,以便它可以下载适当的扩展名? 现在我把所有文件保存为txt文件,如果文件返回excel文件,那么下载的文件将是无用的(因为它被保存为txt文件,我不得不手动更改扩展名)。 多谢你们

Dim myURL As String Dim WinHttpReq As Object Dim FP As String myURL = "SAMPLE URL" Set WinHttpReq = CreateObject("Microsoft.XMLHTTP") WinHttpReq.Open "GET", myURL, False WinHttpReq.Send myURL = WinHttpReq.ResponseBody If WinHttpReq.Status = 200 Then Set oStream = CreateObject("ADODB.Stream") oStream.Open oStream.Type = 1 oStream.Write WinHttpReq.ResponseBody oStream.SaveToFile (FP & "\" & C1 & "-" & C2 & ".txt"), 2 oStream.Close End If End Sub 

在WinHttpReq.Open“GET”,myUrl,false之前,您可以尝试打开标题并在下载之前查看文件的MIMEtypes:

 WinHttpReq.Open "HEAD", myUrl, false WinHttpReq.Send MyHeader = WinHttpReq.getAllResponseHeaders() ' Scan MyHeader here to find your file mime type ... 

感谢kiks73,我find了解决这个问题的方法,但是我想用它来添加一些内容

 MyHeader = WinHttpReq.getAllResponseHeaders() 

会给你类似的东西

“服务器:Microsoft-IIS / 5.0date:2014年7月29日18:05:44 GMT X-Powered-by-ASP.NET-Content-Disposition:FileName = 11120166.Txt Content-Type:application / octet-stream Content-长度:152内容:

这可能有点难以阅读和分析,所以我find了只有文件名和扩展名的替代方法:

 MyHeader = WinHttpReq.getResponseHeader("Content-Disposition") 

这样你就可以把所有的垃圾丢掉,只得到你想要的东西。 但是,在我的情况下,我必须立即下载300到8000个文件(所有相同的types,但types可能会改变从一个会话到另一个),并试图拉扩展每次似乎荒唐,它使我的代码崩溃,所以你可能只想拉一次扩展。 再次感谢kiks73帮助我