[原创]ASP.NET MVC调用美图秀秀开放平台拼图实现
[原创]ASP.NET MVC调用美图秀秀开放平台拼图实现
项目中涉及到图片的美化和拼接的功能,于是用了 美图秀秀 开放平台的api
美图秀秀 开放平台地址:http://open.web.meitu测试数据/
具体步骤如下:
1.创建MeiTuUpload.aspx视图页面:
页面代码:
< html xmlns ="http://HdhCmsTestw3.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测试数据/sources/xiuxiu.js" type ="text/<span class=" wp_keywordlink_affiliate" > < a href = " http://HdhCmsTestmikel.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://HdhCmsTestmikel.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://HdhCmsTestmikel.cn/
作者: mikel
出处: http://HdhCmsTestcnblogs测试数据/mikel/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中- HdhCmsTestmikel.cn 。
分类: 开发手记
标签: ASP.NET MVC , 美图秀秀 , 美图秀秀开放平台 , 美图秀秀拼图
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于ASP.NET MVC调用美图秀秀开放平台拼图实现的详细内容...