好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ASP.NET MVC调用美图秀秀开放平台拼图实现

[原创]ASP.NET MVC调用美图秀秀开放平台拼图实现

[原创]ASP.NET MVC调用美图秀秀开放平台拼图实现

项目中涉及到图片的美化和拼接的功能,于是用了 美图秀秀 开放平台的api

美图秀秀 开放平台地址:http://open.web.meitu.com/

具体步骤如下:

1.创建MeiTuUpload.aspx视图页面:

页面代码:

 <  html   xmlns  ="http://www.w3.org/1999/xhtml"   > 
 <  head   runat  ="server"  > 
     <  title  > 图片编辑 </  title  > 
     <%   List  <  NewTang.Models.Entity.PicInfo  >   pics   =   new   List  <  NewTang.Models.Entity.PicInfo  >  ();
         if   (ViewData[  "  Pics  "  ] !  =   null  )
       { 
            pics  =  (List  <  NewTang.Models.Entity.PicInfo  >  )ViewData[  "  Pics  "  ];
       }

           %> 
  <  script   src  ="http://open.web.meitu.com/sources/xiuxiu.js"   type  ="text/<span class="  wp_keywordlink_affiliate"  >  <  a href  =  "  http://www.mikel.cn/category/%e5%bc%80%e5%8f%91%e7%ac%94%e8%ae%b0/javascript  "   title  =  "  JavaScript  "   target  =  "  _blank  "  >  JavaScript  <  /  a><  /  span  >  "  ></script>       
<script language=  "  <  span class  =  "  wp_keywordlink_affiliate  "  ><  a href  =  "  http://www.mikel.cn/category/%e5%bc%80%e5%8f%91%e7%ac%94%e8%ae%b0/javascript  "   title  =  "  JavaScript  "   target  =  "  _blank  "  >  JavaScript  <  /  a><  /  span  >  "   type=  "  text  /  javascript" > 
 window.onload  =  function  (){
    xiuxiu.setFlashvars(  "  localFileEnabled  "  ,   1  );
    xiuxiu.embedSWF(  "  altContent  "  ,  2  ,  "  100%  "  ,  "  100%  "  );
      /*  第1个参数是加载编辑器div容器,第2个参数是编辑器类型,第3个参数是div容器宽,第4个参数是div容器高  */  

    xiuxiu.setUploadURL(  "  http://localhost:4657/Components/stream.ashx  "  );   //  修改为您自己的上传接收图片程序 
     xiuxiu.onInit   =   function   ()
    {
          <%   if  (pics.Count  >  0  ){   %>  
        xiuxiu.loadPhoto(  "  <%=pics[0].Path %>  "  );
          <%  }   %>  
    }    
    xiuxiu.onUploadResponse   =   function   (data)
    {
           //  alert("上传响应" + data);   
          parent.setfilePath(data);
         parent.meitu.close();
    }
    xiuxiu.onClose   =   function  () {
        parent.meitu.close();
    }
}

      function   closewbox() {
        
    }
    
      function   setfilePath(data)
    {
       
    }
  </  script  > 
 <  style   type  ="text/css"  >  
    html, body   {   height  :  100%  ;   overflow  :  hidden  ;   }  
    body   {   margin  :  0  ;   } 
 </  style  >   
 </  head  > 
 <  body   > 
 <  form   id  ="upload"   action  ="/Shop/UpLoadImage"   method  ="post"  
enctype  ="multipart/form-data"  > 
 <  div   id  ="altContent"  > 

     <  h1  > 美图秀秀 </  h1  > 
 </  div  > 
 </  form  > 
 </  body  > 
 </  html  > 

2.创建MeiTuUpload的Action
代码如下:

?

/// <summary>

/// 美图秀秀拼图

/// </summary>

/// <param name="newsInfoId"></param>

/// <returns></returns>

public   ActionResult MeiTuUpload( string   newsInfoId)

