有时候我们从其他网页上拷贝来的内容中含有图片,当原始地址失效后就会影响读者阅读。
所以我制作了这样一个插件,可以将远程图片保存到本地服务器。
声明:下面的文字是本文不可缺少的部分,转载请保留,谢谢!
////////////////////////////////////////////////////
作者:武眉博<活靶子.NET>
同时首发于:
落伍者
&& 博客园
开发者学院
&& .Net男孩社区
////////////////////////////////////////////////////
今天转载了xiaozhuang朋友的文章同时从博客园服务器上下载了图片
演示见:http://www.devedu.com/Doc/DotNet/AspNet/AspNet-AjaxWCF-ServiceADONET-Entity-FrameworkShiXianShuJuLieBiaoShuJuShaiXuanFenYePaiXuShanChu.aspx
原理如下:
1.实现ICallbackEventHandler接口以用启用客户端回调。
2.从当前FckEdiotr内容分析出所有<img标签,取得src的地址。
3.回调下载到服务器。
4.返回下载后位于本服务器上的路径。
5.替换当前FckEdiotr内容内对应的<img标签的src属性。
其他废话不多说了,代码中都有注释。
如果您熟悉Fckeditor的插件工作流程,请继续向下阅读,另请不要留言要我直接提供下载,下面的代码已经可以完整调试了。
E:\IISROOT\FckTest\FckTest\fckeditor\editor\plugins\remoteimagerubber\remoteimagerubber.aspx
1 <%--
2 使用单页模型(非代码后置),是为了便于此插件部署,
3 不需编译成dll,只需拷贝remoteimagerubber.aspx 和
fckplugin.js 到plugn目录,
4 并配置一下fckconfig.js及相应的语言包,就可以使用了。
5 --%>
6
7 <%@ Page Language="C#"
%>
8
9 <%@ Import
Namespace="System.Net" %>
10 <%--
11 实现ICallbackEventHandler接口以提供客户端回调功能。
12 --%>
13 <%@ Implements
Interface="System.Web.UI.ICallbackEventHandler"
%>
14
15 <script
runat="server">
16
17
/// <summary>
18
/// 此处配置远程文件保存目录
19
/// </summary>
20
private static readonly string savePath = "~/Uploads/";
21
22
/// <summary>
23
/// 此处配置允许下载的文件扩展名
24
/// <remarks>
25
///
暂未考虑使用动态网页输出的图片如:http://site/image.aspx?uid=00001
这样的URI;
26
///
若要实现此功能可读取流并判断ContentType,将流另存为相应文件格式即可。
27
/// </remarks>
28
/// </summary>
29
private static readonly string[ ] allowImageExtension = new string[
] { ".jpg" , ".png" , ".gif" };
30
31
/// <summary>
32
/// 此处配置本地(网站)主机名
33
/// </summary>
34
private static readonly string[ ] localhost = new string[ ] {
"localhost" , "www.devedu.com"
};
35
36
private string localImageSrc = string.Empty;
37
38
private void Page_Load( object obj , EventArgs args )
39
{
40
if ( !Page.IsPostBack )
41
{
42
ClientScriptManager csm = Page.ClientScript;
43
44
string scripCallServerDownLoad = csm.GetCallbackEventReference(
this , "args" , "__ReceiveServerData" , "context" );
45
string callbackScriptDwonLoad = "function __CallServerDownLoad(args
, context) {" + scripCallServerDownLoad + "; }";
46
if ( !csm.IsClientScriptBlockRegistered( "__CallServerDownLoad" )
)
47
{
48
csm.RegisterClientScriptBlock( this.GetType( ) ,
"__CallServerDownLoad" , callbackScriptDwonLoad , true );
49
}
50