Hi,
I modified the below code and tried to upload the file VIA Rest API using VBA unfortunately am getting 401 error
Please advise to fix the error.
Private Sub Test()
Dim oJiraService As MSXML2.ServerXMLHTTP60
Const STR_BOUNDARY As String = "abc123-xyz123"
Dim sUrl As String, sRest As String, sIssueNumber As String
Dim sFileDataStr As String, sPath As String, sStatus As String
Set oJiraService = New MSXML2.ServerXMLHTTP60
sUrl = "MyUrl"
sIssueNumber = 963242
apikey = "dbd636f097a378a1d93c13b"
sPath = "myfloder\_1.pdf_2.pdf"
sFileDataStr = "--" & STR_BOUNDARY & vbCrLf & _
"Content-Disposition: form-data; name=""api_key" & apikey & vbCrLf & _
STR_BOUNDARY & "--" & vbCrLf & _
"--" & STR_BOUNDARY & vbCrLf & _
"Content-Disposition: form-data; name=""workflow_id" & sIssueNumber & vbCrLf & _
STR_BOUNDARY & "--" & vbCrLf & _
"--" & STR_BOUNDARY & vbCrLf & _
"Content-Disposition: form-data; name=""userfile"";Filename = """ & Mid$(sPath, InStrRev(sPath, "\") + 1) & """" & vbCrLf & _
"Content-Type: application/octet-stream" & vbCrLf & _
vbCrLf & GetFileBytes(sPath) & vbCrLf & "--" & _
STR_BOUNDARY & "--"
With oJiraService
.Open "POST", sUrl, False
.setRequestHeader "Content-Type", "multipart/form-data; boundary=" & STR_BOUNDARY
.send stringToByteArray(sFileDataStr)
'.send sData
sRest = .responseText
sStatus = .Status & " | " & .statusText
End With
Set oJiraService = Nothing
End Sub
Public Function EncodeBase64(text As String) As String
Dim arrData() As Byte
arrData = StrConv(text, vbFromUnicode)
Dim objXML As MSXML2.DOMDocument
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64 = objNode.text
Set objNode = Nothing
Set objXML = Nothing
End Function
Public Function GetFileBytes(ByVal fPath As String) As String
Fnum = FreeFile
Dim bytRtnVal() As Byte
If LenB(Dir(fPath)) Then ''// Does file exist?
Open fPath For Binary Access Read As Fnum
ReDim bytRtnVal(LOF(Fnum) - 1&) As Byte
Get Fnum, , bytRtnVal
Close Fnum
Else
Err.Raise 53
End If
GetFileBytes = byteArrayToString(bytRtnVal)
Erase bytRtnVal
End Function
Public Function byteArrayToString(bytArray() As Byte) As String
Dim sAns As String
sAns = StrConv(bytArray, vbUnicode)
byteArrayToString = sAns
End Function
Public Function stringToByteArray(srcTxt As String) As Byte()
stringToByteArray = StrConv(srcTxt, vbFromUnicode)
End Function