• 如何实现基于CS系统 + Windwos Live Writer客户端工具 组合本地发布图片


    前些日子看到DUDU的“[功能改进]通过WindowsLiveWriter上传图片”,马上来了兴趣,一是通过WindowsLiveWriter书写Blog确实比起在线书写要方便、快捷、稳定,更符合日常书写习惯;二是我目前也正好在规划基于CS系统的一个社区,刚好这些天在考虑是否到时向用户推介配合WindowsLiveWriter作为客户端书写工具;还有一个很重要的因素是,WindowsLiveWriter支持插件,目前Laurent Kempé 提供有5个插件,包括Code Syntax HighlighterPaste Clipboard as Html等,而且WindowsLiveWriter SDK 提供有如果针对WindowsLiveWriter开发的插件的Sample

    通过咨询DUDU,并查阅WindowsLiveWriter官方帮助,获知WindowsLiveWriter通过两种方式实现本地图片上传:1FTP方式;2metaWeblog API支持。

    个人感觉FTP方式有所不妥,所以确定选用metaWeblog API方式,查阅metaWeblog API的相关信息,发现只要在支持metaWeblogblog系统中实现metaWeblog.newMediaObject (blogid, username, password, struct) returns struct方法,剩下的图片上传处理就交给WindowsLiveWriter来管理了。

    那么CS系统如何(在何处)提供metaWeblog API支持,通过分析CS系统项目,发现在CS解决方案的CommunityServerBlogs20项目中实现了ImetaWeblog接口,同时有MetaWeblog实现。

    具体的工作是:

    1、在ImetaWeblog接口中定义newMediaObject()方法;

    1        [XmlRpcMethod("metaWeblog.newMediaObject"
    2            Description = "Add a media object to a post using the " 
    3            + "metaWeblog API. Returns media url as a string.")]
    4        MetaWeblog.MediaObjectUrl newMediaObject(
    5            string blogid, 
    6            string username, 
    7            string password, 
    8            MetaWeblog.MediaObject mediaObject);


    2、在MetaWeblog中实现newMediaObject()方法。

     1        /// <summary>
     2        /// Post a media object.
     3        /// </summary>
     4        /// <param name="blogid">The blogid.</param>
     5        /// <param name="username">The username.</param>
     6        /// <param name="password">The password.</param>
     7        /// <param name="mediaObject">The media object.</param>
     8        /// <returns>MediaObjectUrl  defining the url of the media</returns>

     9        public MediaObjectUrl newMediaObject(string blogid,string username,string password,MediaObject mediaObject)
    10        {
    11            if (!ValidateUser(username, password))
    12            {
    13                throw new XmlRpcFaultException(0"You have no right to do that.");
    14            }

    15
    16            string filename = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, "images/" + username + "/" + mediaObject.name);
    17
    18            if (!Directory.Exists(Path.GetDirectoryName(filename)))
    19            {
    20                Directory.CreateDirectory(Path.GetDirectoryName(filename));
    21            }

    22
    23            File.WriteAllBytes(filename, mediaObject.bits);
    24
    25            MediaObjectUrl mediaObjectUrl = new MediaObjectUrl();
    26
    27            mediaObjectUrl.url =  ConfigurationManager.AppSettings["BlogUrl"+ "/images/" + username + "/" + mediaObject.name; 
    28
    29
    30            return mediaObjectUrl;
    31        }

     

    接下来的工作就是到WindowsLiveWriter中来体验blog的书写快乐了!

  • 相关阅读:
    linux 制作不用密碼可立即登入的 ssh 用戶
    大部分人都会忽略的Python易错点总结
    Python:有参装饰器与多个装饰器装饰一个函数
    Python面向对象中super用法与MRO机制
    Python实现一个键对应多个值的字典(multidict)
    python中*和**的打包和解包
    面试题:python 中 staticmethod 和 classmethod有什么区别
    Python小练习:StringIO和BytesIO读写操作的小思考
    Python中为什么不能用可变对象作为默认参数的值
    django中csrftoken跨站请求伪造的几种方式
  • 原文地址:https://www.cnblogs.com/Luna/p/498799.html
Copyright © 2020-2023  润新知