{

     try

     {

         ViewData[ "title" ] = "美图拼图" ;

         PicInfo pic = new   PicInfo();

         pic.NewsInfoId = newsInfoId;

         ViewData[ "Pics" ] = business.Select<PicInfo>(pic);

         //主题信息

         NewsInfo news = new   NewsInfo() { NewsInfoID=newsInfoId };

         ViewData[ "News" ] = business.Select<NewsInfo>(news);

          

 

     }

     catch   (Exception e)

     {

         return   new   BaseController().Error( "Error" , "错误信息" , e.Message);

     }

     return   View();

 

}

 3.创建文件上传stream.ashx文件,可以从官方下载:备注:setUploadURL(“”) 参数为接收图片文件。php示例可参考  流式上传  或者  标准表单上传 ; C# 示例可参考  流式上传  或者  标准表单上传
代码如下:

 using   System;
  using   System.Collections.Generic;
  using   System.Text;
  using   System.Web;
  using   System.Configuration;
  using   System.IO;
  using   System.Drawing;
  using   XiuXiuWeb.XiuXiuStream;

  namespace   XiuXiuWeb
{
      ///   <summary> 
     ///   Summary description for stream
      ///   </summary> 
     public   class   stream : IHttpHandler
    {

          public   void   ProcessRequest(HttpContext context)
        {
              //  config 配置节点可以将图片保存至指定目录,未配置将保存至 /XiuXiuUpload
              //  <appSettings>
              //    <add key="XiuXiuImageSavePath" value="/upload"/>
              //  </appSettings> 
             string  name =  null  ;
              if  (context.Request.TotalBytes >  0  )
            {
                XiuXiuStreamImage img  =  new   XiuXiuStreamImage(context);
                name  =  img.Save();
            }
              else  
            {
                name  =  "  非法访问  "  ;
            }
            context.Response.ContentType  =  "  text/plain  "  ;
            context.Response.Write(name);
        }

          public   bool   IsReusable
        {
              get  
            {
                  return   false  ;
            }
        }
    }

      namespace   XiuXiuStream
    {

          ///   <summary> 
         ///   上传抽象类
          ///   </summary> 
         public   abstract   class   XiuXiuImage
        {

              public  String ImageUrl {  get ; set  ;}
              ///   <summary> 
             ///   基类保存
              ///   </summary> 
             ///   <returns>  返回保存路径+文件名  </returns> 
             public   virtual   string   Save()
            {
                  string  fileName =  this  .GetFileName();
                  if  ( null  == fileName)  return   null  ;

                  //  string root = HttpContext.Current.Server.MapPath(path); 
                 string  thisDate =  ""  ;
                thisDate  =  DateTime.Now.Year.ToString();
                  if  (DateTime.Now.Month <  10  )
                {
                    thisDate  +=  "  0  "  +  DateTime.Now.Month.ToString();
                }
                  else  
                {
                    thisDate  +=  DateTime.Now.Month.ToString();
                }
                  if  (DateTime.Now.Day <  10  )
                {
                    thisDate  +=  "  0  "  +  DateTime.Now.Day.ToString();
                }
                  else  
                {
                    thisDate  +=  DateTime.Now.Day.ToString();
                }
                  string  relativePath = System.Web.HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings[ "  UploadDirectory  " ] +  "  pic/  "  + thisDate.ToString().Replace( "   " ,  ""  ));
                  if  (! Directory.Exists(relativePath))
                {
                    Directory.CreateDirectory(relativePath);
                }
                  //  if (!Directory.Exists(root))
                  //  {
                  //      Directory.CreateDirectory(root);
                  //  } 
                 this .ImageUrl=ConfigurationSettings.AppSettings[ "  WebSiteUrl  " ] +  "  /UploadFiles/pic/  "  + thisDate.ToString().Replace( "   " ,  "" ) +  "  /  "  +  fileName;

                  this .FileName =  Path.Combine(relativePath, fileName);
                  string [] paths =  { relativePath, fileName };
                  return   string .Join( "  /  "  , paths);
            }

              public   XiuXiuImage()
            {
                path  = path ==  null  ?  "  /XiuXiuUpload  "   : path;
            }

