新的Myspace API将开放相册的上传接口,但是协议比较复杂。Actionscript3自带的FileReference类不能使用(使用FileReference类时时不能写入URLRequestHeader的),所以图片上传只能采用byteArray.
下面的代码演示了读取本地一个图片,然后写到桌面Images文件夹里为a.jpg的过程。
private function init():void
{
var file:File = new File();
var imageTypes:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg; *.jpeg; *.gif; *.png");
file.addEventListener( Event.SELECT, this.onSelect );
file.browseForOpen( "Open", [ imageTypes ] );
}
private function onSelect( e:Event ):void
{
var stream:FileStream = new FileStream();
stream.open( e.target as File, FileMode.READ );
var fileDate:ByteArray = new ByteArray();
stream.readBytes( fileDate, 0, stream.bytesAvailable );
stream.close();
var newImage:File = File.desktopDirectory.resolvePath( "Images/" + "a" + ".jpg" );
stream = new FileStream();
stream.open( newImage, FileMode.WRITE );
stream.writeBytes( fileDate );
}
--
补充,关于Actionscript3中的URLRequest:
1、关于contentType:我们可以自定义HTTP请求中contentType的值,如果传输的数据为二进制,一般需要设置为"multipart/form-data",但是如果使用FileReference类上传,这个属性是不能改变的(The FileReference.upload(), FileReference.download(), and HTMLLoader.load() methods do not support the URLRequest.contentType property)。
2、关于data:如果我们使用POST或者其它非GET方式使用HTTP,那么data的数据就是HTTP请求中的body值。POST/PUT到服务端的二进制数据一般直接写URLRequest.data = byteArray.
3、关于requestHeaders: URLRequest.requestHeaders是一个数组,需要为HTTP请求的header添加自定义数据时需要使用。比如需要在header内添加验证数据(有部分默认header的值是不可以设置的,参考AS3帮助文档):
private var auth:URLRequestHeader = new URLRequestHeader( "Authorization", "usertoken=token" );
this.urlrequest.requestHeaders.push( auth );
但是通过FileReference上传文件时,URLRequest不支持加入requestHeaders内容。即The FileReference.upload() and FileReference.download() methods do not support the URLRequest.requestHeaders parameter.