Asp.Net MVC实现优酷(youku)Web的上传


优酷第三方上传API没有.NET版本的SDK,让从事.NET开发人员要实现开放平台上传文件无从下手。本文经过一天的预读优酷文档,以NET方式实现了视频上传。

参考:

      优酷开放文档 http://open.youku.com/

      强烈鄙视优酷团队既然没有NET版本SDK

本来以为可以通过合作级别授权,文档里面说通过合作级别授权自需要用户名和密码,然后去申请合作者身份,优酷客服告知不允许申请。

哎,只能硬着头皮去用NET采用通用授权方式去实现。

通用授权思路:

    1、请求用户授权,跳出页面优酷登入授权页面。运行授权后获取授权Code

    2、通过授权Code换取AccessToken,完成授权。

    3、然后利用AccessToken进行js上传视频。

下面是上传demo的实现代码

 public class HomeController : Controller
 {
        private string ClidentID = "您的clientid";
        private string ClientSecret = "28938bb551381999eb5e365d429e19a7";
      
        private string AccessTokenUrl = "https://openapi.youku.com/v2/oauth2/token";
        private string Code = "";
}
1、跳转到授权页面
public ActionResult Oauth() {   var url = "https://openapi.youku.com/v2/oauth2/authorize?client_id=你的ClientID&response_type=code&redirect_uri=http://您的域名/youku/home/Callback";   return Redirect(url); }

 2、Callback获取Code

   

public ActionResult Callback(string code, string state)
{
   Session.Add("Code", code); // 这里为了演示暂时采用session进行存储。实际情况可以存在文件或者数据库中。
   FileLogHelper.WriteLog(code);
   return Content(code + "...........State=" + state);
}

 3、通过Code获取AccessToken

public ActionResult Index()
{
    ViewBag.ClientId = ClidentID;
     if (Session["Code"] != null)
     {
           Code = (string) Session["Code"];
           FileLogHelper.WriteLog("session=" + Code);
           ViewBag.AccessToken = GetAccessToken();
      }
      else
      {
            ViewBag.AccessToken = GetAccessToken();
       }

       return View();            
}

 GetAccessToken()方法

    private string GetAccessToken()
        {
            if (Session["AccessToken"] == null)
            {
                var stringADict = new Dictionary();
                stringADict.Add("client_id", ClidentID);
                stringADict.Add("client_secret", ClientSecret);
                stringADict.Add("grant_type", "authorization_code");
                stringADict.Add("code", Code);
                stringADict.Add("redirect_uri", "http://www.forfutures.com:33366/youku/home/Callback");
                var result = Post.PostGetJson(AccessTokenUrl, null, stringADict);
                Session["AccessToken"] = result.access_token;
                return result.access_token;

            }

            return Session["AccessToken"] as string;
        }

  Index.chtml  

@{
    Layout = null;
}

"-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

 
   New Document 
  "Generator" content="EditPlus">
  "Author" content="">
  "Keywords" content="">
  "Description" content="">
  "content-type" content="text/html; charset=UTF-8"/>
 
"http://open.youku.com/assets/lib/bootstrap2.1.0/css/bootstrap.css" rel="stylesheet">
    "http://open.youku.com/assets/lib/bootstrap2.1.0/css/bootstrap-responsive.css" rel="stylesheet">
    
    
 
    
"youku-upload">
class="container">
class="well form-horizontal" name="video-upload">
class="control-group">
"uploadControl" class="controls">
class="control-group">
class="controls"> "text" class="input-xlarge" id="input01" name="title">
class="control-group">
class="controls">
class="control-group">
class="controls"> "text" class="input-xlarge" id="input02" name="tags"> class="help-inline">
class="control-group">
class="controls"> <select id="category-node" name="category" >select>
class="control-group">
class="controls">
class="control-group">
class="controls">
class="form-actions">
class="row" >
class="span5" id="upload-status-wraper" >

class="well">

说明

  • 最大支持上传1 GB 视频文件
  • 允许上传的视频格式为:wmv,avi,dat,asf,rm,rmvb,ram,mpg,mpeg,3gp,mov,mp4,m4v,dvix,dv,dat,
    mkv,flv,vob,ram,qt,divx,cpk,fli,flc,mod。不符合格式的视频将会被丢弃,请确保视频格式的正确性,避免上传失败
"complete">
"login" style="width:100%;height:100%;position:fixed;z-index:999;left:0px;top:0px;overflow:hidden;display:none;">

以上代码就基本上实现优酷视频的上传。

但是还有个问题需要处理,就是AccessToken好像30天就会过期,我们应该在比如29天的时候通过刷新获取新的令牌 Refresh Access Token。这样就可以实现每次都进行授权认证的页面。