高分求救:在设计html(asp.net(c#)版的)编辑器中 远程图片自动上传功能如何实现?
在设计html(asp.net(c#)版的)编辑器中 远程图片自动上传功能如何实现?
感谢各位老师不吝赐教详解
问题点数:100、回复次数:63Top
1 楼hxyhard(我不能)回复于 2005-07-07 15:15:01 得分 0
关注,找了好久没找到合适的
Top
2 楼renyu732(Sysinfo)回复于 2005-07-08 01:23:54 得分 0
http://renyu732.cnblogs.com/archive/2005/06/11/172714.htmlTop
3 楼yynice(小楼听雨)回复于 2005-07-08 08:13:52 得分 0
只看过远程图片自动下载的Top
4 楼camelials(星期五)回复于 2005-07-08 08:35:42 得分 0
upTop
5 楼Seeko0(阿 枫(终点又回到起点,到现在我才发现))回复于 2005-07-08 08:35:49 得分 0
FreeTextBox
上传图片的功能需要更改FreeTextBox-ToolbarItemsScript.js中function FTB_InsertImage(ftbName) {
if (FTB_IsHtmlMode(ftbName)) return;
editor = FTB_GetIFrame(ftbName);
editor.focus();
//alert("插入图片,或则文件");
//********************************************************************************************此处进行了更改。。。。
var imgstr =new String();
var url="../include/ImageGallery.aspx";
//获取服务器地址
var serverUrl=window.location.href;
var pattern =/(SoftModule\/)/i;
var urls= serverUrl.split(pattern);
if(urls.length>0)
serverUrl =urls[0];
var newurl =serverUrl+"Include/Modaldialog.htm?"+url;
var w=window.screen.availWidth ;
var h=window.screen.availHeight ;
var s =window.showModalDialog(newurl,window,"help=no;status=no;resizable=no;dialogWidth:"+w+"px;dialogHeight:"+h+"px;");
if(s!=undefined){
imgstr = s;
}
//插入图片
FTB_InsertText(ftbName,imgstr)
//********************************************************************************************重要标记,如何插入一个图片
//editor.document.execCommand('insertimage',1,'');
}
//然后自己写ImageGallery.aspx实现上传的功能Top
6 楼hchxxzx(NET?摸到一点门槛)回复于 2005-07-08 08:39:36 得分 0
以下是一个资料,你可参考一下.另外,以下的编辑器,已经实现了远程图片自动上传功能,虽然是asp写的,但也可参考,你可尝试一下.
http://ewebeditor.webasp.net/download.asp
现在基于WEB页的HTML的编辑器在新闻系统,文章系统中用得越来越广,一个网页一粘就可以保持原来的样式,同时图片也可以在这个页中保持。但是在使用过程中,如果所粘贴页中的图片被删除,就会在自己的页面上留下一个大大的“X”,影响美观。以前只好把这个图片保存下来,再重新上传到服务器上,这样实在麻烦。能不能让服务器自动去下载图片保存在服务器并且替换页面上的链接?答案是肯定的。
要实现这个功能需要经过三个步骤:
一,取得原页中的图片的地址。方法很多,可以用分割字符串,也可以用正则匹配。实践证明用正则匹配最为简单。经过分析图片的地址都保存在<IMG>标签中。我们可以先取得所有这个标签。过程如下:
Set objRegExp = New Regexp'设置配置对象
objRegExp.IgnoreCase = True’忽略大小写
objRegExp.Global = True’设置为全文搜索
objRegExp.Pattern = "<IMG.+?>"'为了确保能准确地取出图片地址所以分为两层配置:首先找到里面的<IMG>标签,然后再取出里面的图片地址后面的getimgs函数就是实现后一个功能的。
strs=trim(str)
Set Matches =objRegExp.Execute(strs)’开始执行配置
For Each Match in Matches
?RetStr = RetStr &getimgs( Match.Value )’执行第二轮的匹配
Next
所有的图片在里面都是这样的src="http://图片的地址",所以可以这样来取得确切的图片地址:
function getimgs(str)
getimgs=""
Set objRegExp1 = New Regexp
objRegExp1.IgnoreCase = True
objRegExp1.Global = True
objRegExp1.Pattern = "http://.+?"""’取出里面的地址
set mm=objRegExp1.Execute(str)
For Each Match1 in mm
getimgs=getimgs&"||"&left(Match1.Value,len(Match1.Value)-1)’把里面的地址串起来备用
next
end function
取得了所有的图片的地址,我们就可以进行第二步的操作了。
二,下载图片并保存在服务器上。这个又可以分为两个步骤:一个是取得图片的内容,另一个是保存在服务器上。取得图片的内容是通过下面的函数来实现的:
function getHTTPPage(url)
on error resume next
dim http
set http=server.createobject("MSXML2.XMLHTTP")‘使用xmlhttp的方法来获得图片的内容
Http.open "GET",url,false
Http.send()
if Http.readystate<>4 then
exit function
end if
getHTTPPage=Http.responseBody
set http=nothing
if err.number<>0 then err.Clear
end function
取得了图片的内容要保存,给人一种感觉是用FSO来作就可以了,但实际上不行,这样保存程序就会出错,因为FSO不支持流式的文件,所以我们要调用另一个对象:ADO.STREM。具体的过程如下:
function saveimage(from,tofile)
dim geturl,objStream,imgs
geturl=trim(from)
imgs=gethttppage(geturl)'取得图片的具休内容的过程
Set objStream = Server.CreateObject("ADODB.Stream")'建立ADODB.Stream对象,必须要ADO 2.5以上版本
objStream.Type =1'以二进制模式打开
objStream.Open
objstream.write imgs'将字符串内容写入缓冲
objstream.SaveToFile server.mappath(tofile),2'-将缓冲的内容写入文件
objstream.Close()'关闭对象
set objstream=nothing
end function
所以只要用一个循环来把刚才取得的地址中的图片全部保存下来,具体过程如下:
arrimg=split(retstr,"||")'分割字串,取得里面地址列表
allimg=""
newimg=""
for i=1 to ubound(arrimg)
if arrimg(i)<>"" and instr(allimg,arrimg(i))<1 then'看这个图片是否已经下载过
fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),".")))
saveimage(arrimg(i),fname)‘保存地址的函数,过程见上面
allimg=allimg&"||"&arrimg(i)'把保存下来的图片的地址串回起来,以确定要替换的地址
newimg=newimg&"||"&fname'把本地的地址串回起来
end if
next
第三步就是替换原来的地址了。具体的过程就是下面了:
arrnew=split(newimg,"||")'取得原来的图片地址列表
arrall=split(allimg,"||")'取得已经保存下来的图片的地址列表
for i=1 to ubound(arrnew)'执行循环替换原来的地址
strs=replace(strs,arrall(i),arrnew(i))
next
cctv=strs
讲到这里,这个函数的基本过程就是这样了,当然可以对它进行改造就可以实现更多的功能,如:加上图片大小的限制,加上对本地机上的图片下载的限制,以免造成重复下载图片。同时也应该看到这个函数的不足之处是只能处理静态的图片文件,不能适用程序生成的图片。Top
7 楼hxz2008(心语)回复于 2005-07-08 15:07:15 得分 0
非常感谢大家的热心帮助Top
8 楼hxz2008(心语)回复于 2005-07-09 10:52:28 得分 0
欢迎各位高手的到来Top
9 楼hxz2008(心语)回复于 2005-07-11 15:02:59 得分 0
敬请您的关注Top
10 楼SiaoColumn(池水)回复于 2005-07-13 16:43:58 得分 0
关注了许久……Top
11 楼hxz2008(心语)回复于 2005-07-14 10:23:32 得分 0
请您赐教Top
12 楼hxz2008(心语)回复于 2005-07-16 09:10:53 得分 0
helpTop
13 楼codeangel(http://www.wSoft.Net)回复于 2005-07-16 09:49:36 得分 0
Unknow,help you up!Top
14 楼qianblue(浅蓝)回复于 2005-07-17 10:58:43 得分 0
自己写吧,也不难Top
15 楼hxz2008(心语)回复于 2005-07-18 08:42:46 得分 0
请您指点一下啊Top
16 楼ye_zi(行到水穷处·坐看云起时)回复于 2005-07-18 09:03:09 得分 0
MARKTop
17 楼qianblue(浅蓝)回复于 2005-07-18 09:28:28 得分 0
先添加引用-COM-Microsoft Xml 3.0,然后在代码开始处写:
using MSXML2;
下面就是主要的代码:
private void Page_Load(object sender, System.EventArgs e)
{
string Url = "http://dotnet.aspx.cc/Images/logoSite.gif";
string StringFileName = Url.Substring(Url.LastIndexOf("/") + 1);
string StringFilePath = Request.PhysicalApplicationPath;
if(!StringFilePath.EndsWith("/")) StringFilePath += "/";
MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass();
_xmlhttp.open("GET",Url,false,null,null);
_xmlhttp.send("");
if( _xmlhttp.readyState == 4 )
{
if(System.IO.File.Exists(StringFilePath + StringFileName))
System.IO.File.Delete(StringFilePath + StringFileName);
System.IO.FileStream fs = new System.IO.FileStream(StringFilePath + StringFileName, System.IO.FileMode.CreateNew);
System.IO.BinaryWriter w = new System.IO.BinaryWriter(fs);
w.Write((byte[])_xmlhttp.responseBody);
w.Close();
fs.Close();
Response.Write ("文件已经得到。<br><a href='" + Request.ApplicationPath + StringFileName +"' target='_blank'>");
Response.Write ("查看" + StringFileName + "</a>");
}
else
Response.Write (_xmlhttp.statusText);
Response.End();
}
Top
18 楼hxz2008(心语)回复于 2005-07-19 08:37:24 得分 0
感谢您的指点Top
19 楼hxz2008(心语)回复于 2005-07-20 16:14:45 得分 0
欢迎各位Top
20 楼hxz2008(心语)回复于 2005-07-22 15:26:41 得分 0
快来帮忙了Top
21 楼OSCAR_NJU(死刑犯)回复于 2005-07-24 02:25:04 得分 0
我刚刚把freetextbox加上了插入上传图片的按钮,自动生产缩略图。Top
22 楼hxz2008(心语)回复于 2005-07-25 18:07:29 得分 0
欢迎赐教Top
23 楼hxz2008(心语)回复于 2005-07-26 09:55:14 得分 0
快来了Top
24 楼hxz2008(心语)回复于 2005-08-03 22:09:35 得分 0
hellpTop
25 楼SiaoColumn(池水)回复于 2005-08-12 08:57:48 得分 0
upTop
26 楼hxz2008(心语)回复于 2005-09-06 10:31:57 得分 0
欢迎各位不吝赐教Top
27 楼mumushu(木木树)回复于 2005-09-06 11:04:07 得分 0
http://www.lionsky.net/MyWebsite/DownSoft/List.Aspx?ID=238Top
28 楼hxz2008(心语)回复于 2005-09-22 15:51:18 得分 0
还有高招没?Top
29 楼liuqinglq(白菜)回复于 2005-09-22 15:54:06 得分 0
收藏一下Top
30 楼hxz2008(心语)回复于 2005-09-27 16:12:40 得分 0
请教了Top
31 楼freetofly()回复于 2005-10-03 12:50:49 得分 0
什么叫自动上传啊
没弄明白
在.NET中上传到很容易
有个HTML控件就OK啊Top
32 楼powbcom(一搏云天[I CAN])回复于 2005-10-03 13:44:47 得分 0
找一个HtmlEditor3.1的.NET版,里面有一个分析图片和下载图片的功能,我的就是从这里面搞出来的,非常好用!Top
33 楼hxz2008(心语)回复于 2005-10-20 09:51:23 得分 0
欢迎各位的到来Top
34 楼hxz2008(心语)回复于 2005-10-24 16:59:57 得分 0
在设计html(asp.net(c#)版的)编辑器中 远程图片自动上传功能如何实现?
感谢各位老师不吝赐教详解
Top
35 楼zeusvenus()回复于 2005-11-28 13:22:22 得分 0
用ewebeditor或freetextbox控件Top
36 楼hxz2008(心语)回复于 2005-11-29 08:59:29 得分 0
感谢各位老师不吝赐教详解
Top
37 楼hxz2008(心语)回复于 2005-11-29 16:21:36 得分 0
在设计html(asp.net(c#)版的)编辑器中 远程图片自动上传功能如何实现?
帮了忙了Top
38 楼SiaoColumn(池水)回复于 2005-11-30 09:14:09 得分 0
顶Top
39 楼hxz2008(心语)回复于 2005-11-30 15:26:31 得分 0
在设计html(asp.net(c#)版的)编辑器中 远程图片自动上传功能如何实现?
Top
40 楼vipfenghuang(张伟)回复于 2005-12-07 14:42:22 得分 0
http.post
http.sendTop
41 楼net_lover(【孟子E章】)回复于 2005-12-07 14:50:53 得分 0
编辑器本身不能实现这个功能,通用的办法是发送到服务器端再进行解析html取出地址,再进行下载保存。
在客户端耶可以通过DOM得到img的url,用ajax告知服务器下载到服务器端,本地是没有权限的,Top
42 楼hxz2008(心语)回复于 2005-12-19 10:02:22 得分 0
非常感谢
Top
43 楼hxz2008(心语)回复于 2005-12-28 09:43:13 得分 0
大家快来捧场Top
44 楼hxz2008(心语)回复于 2006-01-11 09:20:43 得分 0
热切关注...Top
45 楼tigerhu76(虎虎)回复于 2006-01-18 14:00:18 得分 0
关注Top
46 楼hxz2008(心语)回复于 2006-02-10 14:15:23 得分 0
请各位赐教了Top
47 楼menuvb(戏子,白日做梦)回复于 2006-02-27 13:42:39 得分 0
建议使用web service来实现远程图片上传
这里有示例
http://www.codeproject.com/soap/MTOMWebServices.aspTop
48 楼SiaoColumn(池水)回复于 2006-03-17 10:05:30 得分 0
关注了许久...........Top
49 楼SiaoColumn(池水)回复于 2006-03-20 13:55:46 得分 0
给我你的Email发给你Top
50 楼ohyear(From Now On...)回复于 2006-03-21 10:18:22 得分 0
关注此贴!Top
51 楼hxz2008(心语)回复于 2006-03-22 10:12:53 得分 0
hxztzsd@sina.comTop
52 楼ericfine(埃里克)回复于 2006-04-16 01:24:47 得分 0
很简单,用正规找出HTML代码中的<img src="图片地址"> , 再用webclient或webrequest下载,再把HTML代码中的图片地址替换掉Top
53 楼webwait(webwei)回复于 2006-04-16 02:04:03 得分 0
关注Top
54 楼hxz2008(心语)回复于 2006-05-18 10:31:18 得分 0
感谢各位的到来
Top
55 楼piaoyu228(镜子)回复于 2006-05-31 17:13:48 得分 0
关注Top
56 楼gaoshanshan(高姗姗(姗姗来迟))回复于 2006-05-31 20:19:51 得分 0
WebClient不就下载了,好运Top
57 楼ilovejolly(有些伤感)回复于 2006-06-01 08:24:08 得分 0
markTop
58 楼csdsuper(齐天)回复于 2006-06-01 08:39:01 得分 0
关注Top
59 楼CCjian(默契)回复于 2006-06-05 13:08:27 得分 0
webclient或webrequest(借鉴)Top
60 楼lang11zi(微软菜虫)回复于 2006-06-05 13:29:44 得分 0
看看Top
61 楼dgrwang(探索者)回复于 2006-06-14 13:43:27 得分 0
写编辑器,一般都是用ubb,如图片是[img][/img]
你在编辑器提交时,用正则把[img][/img]中的url取出来,来后存到一个数组或,arrylist或hashtable里,然后down下来不就完了Top
62 楼cabee()回复于 2006-06-17 23:35:26 得分 0
upTop
63 楼lupeng8175(行者无疆)回复于 2006-06-30 16:42:13 得分 0
收藏学习Top




