问题描述
我正在尝试从 Jira 下载启用宏的文件 (xlsm),我尝试了以下方法并能够下载该文件,但该文件已损坏。请建议我在这里缺少什么。
Dim myURL As String
myURL = "Put your download link here"
Dim HttpReq As Object
Set HttpReq = CreateObject("Microsoft.XMLHTTP")
HttpReq.Open "GET",myURL,False,"username","password"
HttpReq.send
myURL = HttpReq.responseBody
If HttpReq.Status = 200 Then
Set oStrm = CreateObject("ADODB.Stream")
oStrm.Open
oStrm.Type = 1
oStrm.Write HttpReq.responseBody
oStrm.SavetoFile ThisWorkbook.Path & "\" & "file.xlsm",2 ' 1 = no overwrite,2 = overwrite
oStrm.Close
End If
(source)
解决方法
最后经过多次尝试,下面的代码工作,希望这对其他人有帮助。
Private Sub DownloadFromJira()
Dim oJiraService As MSXML2.ServerXMLHTTP60
Dim sPath As String
Dim sStatus As String
Dim FileData() As Byte
Dim FileNum As Long
Set oJiraService = New MSXML2.ServerXMLHTTP60
sPath = "C:\Users\**ID**\Downloads\Test.xlsm"
With oJiraService
.Open "GET","https://**MyJiraLink**/secure/attachment/123455/Test.xlsm",False
.setRequestHeader "Content-Type","application/json"
.setRequestHeader "Authorization","Basic " & EncodeBase64(JiraUID & ":" & JiraPWD)
.setRequestHeader "Accept","application/json"
.send
sStatus = .status & " | " & .statusText
If .status = "401" Then
MsgBox "Not Connected"
End If
FileData = .responseBody
FileNum = FreeFile
Open sPath For Binary Access Write As #FileNum
Put #FileNum,1,FileData
Close #FileNum
End With
Set oJiraService = Nothing
End Sub
Private Function EncodeBase64(srcTxt As String) As String
Dim arrData() As Byte
arrData = StrConv(srcTxt,vbFromUnicode)
Dim objXML As MSXML2.DOMDocument60
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument60
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64 = objNode.Text
Set objNode = Nothing
Set objXML = Nothing
End Function