I managed to fix this by changing the web service to accept base64Binary. If anyone is interested, here is the php to do this, using the nusoap PEAR extension.
Register the service
PHP Code:
$server->register("UploadFile",
array(
"bytes" => "xsd:base64Binary",
"cp_id" => "xsd:string", "filename" => "xsd:string"
),
array("return" => "xsd:boolean"),
$ns,
"$ns#UploadFile",
"rpc",
"encoded",
"Upload a File"
);
Implement the service
PHP Code:
function UploadFile($bytes, $folder_path, $filename)
{
global $path_to_html;
$file_path = $path_to_html.$folder_path."/".$filename;
$fp = fopen($file_path, "w");
if( is_array($bytes) )
{
foreach($bytes as $k => $v)
{
fwrite($fp, $v);
}
}
else
{
fwrite($fp, $bytes);
}
fclose($fp);
return true;
}
I have posted this code in case it helps someone else although I am still not sure how to convert a ByteArray to an ArrayCollection in Flex.