我正在使用以下简单代码从互联网下载并保存一些文件。我正在连接的服务器有时生成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
答案 0 :(得分:1)
在WinHttpReq.Open" GET",myUrl,false之前,您可以尝试打开标题并在下载之前查看文件的mime类型:
WinHttpReq.Open "HEAD", myUrl, false
WinHttpReq.Send
MyHeader = WinHttpReq.getAllResponseHeaders()
' Scan MyHeader here to find your file mime type ...
答案 1 :(得分:1)
感谢kiks73,我找到了处理这个问题的方法,但我想添加一小部分,使用
MyHeader = WinHttpReq.getAllResponseHeaders()
会给你类似的东西
“服务器:Microsoft-IIS / 5.0 日期:2014年7月29日星期二18:05:44 GMT X-Powered-By:ASP.NET Content-Disposition:FileName = 11120166.Txt Content-Type:application / octet-stream 内容长度:152 含量:
“
这可能有点难以阅读和分析,所以我找到了另一种方法来获取文件名和扩展名:
MyHeader = WinHttpReq.getResponseHeader("Content-Disposition")
这样你就可以抛弃所有的垃圾,只得到你想要的东西。但是:在我的情况下,我必须一次下载300到8000个文件(所有相同的类型,但类型可能会从一个会话更改为另一个会话)并且每次尝试拉取扩展名似乎很荒谬,并且它使我的代码崩溃,所以你可能只想拉一次扩展。
再次感谢kiks73帮助我