              ///   <summary> 
             ///   确定上传类型
              ///   </summary> 
             protected   bool   IsUplodType
            {
                  get  
                {
                      string  extension =  this  .GetExtension();
                      return   "  .jpg .gif .png .icon .bmp .tiff .wmf .emf .exif  " .IndexOf(extension) >=  0  ?  true  :  false  ;
                }
            }
              private   string  _fileName =  null  ;
              ///   <summary> 
             ///   最终保存路径
              ///   </summary> 
             protected   string   FileName
            {
                  set  { _fileName =  value; }
                  get  {  return   _fileName; }
            }

              ///   <summary> 
             ///   配置文件路径 无配置上传到XiuXiuUpload
              ///   </summary> 
             protected   string  path = ConfigurationManager.AppSettings[ "  UploadDirectory  "  ];

              ///   <summary> 
             ///   获取拓展名
              ///   </summary> 
             ///   <returns></returns> 
             protected   abstract   string   GetExtension();

              ///   <summary> 
             ///   获取最终保存文件名
              ///   </summary> 
             ///   <returns></returns> 
             protected   string   GetFileName()
            {
                  string  extension =  this  .GetExtension();
                  if  ( null  == extension)  return   null  ;
                  else  
                {
                      string  name =  this  .GetName();
                      string [] imgName = {  "  news  "  , name, extension };
                      return   string .Join( ""  , imgName);
                }
            }
              ///   <summary> 
             ///   获取保存文件名
              ///   </summary> 
             ///   <returns></returns> 
             private   string   GetName()
            {
                DateTime uploadTime  =  DateTime.Now;
                  string [] times =  { uploadTime.Year.ToString(), uploadTime.Month.ToString(), uploadTime.Day.ToString(),
                                 uploadTime.Hour.ToString(), uploadTime.Millisecond.ToString(), uploadTime.Second.ToString() };
                  return   string .Join( ""  , times);
            }
        }
          ///   <summary> 
         ///   Stream接收
          ///   </summary> 
         public   sealed   class   XiuXiuStreamImage : XiuXiuImage
        {
              private  MemoryStream stream =  null  ;

              //  图片的url路径 
             private  String webPath= null  ;

              public   XiuXiuStreamImage(HttpContext context)
            {
                  int  count =  context.Request.TotalBytes;
                  if  (count >  0  )
                {
                      byte [] bytes =  context.Request.BinaryRead(context.Request.TotalBytes);
                      this .stream =  new   MemoryStream(bytes);
                }
            }

              private   Image File
            {
                  get  
                {
                      return   this .stream ==  null  ?  null  : Image.FromStream( this  .stream);
                }
            }
              ///   <summary> 
             ///   保存图片,成功返回文件路径,失败null
              ///   非图片格式返回错误信息
              ///   </summary> 
             ///   <returns>  成功返回文件路径 失败null  </returns> 
             public   override   string   Save()
            {
                  if  (! this  .IsUplodType)
                {
                      this  .stream.Dispose();
                      return   "  Only allowed to upload pictures.  "  ;
                }
                  string  returnName =  base  .Save();
                  if  ( this .FileName !=  null  )
                {
                      this .File.Save( this  .FileName);
                      this  .stream.Dispose();
                      return   ImageUrl;
                }
                  return   null  ;
            }

