• 转:Flash大文件上传(带进度条)


    最近在做大文件上传项目时碰到了很多问题。基于.net的大文件上传组件网上是大把的有。


    大家可去查询:http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=asp%2Enet+%B4%F3%CE%C4%BC%FE%C9%CF%B4%AB&pn=0&ver=0&cl=3&uim=1&usm=0&f=1

    这些组件基本上都是基于HttpModule模式的,大部分都存在一个致命的问题:严重消耗内存。

    最后没办法,只好采用Flash的FileReference模式去上传。具体我也不是很明白,大家可自己研究。

    一、CS相应源码如下:


    import flash.net.FileReference;
    import flash.net.URLRequest;
    import flash.net.FileFilter;
    import flash.display.Sprite;
    import flash.events.
    *;



    var fileRef 
    = new FileReference();
    var fileListener 
    = new Object();

    var totalBytes:Number 
    = 0;
    var uploadedBytes:Number 
    = 0;

    //从外部获取也许上传的文件类型
    var acceptFileType:String = getFlashVars("acceptFileType");
    //设置上传完毕后执行的js脚本
    var comJsFun:String=getFlashVars("ComJsFun");
    //this.tbFilePath.text = comJsFun;
    //
    var uploadURL:URLRequest = new URLRequest();
    var xmlRequest:URLRequest 
    = new URLRequest();
    var xmlLoader:URLLoader 
    = new URLLoader();

    //初始化系统
    function init() {
        
    this.mcWaterStyle.visible = false;
        
    this.mcFilePlayer.visible = false;
        
    this.progressBar.visible = false;

        
    //设置按钮文字大小,默认的字体和大小有点难看。
        var myFormat = new TextFormat();
        myFormat.size 
    = 12;
        
    this.btBrowser.setStyle("textFormat", myFormat);
        
    this.btUpload.setStyle("textFormat", myFormat);
        
    this.tbFilePath.setStyle("textFormat", myFormat);
        
        
    this.mcWaterStyle.style0.setStyle("textFormat", myFormat);
        
    this.mcWaterStyle.style1.setStyle("textFormat", myFormat);
        
    this.mcWaterStyle.style2.setStyle("textFormat", myFormat);
        
    this.uploadInfo.setStyle("textFormat", myFormat);
        
    //如果从FlashVars获取的参数acceptFileType(限定上传文件类型)无值,那么访问相应的XML(上传文件类型配置)
        if(acceptFileType==""){
            
    //从外部获取上传附加的文件类型。
            xmlRequest = new URLRequest("http://www.cnblogs.com/XML/Setting_Article.xml");
            xmlLoader.load(xmlRequest); 
            xmlLoader.addEventListener(Event.COMPLETE,loaderHandler);
        }

    }


    init();

    //按钮事件
    this.btBrowser.addEventListener(MouseEvent.CLICK, browseHandler);
    this.btUpload.addEventListener(MouseEvent.CLICK, UploadHandler);

    fileRef.addEventListener(Event.SELECT,selectHandler);
    //选择文件
    fileRef.addEventListener(Event.CANCEL, cancelHandler);//上传过程中取消事件
    fileRef.addEventListener(Event.OPEN, openHandler);//开始上传事件
    fileRef.addEventListener(Event.COMPLETE, completeHandler);//上传完毕事件
    fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadCompleteDataHandler)//上传数据完毕事件,有点迷惑Event.COMPLETE跟DataEvent.UPLOAD_COMPLETE_DATA的区别
    fileRef.addEventListener(ProgressEvent.PROGRESS, progressHandler);//上传过程事件,相应的进度条代码在这里了

    //监听上传过程可能出错的事件
    fileRef.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
    fileRef.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);


    //浏览按钮事件
    function browseHandler(event:MouseEvent):void {
        fileRef.browse(browseGetTypes());
    }

    function browseGetTypes():Array 
    {
        var allTypes:Array 
    = new Array(browseGetFileTypeFilter());
        
    return allTypes;
    }


    function browseGetFileTypeFilter():FileFilter 
    {
        
        
    if(acceptFileType!=""){
            var arr 
    = acceptFileType.split("|");
            var FileExtension 
    = "";
            
    for(var i=0;i<arr.length;i++){
                
    if (arr[i] == ""
                     
    continue;
                
    if(i==0)
                    FileExtension 
    = "*."+arr[i];
                
    else
                    FileExtension 
    = FileExtension+";*."+arr[i];
            }

            
    return new FileFilter("文件格式("+FileExtension+")"""+FileExtension+"");
        }
    else{
            
    return new FileFilter("所有文件(*.*)","*.*");
        }

        
        
    //return new FileFilter("所有文件(*.*)","*.*");
    }


    //加载上传配置事件
    function loaderHandler(event:Event):void {
        var myXML:XML 
    = new XML(xmlLoader.data); 
        
    //myXML = XML();
        acceptFileType = myXML.child("Upload").ContontFileStyle;
        trace(
    "--"+myXML.child("Upload").ContontFileStyle+"--");
        
    if(this.uploadInfo.text=="")
            
    this.uploadInfo.text = "允许的格式:"+myXML.child("Upload").ContontFileStyle;
    }


    //选择文件事件
    function selectHandler(event:Event):void{
         
    this.uploadInfo.text = "";
         
    this.mcWaterStyle.visible = false;
         
    this.mcFilePlayer.visible = false;
         
         
    if (fileRef.size > 0){
             totalBytes 
    = fileRef.size;
             
    this.tbFilePath.text =  fileRef.name+ "[" + this.getSizeType(totalBytes) + "]";
             var fileExtName 
    = fileRef.name.substring(fileRef.name.lastIndexOf(".")+1);
             
    switch(fileExtName.toLowerCase()){
                 
    case "jpg":
                 
    case "jpeg":
                 
    case "gif":
                 
    case "bmp":
                     
    this.mcWaterStyle.visible = true;
                     
    break;
                 
    case "flv":
                     
    this.mcFilePlayer.visible = true;
                     
    this.mcFilePlayer.mcWidth.text = 410;
                     
    this.mcFilePlayer.mcHeight.text = 370;
                     
    break;
                 
    case "swf":
                     
    this.mcFilePlayer.visible = true;
                     
    this.mcFilePlayer.mcWidth.text = 550;
                     
    this.mcFilePlayer.mcHeight.text = 400;
                     
    break;
                 
    case "rm":
                 
    case "rmvb":
                 
    case "mp3":
                 
    case "avi":
                 
    case "mpg":
                 
    case "mpeg":
                 
    case "asf":
                 
    case "wmv":
                 
    case "wma":
                     
    this.mcFilePlayer.visible = true;
                     
    this.mcFilePlayer.mcWidth.text = 550;
                     
    this.mcFilePlayer.mcHeight.text = 400;
                     
    break;
                 
    default:
                     
    this.mcWaterStyle.visible = false;
                     
    this.mcFilePlayer.visible = false;
                     
    break;
             }

        }
    else{
             
    this.uploadInfo.text = "错误:您没有选择文件!";
        }
     
    }


    //上传过程中取消
    function cancelHandler(event:Event):void{
        
    this.progressBar.visible = false;
    }
    ;

    //当上载或下载操作开始时
    function openHandler(event:Event):void{
        
    this.tbFilePath.visible = false;
        
    this.mcWaterStyle.visible = false;
        
    this.mcFilePlayer.visible = false;
        
    this.btBrowser.visible = false;
        
    this.btUpload.label = "取消";
        
    this.progressBar.visible = true;
    }
    ;

    //点击伤
    function UploadHandler(event:MouseEvent):void{
        
    if (this.btUpload.label=="上传"){
            var WaterMarkStyleP:String 
    = "";
            
    if(this.mcWaterStyle.style0.selected == true)
                WaterMarkStyleP 
    = "0";
            
    else if(this.mcWaterStyle.style1.selected == true)
                WaterMarkStyleP 
    = "1";
            
    else if(this.mcWaterStyle.style2.selected == true)
                WaterMarkStyleP 
    = "2";
            
            var mcFilePlayerP:String
    ="&width="+this.mcFilePlayer.mcWidth;
            mcFilePlayerP 
    += "&height="+this.mcFilePlayer.mcHeigth;
            
            
    if(this.mcFilePlayer.mcAutoYes.selected == true)
                mcFilePlayerP 
    += "&auto=true";
            
    else if(this.mcFilePlayer.mcAutoNo.selected == true)
                mcFilePlayerP 
    += "&auto=false";
                
            uploadURL.url
    ="Upload_File_SWF.aspx?WaterMarkStyle="+WaterMarkStyleP+mcFilePlayerP;
            fileRef.upload(uploadURL);
    //此为采用aspx默认方式进行上传的文件地址。如:Upload_File_SWF.aspx此页面我在上传完毕后,直接进行Response.Write("true");那么Flash可在uploadCompleteDataHandler后可后去到true这个数据。以便你进行操作。
        }
    else if(this.btUpload.label=="取消"){
            
    this.tbFilePath.visible = true;
            
    this.mcWaterStyle.visible = false;
            
    this.mcFilePlayer.visible = false;
            
    this.btBrowser.visible = true;
            
    this.btUpload.label = "上传";
            
    this.progressBar.visible = false;
            
    this.uploadInfo.text="";
        }
    else if(this.btUpload.label=="重新上传"){
            
    this.tbFilePath.visible = true;
            
    this.mcWaterStyle.visible = false;
            
    this.mcFilePlayer.visible = false;
            
    this.btBrowser.visible = true;
            
    this.btUpload.label = "上传";
            
    this.progressBar.visible = false;
        }

    }


    //在文件上载或下载操作期间定期调用
    function progressHandler(event:ProgressEvent):void{
        
    //var fileRef:FileReference = FileReference(event.target);
        if(event.bytesLoaded==event.bytesTotal){
            
    this.uploadInfo.text= "正在转移数据,请稍后--"+getSizeType(event.bytesLoaded)+"/"+getSizeType(event.bytesTotal);
        }
    else{
            
    this.progressBar.mcMask.width = (event.bytesLoaded/event.bytesTotal)*this.progressBar.mcLoaded.width;
            
    this.uploadInfo.text="上传文件中,请等待--"+getSizeType(event.bytesLoaded)+"/"+getSizeType(event.bytesTotal);
        }

    }


    function completeHandler(
    event:Event):void {
        
    //trace("completeHandler: " + event);
        this.tbFilePath.visible = true;
        
    this.tbFilePath.text = "";
        
    this.mcWaterStyle.visible = false;
        
    this.mcFilePlayer.visible = false;
        
    this.btBrowser.visible = true;
        
    this.btUpload.label = "上传";
        
    this.progressBar.visible = false;
        
    //this.uploadInfo.text = "上传成功!";
    }


    function uploadCompleteDataHandler(
    event:DataEvent):void {
        
    if(event.data.indexOf("|")!=-1){
            var fileInfoArr 
    = event.data.split("|");
            
    if(fileInfoArr[0].toLowerCase()=="true"){
                
    this.uploadInfo.text = "上传成功:"+fileInfoArr[1]+"";
                
    if(comJsFun!=""){
                    
    //ExternalInterface.call("UploadForEditor","hh");
                    ExternalInterface.call("UploadForEditor",event.data.replace("true|",""));
                    
    //this.tbFilePath.text = event.data;
                }

            }
    else{
                
    this.uploadInfo.text = "上传失败:"+EncodeUtf8(fileInfoArr[1])+"";
            }

        }

        
        
        
        trace(
    "uploadCompleteData: " + event.data);
    }




    //错误事件
    function httpStatusHandler(event:HTTPStatusEvent):void {
       trace(
    "httpStatusHandler: " + event);
       
    this.mcWaterStyle.visible = false;
       
    this.mcFilePlayer.visible = false;
       
    this.uploadInfo.text="HTTP错误: " +  event;
    }

    function ioErrorHandler(
    event:IOErrorEvent):void {
       trace(
    "ioErrorHandler: " + event);
       
    this.mcWaterStyle.visible = false;
       
    this.mcFilePlayer.visible = false;
       
    this.uploadInfo.text="IO错误: " +  event;
    }

    function securityErrorHandler(
    event:SecurityErrorEvent):void {
       trace(
    "openHandler: " + event);
       
    this.mcWaterStyle.visible = false;
       
    this.mcFilePlayer.visible = false;
       
    this.uploadInfo.text="IO安全设置错误: " +  event;
    }








    /*--------------------以下为常用函数-------------
    ---------------------------------------------
    */

    //处理文件大小表示方法
    function getSizeType(s)
    {
        var danwei 
    = ["Byte","KB","MB","GB" ];
        var d 
    = 0;
        
    while ( s >= 900 )
        
    {
            s 
    = Math.round(s*100/1024)/100;
            d
    ++;
        }

        
    return s+danwei[d];
    }


    function getFlashVars(parName)
    {
        var parValue:String
    =stage.loaderInfo.parameters[parName];
        
    if(parValue==null)
           
    return "";
        
    else
           
    return parValue;
    }




    //转换乱码
    function EncodeUtf8(str : String):String {
        var oriByteArr : ByteArray 
    = new ByteArray();
        oriByteArr.writeUTFBytes(str);
        var tempByteArr : ByteArray 
    = new ByteArray();
        
    for (var i = 0; i<oriByteArr.length; i++{
            
    if (oriByteArr[i] == 194{
                tempByteArr.writeByte(oriByteArr[i
    +1]);
                i
    ++;
            }
     else if (oriByteArr[i] == 195{
                tempByteArr.writeByte(oriByteArr[i
    +1+ 64);
                i
    ++;
            }
     else {
                tempByteArr.writeByte(oriByteArr[i]);
            }

        }

        tempByteArr.position 
    = 0;
        
    return tempByteArr.readMultiByte(tempByteArr.bytesAvailable,"chinese");
        
    //return tempByteArr.readMultiByte(tempByteArr.bytesAvailable,"chinese");
    }

    二、相应的上传文件代码(.net)


    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.IO;
    using System.Drawing;
    using System.Drawing.Imaging;


    namespace TT.WebManager.Web.Admin.Article
    {
        
    public partial class Upload_File_SWF : System.Web.UI.Page
        
    {
            
    string AppPath = "";

            
    string FileURL = "";//文件网络地址
            string FileURL2 = "";//文件网络地址,如果加了水印
            string FileAppPath = "";
            
    string FileAppPath2 = "";

            
    string sFilePathName = "";
            
    string sFileName = "";
            
    int FileSize = 0;

            
    string FileExtName = "";

            
    int WaterMarkStyle = 0;
            
    string FileAuto = "true";
            
    int FileWidth = 0;
            
    int FileHeigth = 0;

            
    protected void Page_Load(object sender, EventArgs e)
            
    {
                TT.WebManager.BLL.Setting bll 
    = new TT.WebManager.BLL.Setting();
                bll.Init(
    false);

                AppPath 
    = System.Web.HttpContext.Current.Request.PhysicalApplicationPath;

                WaterMarkStyle 
    = Methods.Req.GetInt("WaterMarkStyle"0);
                FileWidth 
    = Methods.Req.GetInt("Width",550);
                FileHeigth 
    = Methods.Req.GetInt("Heigth"400);
                FileAuto 
    = Methods.Req.GetString("Auto");

                
    try
                
    {
                    HttpPostedFile postedFile 
    = Request.Files["Filedata"];
                    sFilePathName 
    = postedFile.FileName;
                    FileSize 
    = postedFile.ContentLength;  //===========获取文件的大小

                    
    if (FileSize <= 0)
                    
    {
                        Response.Clear();
                        Response.Write(
    "false|您没有选择文件!");
                        Response.End();
                    }

                    
    else
                    
    {
                        sFileName 
    = sFilePathName.Substring(sFilePathName.LastIndexOf("\\"+ 1);
                        FileExtName 
    = sFilePathName.Substring(sFilePathName.LastIndexOf("."+ 1);
                        
    if (IsValidFileType(FileExtName) == false)
                        
    {
                            Response.Clear();
                            Response.Write(
    "false|系统禁止上传此格式的文件!");
                            Response.End();
                        }

                        
    else
                        
    {
                            GotoUploadFile(postedFile);
                        }

                    }

                }

                
    catch { }
                
            }


            
    protected void GotoUploadFile(HttpPostedFile postedFile)
            
    {
                
    string NewFileName = DateTime.Now.ToString("yyyyMMddhhmmss"+ FileSize + "." + FileExtName;
                
    string NewFileName2 = DateTime.Now.ToString("yyyyMMddhhmmss"+ FileSize + "_1." + FileExtName;
                
    string NewFilePath = "";
                
    if (Model.Article.Setting.Upload_SortFile == true)
                
    {
                    
    if (Model.Article.Setting.Upload_FolderStyle != "")
                    
    {
                        FileURL 
    = Model.Article.Setting.Upload_Prefix + Model.Article.Setting.Upload_Folder + "/" + FileExtName + "/" + DateTime.Now.ToString(Model.Article.Setting.Upload_FolderStyle) + "/" + NewFileName;
                        FileURL2 
    = Model.Article.Setting.Upload_Prefix + Model.Article.Setting.Upload_Folder + "/" + FileExtName + "/" + DateTime.Now.ToString(Model.Article.Setting.Upload_FolderStyle) + "/" + NewFileName2;
                        NewFilePath 
    = AppPath + Model.Article.Setting.Upload_Folder.Replace("/""\\"+ "\\" + FileExtName + "\\" + DateTime.Now.ToString(Model.Article.Setting.Upload_FolderStyle).Replace("/""\\");
                    }

                    
    else
                    
    {
                        FileURL 
    = Model.Article.Setting.Upload_Prefix + Model.Article.Setting.Upload_Folder + "/" + FileExtName + "/" + NewFileName;
                        FileURL2 
    = Model.Article.Setting.Upload_Prefix + Model.Article.Setting.Upload_Folder + "/" + FileExtName + "/" + NewFileName2;
                        NewFilePath 
    = AppPath + Model.Article.Setting.Upload_Folder.Replace("/""\\"+ "\\" + FileExtName;
                    }


                }

                
    else
                
    {
                    
    if (Model.Article.Setting.Upload_FolderStyle != "")
                    
    {
                        FileURL 
    = Model.Article.Setting.Upload_Prefix + Model.Article.Setting.Upload_Folder + "/" + DateTime.Now.ToString(Model.Article.Setting.Upload_FolderStyle) + "/" + NewFileName;
                        FileURL2 
    = Model.Article.Setting.Upload_Prefix + Model.Article.Setting.Upload_Folder + "/" + DateTime.Now.ToString(Model.Article.Setting.Upload_FolderStyle) + "/" + NewFileName2;
                        NewFilePath 
    = AppPath + Model.Article.Setting.Upload_Folder.Replace("/""\\"+ "\\" + DateTime.Now.ToString(Model.Article.Setting.Upload_FolderStyle).Replace("/""\\");
                    }

                    
    else
                    
    {
                        FileURL 
    = Model.Article.Setting.Upload_Prefix + Model.Article.Setting.Upload_Folder + "/" + NewFileName;
                        FileURL2 
    = Model.Article.Setting.Upload_Prefix + Model.Article.Setting.Upload_Folder + "/" + NewFileName2;
                        NewFilePath 
    = AppPath + Model.Article.Setting.Upload_Folder.Replace("/""\\");
                    }

                }


                TT.WebManager.Methods.IIOO.CreateDirectory(NewFilePath);

                FileAppPath 
    = NewFilePath + "\\" + NewFileName;
                FileAppPath2 
    = NewFilePath + "\\" + NewFileName2;

                postedFile.SaveAs(FileAppPath);
                
    switch (FileExtName.ToLower())
                
    {
                    
    case "jpg":
                    
    case "jpeg":
                    
    case "gif":
                    
    case "bmp":
                    
    case "png":
                        
    //==========生成水印=============
                        switch (WaterMarkStyle)
                        
    {
                            
    case 1:
                                CreateWeaterText(FileAppPath, FileAppPath2, Model.Article.Setting.WaterMark_Text, FileExtName);
                                FileURL 
    = FileURL2;
                                
    break;
                            
    case 2:
                                CreateWeaterPicture(FileAppPath, FileAppPath2, Server.MapPath(Model.Article.Setting.WaterMark_Picture), FileExtName);
                                FileURL 
    = FileURL2;
                                
    break;
                            
    default:
                                
    break;
                        }

                        
    break;
                }


                
    string ReturnString = sFileName + "|" + FileURL + "|" + FileWidth + "|" + FileHeigth + "|" + FileAuto;

                Response.Clear();
                Response.Write(
    "true|"+ReturnString);
                Response.End();
            }


            
    private void CreateWeaterText(string paraOldFileName, string paraNewsFileName, string AddText, string FileExtensionName)
            
    {
                System.Drawing.Image image 
    = System.Drawing.Image.FromFile(paraOldFileName);
                System.Drawing.Graphics g 
    = System.Drawing.Graphics.FromImage(image);

                
    //文字抗锯齿
                g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                g.SmoothingMode 
    = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                g.CompositingQuality 
    = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

                g.DrawImage(image, 
    00, image.Width, image.Height);
                
    //Font font = new Font("黑体", 14, FontStyle.Bold);
                
    //Brush b = new SolidBrush(Color.Yellow);
                Font font = new Font(Model.Article.Setting.WaterMark_FontFamily, Model.Article.Setting.WaterMark_FontSize, FontStyle.Bold);
                Brush b 
    = new SolidBrush(Methods.TypeParse.StrToColor(Model.Article.Setting.WaterMark_FontColor));






                
    int Xpos = 0;
                
    int Ypos = 0;
                SizeF crsize 
    = new SizeF();
                crsize 
    = g.MeasureString(AddText, font);
                
    int crsize_With = Convert.ToInt32(crsize.Width);
                
    int crsize_Height = Convert.ToInt32(crsize.Height);

                
    int WaterMark_xPos = 10;
                
    int WaterMark_yPos = 10;

                
    switch (Model.Article.Setting.WaterMark_Position)//==========从图片的左上角开始算起(0,0)
                {
                    
    case 1:
                        Xpos 
    = WaterMark_xPos;
                        Ypos 
    = WaterMark_yPos;
                        
    break;
                    
    case 2:
                        Xpos 
    = image.Width - (crsize_With + WaterMark_xPos);
                        Ypos 
    = WaterMark_yPos;
                        
    break;
                    
    case 3:
                        Xpos 
    = WaterMark_xPos;
                        Ypos 
    = image.Height - (crsize_Height + WaterMark_yPos);
                        
    break;
                    
    case 4:
                        Xpos 
    = image.Width - (crsize_With + WaterMark_xPos);
                        Ypos 
    = image.Height - (crsize_Height + WaterMark_yPos);
                        
    break;
                }


                
    //画阴影
                PointF pt = new PointF(00);
                System.Drawing.Brush TransparentBrush0 
    = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(50, System.Drawing.Color.Black));
                System.Drawing.Brush TransparentBrush1 
    = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(20, System.Drawing.Color.Black));

                g.DrawString(AddText, font, TransparentBrush0, Xpos, Ypos 
    + 1);
                g.DrawString(AddText, font, TransparentBrush0, Xpos 
    + 1, Ypos);
                g.DrawString(AddText, font, TransparentBrush1, Xpos 
    + 1, Ypos + 1);
                g.DrawString(AddText, font, TransparentBrush1, Xpos, Ypos 
    + 2);
                g.DrawString(AddText, font, TransparentBrush1, Xpos 
    + 2, Ypos);

                TransparentBrush0.Dispose();
                TransparentBrush1.Dispose();


                g.DrawString(AddText, font, b, Xpos, Ypos);

                
    switch (FileExtensionName.ToLower())
                
    {
                    
    case "jpg":
                    
    case "jpeg":
                        image.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                        
    break;
                    
    case "gif":
                        image.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
                        
    break;
                    
    case "bmp":
                        image.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Bmp);
                        
    break;
                    
    case "png":
                        image.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);
                        
    break;
                }

                g.Dispose();

                image.Save(paraNewsFileName);
                image.Dispose();
                Response.Clear();

                
    if (File.Exists(paraOldFileName) == true)
                
    {
                    File.Delete(paraOldFileName);
                }

            }


            
    private void CreateWeaterPicture(string paraOldFileName, string paraNewsFileName, string AddPicture, string FileExtensionName)
            
    {
                System.Drawing.Image image 
    = System.Drawing.Image.FromFile(paraOldFileName);
                System.Drawing.Image copyImage 
    = System.Drawing.Image.FromFile(AddPicture);

                ImageAttributes imageAttributes 
    = new ImageAttributes();
                ColorMap colorMap 
    = new ColorMap();
                colorMap.OldColor 
    = Color.FromArgb(20002000);
                colorMap.NewColor 
    = Color.FromArgb(0000);
                ColorMap[] remapTable 
    = { colorMap };
                imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);
                
    float[][] colorMatrixElements = {
                                                    
    new float[] {1.0f,  0.0f,  0.0f,  0.0f0.0f},
                                                    
    new float[] {0.0f,  1.0f,  0.0f,  0.0f0.0f},
                                                    
    new float[] {0.0f,  0.0f,  1.0f,  0.0f0.0f},
                                                    
    new float[] {0.0f,  0.0f,  0.0f,  Model.Article.Setting.WaterMark_Transparency, 0.0f},
                                                    
    new float[] {0.0f,  0.0f,  0.0f,  0.0f1.0f}
                                                }
    ;
                ColorMatrix colorMatrix 
    = new ColorMatrix(colorMatrixElements);
                imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);


                Graphics g 
    = Graphics.FromImage(image);


                
    //PointF pt = new PointF(0, 0);
                
    //System.Drawing.Brush TransparentBrush0 = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(50, System.Drawing.Color.));
                
    //System.Drawing.Brush TransparentBrush1 = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(20, System.Drawing.Color.Black));

                
    //g.DrawString(AddText, font, TransparentBrush0, pt.X, pt.Y + 1);

                
    //g.DrawString(AddText, font, TransparentBrush0, pt.X + 1, pt.Y);

                
    //g.DrawString(AddText, font, TransparentBrush1, pt.X + 1, pt.Y + 1);

                
    //g.DrawString(AddText, font, TransparentBrush1, pt.X, pt.Y + 2);

                
    //g.DrawString(AddText, font, TransparentBrush1, pt.X + 2, pt.Y);

                
    //TransparentBrush0.Dispose();

                
    //TransparentBrush1.Dispose();


                
    //设定合成图像的质量
                g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                
    //设置高质量插值法
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
                
    //设置高质量,低速度呈现平滑程度
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

                
    int xPos = image.Width - copyImage.Width - 10;
                
    int yPos = image.Height - copyImage.Height - 10;

                
    switch (Model.Article.Setting.WaterMark_Position)//==========从图片的左上角开始算起(0,0)
                {
                    
    case 1:
                        xPos 
    = 10;
                        yPos 
    = 10;
                        
    break;
                    
    case 2:
                        xPos 
    = image.Width - copyImage.Width - 10;
                        yPos 
    = 10;
                        
    break;
                    
    case 3:
                        xPos 
    = 10;
                        yPos 
    = image.Height - copyImage.Height - 10;
                        
    break;
                    
    case 4:
                        xPos 
    = image.Width - copyImage.Width - 10;
                        yPos 
    = image.Height - copyImage.Height - 10;
                        
    break;
                }


                g.DrawImage(copyImage, 
    new Rectangle(xPos, yPos, copyImage.Width, copyImage.Height), 00, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel, imageAttributes);

                
    switch (FileExtensionName.ToLower())
                
    {
                    
    case "jpg":
                    
    case "jpeg":
                        image.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                        
    break;
                    
    case "gif":
                        image.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
                        
    break;
                    
    case "bmp":
                        image.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Bmp);
                        
    break;
                    
    case "png":
                        image.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);
                        
    break;
                }

                g.Dispose();

                image.Save(paraNewsFileName);
                image.Dispose();
                imageAttributes.Dispose();

                Response.Clear();

                
    if (File.Exists(paraOldFileName) == true)
                
    {
                    File.Delete(paraOldFileName);
                }


                
    // return paraNewsFileName;
            }


            
    protected bool IsValidFileType(string ExtName)
            
    {
                
    if (Model.Article.Setting.Upload_ContontFileStyle.Trim() == "")
                    
    return true;

                
    string[] AcceptedFileTypes = Model.Article.Setting.Upload_ContontFileStyle.Split(new char[] '|' });
                
    for (int i = 0; i < AcceptedFileTypes.Length; i++)
                
    {
                    
    if (ExtName.ToLower() == AcceptedFileTypes[i].ToLower())
                    
    {
                        
    return true;
                    }

                }

                
    return false;
            }

        }

    }

    三、相应的aspx页面代码


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html>
    <head>
      
    <title>FLASH 上传测试</title>
      
    <meta http-equiv="content-type" content="text/html; charset=gb2312" />
      
    <link href="../images/style.css" rel="stylesheet" type="text/css" />
      
    <script language="javascript">AC_FL_RunContent = 0;</script>
      
    <script src="../javascript/AC_RunActiveContent.js" language="javascript"></script>
      
    </head>
    <body>

    <!--影片中使用的 URL-->
    <!--影片中使用的文本-->
    <!-- saved from url=(0013)about:internet -->
    <script language="javascript">
        
    if (AC_FL_RunContent == 0{
            alert(
    "此页需要 AC_RunActiveContent.js");
        }
     else {
            AC_FL_RunContent(
                
    'codebase''http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
                
    'width''400',
                
    'height''56',
                
    'src''../SWFUpload/SWFFileUpload',
                
    'quality''high',
                
    'pluginspage''http://www.macromedia.com/go/getflashplayer',
                
    'align''middle',
                
    'play''true',
                
    'loop''true',
                
    'scale''showall',
                
    'wmode''window',
                
    'devicefont''false',
                
    'id''SWFFileUpload',
                
    'bgcolor''#ffffff',
                
    'name''SWFFileUpload',
                
    'menu''true',
                
    'allowFullScreen''false',
                
    'allowScriptAccess','sameDomain',
                
    'movie''../SWFUpload/SWFFileUpload',
                
    'salign''',
                
    'FlashVars','ComJsFun=UploadForEditor'
                ); 
    //end AC code
        }

    //src和movie属性为Flash文件地址,请勿写.swf后缀名
    //
    FlashVars为给Flash设置的参数。
    </script>

    <noscript>
        
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="400" height="56" id="SWFFileUpload" align="middle">
        
    <param name="allowScriptAccess" value="sameDomain" />
        
    <param name="allowFullScreen" value="false" />
        
    <param name="movie" value="../SWFUpload/SWFFileUpload.swf" />
        
    <param name="quality" value="high" />
        
    <param name="bgcolor" value="#ffffff" />
        
    <param name="FlashVars" value="ComJsFun=UploadForEditor"/>
        
    <embed src="../SWFUpload/SWFFileUpload.swf" quality="high" bgcolor="#ffffff" width="400" height="56" name="SWFFileUpload" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
        
    </object>
    </noscript>

    <div id="showInfo"></div>

     
    <script language="javascript" type="text/javascript">
    function UploadForEditor(Value){
       alert(Value);
       
    //var RSArr = Value.split("|");
       //UploaFile(RSArr[0],RSArr[1],RSArr[2],RSArr[3],RSArr[4]);
    }
     




    </script>
    </body>
    </html>
  • 相关阅读:
    国内的pythoner强烈建议使用豆瓣的pypi源 zz
    python3.x中的urllib模块
    idcheck.py
    17、关于hibernate的N+1问题
    16、【转】Hibernate 原汁原味的四种抓取策略
    1、SSH的整合---->将Struts2整合到Spring中
    1、利用json2html.js处理json数据
    1、Ubuntu14.04使用root登陆帐户
    2、CentOS中修改yum源
    1、在CentOS上安装Java JDK的步骤
  • 原文地址:https://www.cnblogs.com/dadamoney/p/1419482.html
Copyright © 2020-2023  润新知