交互第三方Flash+Asp.net(C#)保存图片到服务器

本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~

  近来要把一个单机软件简单的绘图功能放到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();

    以上。

文章结束给大家分享下程序员的一些笑话语录: 女人篇
  有的女人就是Windows虽然很优秀,但是安全隐患太大。
  有的女人就是MFC她条件很好,然而不是谁都能玩的起。
  有的女人就是C#长的很漂亮,但是家务活不行。
  有的女人就是C++,她会默默的为你做很多的事情。
  有的女人就是汇编虽然很麻烦,但是有的时候还得求它。
  有的女人就是SQL,她会为你的发展带来莫大的帮助。

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3091358.html