终于明白如何解决Z-BLOG的Live Writer支持另人头疼的问题了

--只需要对一个文件做一些小小的修改

转自http://www.mculee.cn

================================================

让zBlog完美支持Windows Live Writer

技术原创 15 Views | No Comments »

zBlog官网发布了WLW插件,让我这个正在尝试和探索zBlog的新人激动了好久~~

能离线编写博文,并且可以像写Word一样方便的使用复制粘贴和格式编辑功能,无疑是一个很惬意的事情。

可以好景不长,在一次发布博文的时候,突然出现了发布失败!打开WLW的帮助菜单下的关于:

 

点击“显示日志文件”,打开WLW的日志,找到如下的错误:

 错误原因:文件已存在,请先删除

根据错误提示,是因为某个文件已经存在,导致发布失败~

这下子郁闷坏我了~试了好多次都不得其解。起初以为是zBlog的WLW插件不支持文章的编辑,所以才导致发布的时候出现已经存在的错误提示。

但是后来偶然的一次尝试,让我又陷入了苦恼。我的另外一篇文章可以发布!而且不管怎么编辑,怎么重新发布,都没有问题~

在zBlog的论坛里转了一圈,好像也没发现什么特别的事情。后来突然注意到,在WLW插件的描述里有这样的描述:

注意不要上传同名的图片

哈哈~原来如此~~ 茅塞顿开,原来,我之前发布失败的那篇文章,里面包含有图片,而这个图片是直接将剪贴板上的图片粘贴进来的~~

后来研究发现,如果在WLW里写文章的时候使用了它的OLE功能(就是直接截屏或通过其他方式将图片放到剪贴板,然后直接粘贴进来),那么WLW在发布文章的时候都会以同样的名字来命名这些图片。

找到问题的根源,接下来就要看 怎么解决了。

既然是文件名的原因,那么在上传文件的时候让zBlog自动重命名就好了。好,说干就干。

在zBlog的xml-rpc目录下,有一个index.asp文件,这个文件是web blog的接口,WLW发布文章全部靠它来实现。那么就先来分析一下这个文件吧。

通过之前的尝试知道,文章的编辑发布修改都是没有问题的,问题就出在附件的上传上。WLW在发布附件的时候会使用“metaWeblog.newMediaObject”方法来向服务器提交图片等多媒体文件。

在index.asp文件里搜索“metaWeblog.newMediaObject”,找到下面的内容:

 

可以看到zBlog在接收到“metaWeblog.newMediaObject” 方法的请求时,最终会使用this_newMediaObject函数来完成文件的上传等处理。那么,再接着找这个函数。

在大概400多行的位置找到了这个函数。通过分析这个函数的实现,可以看到这一段关键的地方:

 

其中,第455行的位置是用来判断比较当前上传的文件是否已经存在。如果存在,则会直接返回,并报错,报的错误即是WLW的日志中那些内容。

既然我们不希望它判断,那么好,把这一段注释掉。

然后,接着。

仅仅去掉判断是没有用的,因为WLW生成的图片每次都是同样的名字,即便zBlog上传到服务器,那么也会覆盖掉之前的日志的图片。那么怎么办呢?需要重新生成一个文件名,而这个文件名是不希望有重复的。

可以利用日期和时间或者随机数来生成一个不重复的名称。不过,zBlog已经提供了现成的操作方法,不用我们自己麻烦了:-)

注意看上图中的第462行,在进行过前面的判断过程后,这里会进行实际的文件上传的操作。UpLoad函数这里它给的是FALSE参数。简单研究了一下zBlog使用的文件上传的类,在这个类中已经实现了自动重命名的操作。只需要将UpLoad函数的参数变为TRUE即可,简单吧,所以,我们改造后的index.asp如下:

 

这里,我删掉了之前的判断过程而不是注释掉它。

总结一下:

1、将index.asp里对文件名的查询判断删掉

2、将UpLoad的参数改为True

OK,现在我的WLW已经可以非常灵活自如的使用啦,哈哈~~~~