              protected   override   string   GetExtension()
            {
                  if  ( this .File !=  null  )
                {
                      string  fileExtension =  this .File.RawFormat.ToString().Substring( 14  ),
                           jpgExtension  =  System.Drawing.Imaging.ImageFormat.Jpeg.Guid.ToString(),
                           gifExtension  =  System.Drawing.Imaging.ImageFormat.Gif.Guid.ToString(),
                           pngExtension  =  System.Drawing.Imaging.ImageFormat.Png.Guid.ToString(),
                           iconExtension  =  System.Drawing.Imaging.ImageFormat.Icon.Guid.ToString(),
                           bmpExtension  =  System.Drawing.Imaging.ImageFormat.Bmp.Guid.ToString(),
                           tiffExtension  =  System.Drawing.Imaging.ImageFormat.Tiff.Guid.ToString(),
                           wmfExtension  =  System.Drawing.Imaging.ImageFormat.Wmf.Guid.ToString(),
                           emfExtension  =  System.Drawing.Imaging.ImageFormat.Emf.Guid.ToString(),
                           exifExtension  =  System.Drawing.Imaging.ImageFormat.Exif.Guid.ToString();
                    fileExtension  = fileExtension.Substring( 0 , fileExtension.Length -  1  );
                      if  (fileExtension ==  jpgExtension)
                    {
                          return   "  .jpg  "  ;
                    }
                      else   if  (fileExtension ==  gifExtension)
                    {
                          return   "  .gif  "  ;
                    }
                      else   if  (fileExtension ==  pngExtension)
                    {
                          return   "  .png  "  ;
                    }
                      else   if  (fileExtension ==  iconExtension)
                    {
                          return   "  .icon  "  ;
                    }
                      else   if  (fileExtension ==  bmpExtension)
                    {
                          return   "  .bmp  "  ;
                    }
                      else   if  (fileExtension ==  tiffExtension)
                    {
                          return   "  .tiff  "  ;
                    }
                      else   if  (fileExtension ==  wmfExtension)
                    {
                          return   "  .wmf  "  ;
                    }
                      else   if  (fileExtension ==  emfExtension)
                    {
                          return   "  .emf  "  ;
                    }
                      else   if  (fileExtension ==  exifExtension)
                    {
                          return   "  .exif  "  ;
                    }
                }
                  return   null  ;
            }
        }
    }
} 

4.调用页面,重点在这儿,官方用的是prettify.js的弹窗,我用的wbox.js的iframe加载MeiTuUpload.aspx页面来实现的调用,官方封装了个插件用于执行示例代码来动态加载美图秀秀插件,下面是代码:
页面代码:

  <  tr  > 
   <  td   class  ="bg1"   height  ="25"   align  ="right"  > 缩略图: </  td  > 
   <  td   class  ="bg2"  ><  img   id  ="imgNewsInfo"   src  ="<%=newsInfo.NewsInfoImage %>"   width  ="220"   height  ="200"   /> 
  </  td  > 
 </  tr  >       
  <  tr  > 
   <  td   class  ="bg1"   height  ="25"   align  ="right"  > 缩略图上传: </  td  > 
   <  td   class  ="bg2"  ><  input   type  ="hidden"   id  ="filePath"   name  ="filePath"   value  ="<%=newsInfo.NewsInfoImage %>"   /><  a   id  ="meitu"   class  ="btngreen"   href  ="javascript:;"  > 拼图 </  a  >  
  </  td  > 
 </  tr  >  

js弹窗代码:

?

var   meitu = $( "#meitu" ).wBox({ noTitle: true ,title: "拼图" , requestType: "iframe" , iframeWH: { 420, height: 400 }, target: "/NewsInfoManager/MeiTuUpload?InfoClass=2&newsInfoId=<%=newsInfo.NewsInfoID %>"   });

//设置返回值的路var meitu = $("#meitu").wBox({ noTitle:true,title: "拼图", requestType: "iframe", iframeWH: { 420, height: 400 }, target: "/NewsInfoManager/MeiTuUpload?InfoClass=2&newsInfoId=<%=newsInfo.NewsInfoID %>" });

//设置返回值的路径

function   setfilePath(data) {

     $( '#filePath' ).val(data);

     $( '#imgNewsInfo' ).attr( 'src' ,data);

}

 

function   setfilePath(data) {

     $( '#filePath' ).val(data);

     $( '#imgNewsInfo' ).attr( 'src' ,data);

}

 博文地址: http://www.mikel.cn/


作者: mikel  
出处: http://www.cnblogs.com/mikel/  
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 
该文章也同时发布在我的独立博客中- www.mikel.cn 。

 

分类:  开发手记

标签:  ASP.NET MVC ,  美图秀秀 ,  美图秀秀开放平台 ,  美图秀秀拼图

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于ASP.NET MVC调用美图秀秀开放平台拼图实现的详细内容...

  阅读:57次