Flash+Asp.net(C#)保存图片到服务器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ikevin/article/details/8956410

  最近要把一个单机软件简单的绘图功能放到WEB上,考虑常识了诸多方案,如果是单纯的保存图片再简单不过了,但绘制的数据要记录,要与服务器交互,绘制逻辑比较复杂,用AJAX在交互及业务上会相当大的工作量;自定义控件在交互和效率上也没任何优势。无奈最终还是觉得FLASH要好的多。

  Flash绘图比较简单,但本身不支持JPG等格式编码,需要FLEX的库,无奈不想搞的太复杂,只能用第三方封装的库' com.adobe.images.JPGEncoder':

https://github.com/mikechambers/as3corelib/downloads

Flash代码: 

import flash.display.BitmapData;

//引用第三方库
import com.adobe.images.JPGEncoder;

stop();

//保存按腻

btn_save.addEventListener(MouseEvent.CLICK, bt_save_event);
function bt_save_event(event:MouseEvent) : void{
            doSave();
            return;
}// end function

function doSave(){
 

//从MC获取位图
 var jpgSource:BitmapData = new BitmapData (mc_test.width, mc_test.height);

 jpgSource.draw(mc_test);

 var jpgEncoder:JPGEncoder = new JPGEncoder(85);

 var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);

//保存在客户端
 //var file:FileReference = new FileReference();
 //file.save(jpgStream,"test.jpg");

//请求服务器
 var jpgURLRequest:URLRequest = new URLRequest("ScreenSplitHandler.ashx"); 

//HTTP头
 var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");   
 var _loader:URLLoader = new URLLoader();
 jpgURLRequest.requestHeaders.push(header);   
 jpgURLRequest.method = URLRequestMethod.POST;   
 jpgURLRequest.data = jpgStream;   

_loader.addEventListener(Event.COMPLETE,completeHandler); 
_loader.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); 
_loader.load(jpgURLRequest); 


}
function completeHandler(evt:Event):void { 
 txt_msg.text = "成功"; 
 trace(URLLoader(e.target).data );//

function ioErrorHandler(evt:IOErrorEvent):void { 
 txt_msg.text = "失败"; 
 } 

Asp.net代码:

 这里用了ashx文件,只帖核心代码:

            context.Response.ClearContent();

//响应输出类型(用于FLASH接收返回)
            context.Response.ContentType = "text/plain";

//这里看到网上有些使用的是第三方库来接收的,因为C#没有bytearray,实际上bytearray就是byte[]啊--!
            byte[] _bmp = context.Request.BinaryRead(context.Request.ContentLength);
            MemoryStream ms = new MemoryStream(_bmp);
            System.Drawing.Image img = Bitmap.FromStream(ms);
            Bitmap bmp = new Bitmap(img);
            MemoryStream tempStream = new MemoryStream();
            bmp.Save(tempStream, ImageFormat.Jpeg);
            FileStream fs = new FileStream("test.jpg", FileMode.Create);
            tempStream.WriteTo(fs);
            tempStream.Close();
            tempStream.Dispose();
            fs.Close();
            fs.Dispose();

以上。

猜你喜欢

转载自blog.csdn.net/ikevin/article/details/8956410