flex上传图片
来源:互联网 发布:知乎如何成为财务经理 编辑:程序博客网 时间:2024/05/16 14:14
flex上传图片需引用UploadPostHelper.as
protected function btnClick(event:MouseEvent):void
{
//要上传的图片
var one4data:Bitmap= model.scanvo.currentScanImage;
//图片转换成字符数组
//对传送数据编码(很重要)
var data:ByteArray=new JPGEncoder().encode(one4data.bitmapData);
var url:String="http://www.test.com/upload/UploadAction.action";//上传地址自己根据实际情况定
var request:URLRequest=new URLRequest(url);
//form表单提交,同时声明分隔符boundary
request.contentType="multipart/form-data; boundary="+UploadPostHelper.getBoundary();
request.requestHeaders.push(new URLRequestHeader( 'Cache-Control', 'no-cache'));
request.method=URLRequestMethod.POST;
//设置上传文件名和上传数据
//getPostData()方法主要是根据RFC1867来处理数据
request.data=UploadPostHelper.getPostData("test.jpg",data);
var loader:URLLoader = new URLLoader();
loader.dataFormat=URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, onComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR,onIOErr);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSecurity);
loader.load(request);
}
-----------------------
UploadPostHelper.as
package fx.util
{
import flash.events.*;
import flash.net.*;
import flash.utils.ByteArray;
import flash.utils.Endian;
/**
* Take a fileName, byteArray, and parameters object as input and return ByteArray post data suitable for a UrlRequest as output
*
* @see http://marstonstudio.com/?p=36
* @see http://www.w3.org/TR/html4/interact/forms.html
* @see http://www.jooce.com/blog/?p=143
* @see http://www.jooce.com/blog/wp%2Dcontent/uploads/2007/06/uploadFile.txt
* @see http://blog.je2050.de/2006/05/01/save-bytearray-to-file-with-php/
*
* @author Jonathan Marston
* @version 2007.08.19
*
* This work is licensed under a Creative Commons Attribution NonCommercial ShareAlike 3.0 License.
* @see http://creativecommons.org/licenses/by-nc-sa/3.0/
*
*/
public class UploadPostHelper {
/**
* Boundary used to break up different parts of the http POST body
*/
private static var _boundary:String = "";
/**
* Get the boundary for the post.
* Must be passed as part of the contentType of the UrlRequest
*/
public static function getBoundary():String {
if(_boundary.length == 0) {
for (var i:int = 0; i < 0x20; i++ ) {
_boundary += String.fromCharCode( int( 97 + Math.random() * 25 ) );
}
}
return _boundary;
}
/**
* Create post data to send in a UrlRequest
* @param fileName:String 上传文件的名字 "xxx.txt/xxx.jpg/xxx.pdf"
* @param byteArray:ByteArray 上传文件的文件内容
* @param uploadDataFieldName:String 上传数据字段的名字 默认值=filedata
* @param parameters:Object 参数 默认值=null
*/
public static function getPostData(fileName:String, byteArray:ByteArray, uploadDataFieldName:String = "filedata", parameters:Object = null):ByteArray {
var i: int;
var bytes:String;
var postData:ByteArray = new ByteArray();
//更改或读取数据的字节顺序
postData.endian = Endian.BIG_ENDIAN;
//add Filename to parameters
if(parameters == null) {
parameters = new Object();
}
//设置上传文件名到parameters里
parameters.Filename = fileName;
//遍历parameters中的属性
//add parameters to postData
for(var name:String in parameters) {
postData = BOUNDARY(postData);
postData = LINEBREAK(postData);
bytes = 'Content-Disposition: form-data; name="' + name + '"';
for ( i = 0; i < bytes.length; i++ ) {
postData.writeByte( bytes.charCodeAt(i) );
}
postData = LINEBREAK(postData);
postData = LINEBREAK(postData);
postData.writeUTFBytes(parameters[name]);
postData = LINEBREAK(postData);
}
//add Filedata to postData
postData = BOUNDARY(postData);
postData = LINEBREAK(postData);
bytes = 'Content-Disposition: form-data; name="'+uploadDataFieldName+'"; filename="';
for ( i = 0; i < bytes.length; i++ ) {
postData.writeByte( bytes.charCodeAt(i) );
}
postData.writeUTFBytes(fileName);
postData = QUOTATIONMARK(postData);
postData = LINEBREAK(postData);
bytes = 'Content-Type: application/octet-stream';
for ( i = 0; i < bytes.length; i++ ) {
postData.writeByte( bytes.charCodeAt(i) );
}
postData = LINEBREAK(postData);
postData = LINEBREAK(postData);
postData.writeBytes(byteArray, 0, byteArray.length);
postData = LINEBREAK(postData);
//add upload filed to postData
postData = LINEBREAK(postData);
postData = BOUNDARY(postData);
postData = LINEBREAK(postData);
bytes = 'Content-Disposition: form-data; name="Upload"';
for ( i = 0; i < bytes.length; i++ ) {
postData.writeByte( bytes.charCodeAt(i) );
}
postData = LINEBREAK(postData);
postData = LINEBREAK(postData);
bytes = 'Submit Query';
for ( i = 0; i < bytes.length; i++ ) {
postData.writeByte( bytes.charCodeAt(i) );
}
postData = LINEBREAK(postData);
//closing boundary
postData = BOUNDARY(postData);
postData = DOUBLEDASH(postData);
return postData;
}
/**
* Add a boundary to the PostData with leading doubledash 添加以双破折号开始的分隔符
*/
private static function BOUNDARY(p:ByteArray):ByteArray {
var l:int = UploadPostHelper.getBoundary().length;
p = DOUBLEDASH(p);
for (var i:int = 0; i < l; i++ ) {
p.writeByte( _boundary.charCodeAt( i ) );
}
return p;
}
/**
* Add one linebreak 添加空白行
*/
private static function LINEBREAK(p:ByteArray):ByteArray {
p.writeShort(0x0d0a);
return p;
}
/**
* Add quotation mark 添加引号
*/
private static function QUOTATIONMARK(p:ByteArray):ByteArray {
p.writeByte(0x22);
return p;
}
/**
* Add Double Dash 添加双破折号--
*/
private static function DOUBLEDASH(p:ByteArray):ByteArray {
p.writeShort(0x2d2d);
return p;
}
}
}
- flex 上传图片
- flex图片上传(封装)
- flex 图片上传
- flex上传图片
- flex 上传图片 例子
- Flex:上传图片前预览
- flex调用php上传图片
- Flex上传图片前浏览
- Flex 与 Java 上传ByteArray图片数据
- Flex 上传文件,并提前浏览图片
- Flex中本地图片上传前的预览
- Flex中本地图片上传前的预览
- Flex中使用RemoteObject实现图片上传功能
- Flex编写安卓实现上传图片到服务器
- Flex中使用RemoteObject实现图片上传功能
- Flex中本地图片上传前的预览
- Flex 上传摄像头拍照、UI保存为图片
- flex上传
- Struts2Validator
- 架构摘记
- 模式窗体调用用父窗体中的方法
- 窗口客户区和视图客户区
- android c++ ndk 的编译环境搭建
- flex上传图片
- Android UI 设计要点
- query多选下拉框插件 jquery-multiselect
- js图片等比缩放
- 网络蜘蛛及搜索引擎基本原理
- B/S与C/S架构软件选择那个更好
- Visual Studio 2008 每日小窍门 【持续发布ing~】 Tips:018
- 修改MYSQL数据库,数据表,字段的编码(解决JSP乱码)
- SQL CURSOR 游标