VBScript read/write binary, encode/decode Base64
Hi folks,
this time a longer posting, especially the code listing below. Today I’ll show some VBScript sample code on how to read/write a (binary) file and encode/decode it to/from Base64. You may ask why… Okay, this is mainly usefull if you need to call WebServices with byte array parameters when your file lies on disk. BTW: with http://www.pocketsoap.com/ it’s relativly easy to call WebServices with VBScript and I should really blog an example later.
Imagine a WebService to convert certain file types, e.g. image formats. With this sample functions (+ PocketSoap) calling it would be no problem and may turns out usefull for thumbnail generation, picture post editing and whatever you want to do with a binary file received by a WebService on server-side…
Okay, enough blabla, now the script, which is blasting fast btw. This should work out-of-the-box on every XP machine (vista untested), should be self-documenting enough to understand and you may use an image file for proof of concept, like I used a little smiley png. And yes, I named the Script “ReadFileEncodeBase64DecodeBase64WriteFile.vbs” (try typing first letters and press TAB when using cmd) as it’s only used for sample purposes. Happy coding!
Greetz, GHad
'
' Call via cmd: cscript ReadFileEncodeBase64DecodeBase64WriteFile.vbs [pathToFile]
'
' - Reads file from arg into byte array
' - Encodes byte array to Base64 String
' - Decodes Base64 String to byte array
' - Writes byte array to new file
'
' Sample WITHOUT any warrenty! Use at own risk! Copyright 2008 Gerhard Balthasar
'
Option Explicit
' common consts
Const TypeBinary = 1
Const ForReading = 1, ForWriting = 2, ForAppending = 8
' getting file from args (no checks!)
Dim arguments, inFile, outFile
Set arguments = WScript.Arguments
inFile = arguments(0)
outFile = "new_" & inFile
Dim inByteArray, base64Encoded, base64Decoded, outByteArray
inByteArray = readBytes(inFile)
base64Encoded = encodeBase64(inByteArray)
Wscript.echo "Base64 encoded: " + base64Encoded
base64Decoded = decodeBase64(base64Encoded)
writeBytes outFile, base64Decoded
Wscript.echo "Finished!"
private function readBytes(file)
dim inStream
' ADODB stream object used
set inStream = WScript.CreateObject("ADODB.Stream")
' open with no arguments makes the stream an empty container
inStream.Open
inStream.type= TypeBinary
inStream.LoadFromFile(file)
readBytes = inStream.Read()
end function
private function encodeBase64(bytes)
dim DM, EL
Set DM = CreateObject("Microsoft.XMLDOM")
' Create temporary node with Base64 data type
Set EL = DM.createElement("tmp")
EL.DataType = "bin.base64"
' Set bytes, get encoded String
EL.NodeTypedValue = bytes
encodeBase64 = EL.Text
end function
private function decodeBase64(base64)
dim DM, EL
Set DM = CreateObject("Microsoft.XMLDOM")
' Create temporary node with Base64 data type
Set EL = DM.createElement("tmp")
EL.DataType = "bin.base64"
' Set encoded String, get bytes
EL.Text = base64
decodeBase64 = EL.NodeTypedValue
end function
private Sub writeBytes(file, bytes)
Dim binaryStream
Set binaryStream = CreateObject("ADODB.Stream")
binaryStream.Type = TypeBinary
'Open the stream and write binary data
binaryStream.Open
binaryStream.Write bytes
'Save binary data to disk
binaryStream.SaveToFile file, ForWriting
End Sub
2 comments so far
Leave a reply
very nice code very usefull, we need to know how it works.
Thank you, what exactly do you need to know?