如何实现基于CS系统 + Windwos Live Writer客户端工具 组合本地发布图片
前些日子看到DUDU的“[功能改进]通过WindowsLiveWriter上传图片”,马上来了兴趣,一是通过WindowsLiveWriter书写Blog确实比起在线书写要方便、快捷、稳定,更符合日常书写习惯;二是我目前也正好在规划基于CS系统的一个社区,刚好这些天在考虑是否到时向用户推介配合WindowsLiveWriter作为客户端书写工具;还有一个很重要的因素是,WindowsLiveWriter支持插件,目前Laurent Kempé 提供有5个插件,包括Code Syntax Highlighter,Paste Clipboard as Html等,而且WindowsLiveWriter SDK 提供有如果针对WindowsLiveWriter开发的插件的Sample。
通过咨询DUDU,并查阅WindowsLiveWriter官方帮助,获知WindowsLiveWriter通过两种方式实现本地图片上传:1、FTP方式;2、metaWeblog API支持。
个人感觉FTP方式有所不妥,所以确定选用metaWeblog API方式,查阅metaWeblog API的相关信息,发现只要在支持metaWeblog的blog系统中实现metaWeblog.newMediaObject (blogid, username, password, struct) returns struct方法,剩下的图片上传处理就交给WindowsLiveWriter来管理了。
那么CS系统如何(在何处)提供metaWeblog API支持,通过分析CS系统项目,发现在CS解决方案的CommunityServerBlogs20项目中实现了ImetaWeblog接口,同时有MetaWeblog实现。
具体的工作是:
1、在ImetaWeblog接口中定义newMediaObject()方法;
[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()方法。
/// <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的书写快乐了!



浙公网安备 33010602011771号