首先去下载freetextbox,在网站中,选择添加引用,找到freetextbox文件的存放位置,单击确定,系统创建bin,将treetextbox组件存放在bin下。创建一个saveimages的文件夹,保存通过freetextbox控件上传的图片信息。
将freetextbox组件中的ftb.imagegallery.aspx文件复制到网站的根目录,该文件实现上传图片功能。修改该文件的只读属性,将AllowImage...都该为true,这些就都可以用了。
在ftb.imagegallery.aspx中,我们如果设置了JavaScriptLocation="InternalResource"
UtilityImagesLocation="InternalResource" ,那么我们可以不用复制aspnet_client到根目录下,但是如果它们没有修改时默认的JavaScriptLocation="ExternalFile" ButtonImagesLocation="ExternalFile" 那么我们需要复制aspnet_client。
在添加组件之前,需要在页面的html源代码中添加注册组件的代码。
<%@ Register Assembly="FreeTextBox" Namespace="FreeTextBoxControls" TagPrefix="FTB" %>
将FreeTextBox添加到工具栏。(工具栏〉常规〉选择项〉浏览到DLL文件,添加),这样就可以拖fretextbox了。
拖好之后会出现
我们可以在里面设置它的一些属性,图片保存路径之类的,可以根据实际需要,修改toolbarlayout节点。
这样运行还会出现问题
解决:在页面修改为<%@ Page Language="C#" ... ValidateRequest="false"%>
好了,这样之后就可以上传图片了。上传图片没有什么问题,我一开始的问题在于我按insert这个键,没有任何反应,ie浏览器宝js脚本错误,错误为: 无法获取未定义或 null 引用的属性“FTB_API” window.opener.FTB_API[ftb].InsertHtml(img);运行不下去。 然后弄了半天,最后,发现,只要设置一下ie兼容性视图设置,就可以了。ie的兼容性视图设置其实就是将我们的网站放进了兼容性列表,下面是代码的实现https://blog.csdn.net/net_lover/article/details/24182287
private const string CLEARABLE_LIST_DATA = @"Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData";
private const string USERFILTER = "UserFilter";
private byte[] header = new byte[] { 0x41, 0x1F, 0x00, 0x00, 0x53, 0x08, 0xAD, 0xBA };
private byte[] delim_a = new byte[] { 0x01, 0x00, 0x00, 0x00 };
private byte[] delim_b = new byte[] { 0x0C, 0x00, 0x00, 0x00 };
private byte[] checksum = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF };
private byte[] filler = BitConverter.GetBytes(DateTime.Now.ToBinary());//new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 };
private byte[] regbinary = new byte[] { };
private string[] GetDomains()
{
string[] domains = { };
using (RegistryKey regkey = Registry.CurrentUser.OpenSubKey(CLEARABLE_LIST_DATA))
{
//可能不存在此key.
Object filterData = regkey.GetValue(USERFILTER);
if (filterData != null)
{
byte[] filter = filterData as byte[];
domains = GetDomains(filter);
}
}
return domains;
}
private string[] GetDomains(byte[] filter)
{
List domains = new List();
int length;
int offset_filter = 24;
int totalSize = filter.Length;
while (offset_filter < totalSize)
{
length = BitConverter.ToUInt16(filter, offset_filter + 16);
domains.Add(System.Text.Encoding.Unicode.GetString(filter, 16 + 2 + offset_filter, length * 2));
offset_filter += 16 + 2 + length * 2;
}
return domains.ToArray();
}
private void AddNewSiteToCompatibilityViewList(String domain)
{
String[] domains = GetDomains();
if (domains.Length > 0)
{
if (domains.Contains(domain))
{
return;
}
else
{
domains = domains.Concat(new String[] { domain }).ToArray();
}
}
else
{
domains = domains.Concat(new String[] { domain }).ToArray();
}
int count = domains.Length;
byte[] entries = new byte[0];
foreach (String d in domains)
{
entries = this.Combine(entries, this.GetDomainEntry(d));
}
regbinary = header;
regbinary = this.Combine(regbinary, BitConverter.GetBytes(count));
regbinary = this.Combine(regbinary, checksum);
regbinary = this.Combine(regbinary, delim_a);
regbinary = this.Combine(regbinary, BitConverter.GetBytes(count));
regbinary = this.Combine(regbinary, entries);
Registry.CurrentUser.OpenSubKey(CLEARABLE_LIST_DATA, true).SetValue(USERFILTER, regbinary, RegistryValueKind.Binary);
}
private byte[] Combine(byte[] a, byte[] b)
{
byte[] c = new byte[a.Length + b.Length];
System.Buffer.BlockCopy(a, 0, c, 0, a.Length);
System.Buffer.BlockCopy(b, 0, c, a.Length, b.Length);
return c;
}
private byte[] GetDomainEntry(String domain)
{
byte[] tmpbinary = new byte[0];
byte[] length = BitConverter.GetBytes((UInt16)domain.Length);
byte[] data = System.Text.Encoding.Unicode.GetBytes(domain);
tmpbinary = Combine(tmpbinary, delim_b);
tmpbinary = Combine(tmpbinary, filler);
tmpbinary = Combine(tmpbinary, delim_a);
tmpbinary = Combine(tmpbinary, length);
tmpbinary = Combine(tmpbinary, data);
return tmpbinary;
}
freetextbox基本上是可以用了,然后我们需要把数据保存到数据库,我设计了一个表create table tb_sj_news
(id int identity(1,1) primary key,
title varchar(50) not null,
contents varchar(5000) not null,
source varchar(50),
dates varchar(50),
author varchar(50),
editer varchar(50),
)
在pageload里面AddNewSiteToCompatibilityViewList("localhost");google的话,需要下载一个ie tab来使用ie的内容,然后才能做到插入图片。
兼容ie,网上说的
都没啥效果。
下面是插入数据库的代码
namespace editor
{
public partial class freetextbox : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (TextBox1.Text == "" || FreeTextBox1.Text == "")
{
Response.Write("名称和内容不能为空");
}
else
{
String str = ConfigurationManager.ConnectionStrings["editorConnectionString"].ConnectionString.ToString();
SqlConnection con = new SqlConnection(str);
con.Open();
String insert = "insert into tb_sj_news values(@title,@contents,@source,@dates,@author,@editor)";
SqlCommand cmd = new SqlCommand(insert,con);
cmd.Parameters.Add("@title",SqlDbType.VarChar,50);
cmd.Parameters.Add("contents", SqlDbType.VarChar, 5000);
cmd.Parameters.Add("source", SqlDbType.VarChar, 50);
cmd.Parameters.Add("dates", SqlDbType.VarChar, 50);
cmd.Parameters.Add("author", SqlDbType.VarChar, 50);
cmd.Parameters.Add("editor", SqlDbType.VarChar, 50);
cmd.Parameters["@title"].Value = TextBox1.Text.ToString();
cmd.Parameters["contents"].Value = FreeTextBox1.ViewStateText.Replace("'","'");//通过replace属性,替换控件中的特殊字符
cmd.Parameters["source"].Value = TextBox3.Text.ToString();
cmd.Parameters["dates"].Value = DateTime.Now.ToString();
cmd.Parameters["author"].Value = TextBox2.Text.ToString();
cmd.Parameters["editor"].Value = TextBox4.Text.ToString();
cmd.ExecuteNonQuery();
con.Close();
Response.Write("");
}
}
}
}
https://github.com/1126048156/editor.git