I have a VBA function in Excel which creates a document.docx and then uploads it to Dropbox. It is successfully creating a file in Dropbox, but it can't be opened because it is only 2 bytes in size. Why is there no content in this file? I don't really know how files actually work, it it something to do with the script converting the content to bytes?
Public Sub dropboxUpload()
Dim req As MSXML2.ServerXMLHTTP60
Dim strFile As String
Dim Pos1 As Integer
Dim Pos2 As Integer
Set req = New MSXML2.ServerXMLHTTP60
Dim arg As String
Dim content As Byte
content = ReadByteArrFromFile("C:\Users\me\Desktop\Folder\document.docx")
FileName = "document.docx"
arg = "{""path"":""/Work/" & FileName & """,""mode"":{"".tag"":""add""},""autorename"":true,""mute"":false}"
req.Open "POST", "https://content.dropboxapi.com/2/files/upload", False
req.setRequestHeader "Authorization", "Bearer xxxxx"
req.setRequestHeader "Content-Type", "application/octet-stream"
req.setRequestHeader "Content-length", Len(Result)
req.setRequestHeader "Dropbox-API-Arg", arg
req.setRequestHeader "User-Agent", "api-explorer-client"
req.Send content
If req.Status = 200 Then '200 = OK
'MsgBox req.Status & ": " & req.StatusText
Debug.Print req.responseText
Else
MsgBox req.Status & ": " & req.StatusText
Debug.Print req.responseText
End If
End Sub
Function ReadByteArrFromFile(filePath) As Byte()
Dim buff() As Byte
Dim fileNumb As Integer
fileNumb = FreeFile
Open filePath For Binary Access Read As fileNumb
ReDim buff(0 To LOF(fileNumb) - 1)
Get fileNumb, , buff
Close fileNumb
ReadByteArrFromFile = buff
End Function
Try setting the correct Content-length
value:
Dim arg As String
Dim content As Byte, fPath as string
fPath = "C:\Users\me\Desktop\Folder\document.docx"
FileName = "document.docx"
arg = "{""path"":""/Work/" & FileName & """,""mode"":{"".tag"":""add""},""autorename"":true,""mute"":false}"
req.Open "POST", "https://content.dropboxapi.com/2/files/upload", False
req.setRequestHeader "Authorization", "Bearer xxxxx"
req.setRequestHeader "Content-Type", "application/octet-stream"
req.setRequestHeader "Content-length", FileLen(fPath) '<<< set the correct size
req.setRequestHeader "Dropbox-API-Arg", arg
req.setRequestHeader "User-Agent", "api-explorer-client"
req.Send ReadByteArrFromFile(fPath)
If req.Status = 200 Then '200 = OK
'MsgBox req.Status & ": " & req.StatusText
Debug.Print req.responseText
Else
MsgBox req.Status & ": " & req.StatusText
Debug.Print req.responseText
End If
End Sub