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

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

通过咨询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 None.gif         [XmlRpcMethod( " metaWeblog.newMediaObject "
2 None.gif            Description  =   " Add a media object to a post using the  "  
3 None.gif             +   " metaWeblog API. Returns media url as a string. " )]
4 None.gif        MetaWeblog.MediaObjectUrl newMediaObject(
5 None.gif             string  blogid, 
6 None.gif             string  username, 
7 None.gif             string  password, 
8 None.gif            MetaWeblog.MediaObject mediaObject);


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

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

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

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

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

 

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

转载于:https://www.cnblogs.com/Luna/archive/2006/09/08/498799.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值