Content Type должен соответствовать типу содержимого (data). У вас же содержимое — это экземпляр URLVariables (application/x-www-form-urlencoded).
Поэтому сначала приведите содержимое к необходимому виду (multipart/form-data) в соответствии с
rfc1867 
Пример есть в хелпе по классу FileReference.
upd:

Код:
POST /handler.cfm HTTP/1.1
Accept: text/*
Content-Type: multipart/form-data;
boundary=----------Ij5ae0ae0KM7GI3KM7
User-Agent: Shockwave Flash
Host: www.example.com
Content-Length: 421
Connection: Keep-Alive
Cache-Control: no-cache
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7
Content-Disposition: form-data; name="Filename"
MyFile.jpg
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7
Content-Disposition: form-data; name="Filedata"; filename="MyFile.jpg"
Content-Type: application/octet-stream
FileDataHere
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7
Content-Disposition: form-data; name="Upload"
Submit Query
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7--
Т.е. вам необходимо добавить в определение contentType информацию о границе, допустим "multipart/form-data; boundary=----------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7". Или любое другое сочетание символов, которое с маленькой вероятностью может встретиться в другом месте запроса.
Ну а затем в ByteArray все остальное запихать. Можно ограничиться этим:

Код:
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7
Content-Disposition: form-data; name="Photo""
Content-Type: application/octet-stream
FileDataHere
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7--
ByteArray#writeUTFBytes() и ByteArray#writeBytes() в помощь.