في الآونة الأخيرة، كانت هناك وظيفة تتضمن رسائل البريد الإلكتروني، والتي تتطلب تحميل الملفات إلى قاعدة بيانات، ثم قراءة الملفات من قاعدة البيانات وتنزيلها.
لقد وجدت بعض المعلومات وقمت بتطبيقها على المشروع.
هيكل قاعدة البيانات هو كما يلي:
الاستخدام[المكتب الإلكتروني]
يذهب
/**//****** الكائن: جدول [dbo].[Group_Files] تاريخ البرنامج النصي: 07/20/2006 23:57:34 ******/
قم بتشغيل ANSI_NULLS
يذهب
قم بضبط QUOTED_IDENTIFIER على التشغيل
يذهب
قم بضبط ANSI_PADDING على التشغيل
يذهب
إنشاء جدول [dbo].[Group_Files](
[المعرف] [int] الهوية (1،1) ليست فارغة،
[اسم الملف] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Group_Files_FileName] الافتراضي ('')،
[ملف الملف] [صورة] فارغة،
[نوع الملف] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Group_Files_FileType] الافتراضي ('')،
القيد [PK_Group_Files] المفتاح الأساسي متجمع
(
[المعرف] ASC
) مع (IGNORE_DUP_KEY = إيقاف) تشغيل [أساسي]
) في [PRIMARY] TEXTIMAGE_ON [PRIMARY]
انطلق
قم بإيقاف تشغيل ANSI_PADDING
ثم كتبت إجراءً مخزنًا بالرمز التالي:
الاستخدام[المكتب الإلكتروني]
يذهب
/**//****** الكائن: StoredProcedure [dbo].[SendTo_Group_Email] تاريخ البرنامج النصي: 07/20/2006 23:59:21 ******/
قم بتشغيل ANSI_NULLS
يذهب
قم بضبط QUOTED_IDENTIFIER على التشغيل
يذهب
إنشاء إجراء [dbo].[SendTo_Group_Email]
(
@ العنوان فارشار (200)،
@ المحتوى فارشار (ماكس)،
@ منطقة فارتشار (الحد الأقصى)،
@المرسل فارتشار (50)،
@Dept فارشار (50)،
@SendToUser فارتشار (50)،
@اسم الملف فارتشار (200)،
@ صورة FileBody،
@FileType فارتشار(4)
)
AS
INSERT Group_Email (Title,[Content],Area,SendToUser,Dept,Sender,FileName,FileBody,FileType) القيم (@Title,@Content,@Area,@SendToUser,@Dept,@Sender,@FileName,@FileBody, @نوع الملف)
رمز البرنامج هو كما يلي:
SendEmail.aspx
1<%@ لغة الصفحة = "C#" AutoEventWireup = "true" CodeFile = "SendEmail.aspx.cs" Inherits = "GroupWork_SendEmail" %>
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
4
5<html xmlns=" http://www.w3.org/1999/xhtml " >
6
7 <رئيس التشغيل = "الخادم">
8 <title>أرسل بريدًا إلكترونيًا</title>
9<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><style type="text/css">
10 الجسم، تد، ث {
11 حجم الخط: 9pt;
12}
13جسم {
14 صورة الخلفية: url();
15 لونًا للخلفية: #F2F7FB؛
16 الهامش الأيسر: 10 بكسل؛
17 الهامش العلوي: 5 بكسل؛
18 الهامش الأيمن: 10 بكسل؛
19 الهامش السفلي: 5 بكسل؛
20}
21-->
22</style></head>
23<لغة النص = "vbscript">
24 وظيفة Select_Local_User(url)
25 خافت ك
26 k=showModalDialog(url,"",dialogWidth:485px;status:no;dialogHeight:280px")
27 إذا ubound(split(k," $#@&!"))>=0 إذن
28 document.form1.HiddenField1.value = Split(k," $#@&!")(0 )
29 document.form1.txtLocalUser.value = Split(k," $#@&!")(1 )
30 نهاية إذا
31 وظيفة نهاية
32
33 وظيفة Select_Remote_User(url)
34 خافت ك
35 k=showModalDialog(url,""dialogWidth:485px;status:no;dialogHeight:310px")
36 إذا ubound(split(k," $#@&!"))>=0 إذن
37 document.form1.HiddenField2.value = Split(k," $#@&!")(0 )
38 document.form1.txtRemoteUser.value=split(k," $#@&!")(1 )
39 نهاية إذا
وظيفة نهاية 40
41
42</script>
43<الجسم>
44 <form id = "form1"method = "post" enctype = "multipart/form-data" runat = "server">
45 <div style="text-align: center">
46 <حدود الجدول = "0" خلية الحشو = "0" تباعد الخلايا = "0" العرض = "100٪">
47 <ر>
48 <td width="1%"><img src="../Images/spacer.gif" width="11" height="1" border="0" alt="" /></td>
49 <td colspan="2"><img src="../Images/spacer.gif" width="209" height="1" border="0" alt="" /></td>
50 <td width="1%"><img src="../Images/spacer.gif" width="12" height="1" border="0" alt="" /></td>
51 <td width="2%"><img src="../Images/spacer.gif" width="1" height="1" border="0" alt="" /></td>
52 </tr>
53 <ر>
54 <td style = "height: 35px"><img src = "../Images/ye_r1_c1.gif" alt = "" name = "ye_r1_c1" width = "11" height = "30" border = "0" id ="ye_r1_c1" /></td>
55 <td colspan = "2" align = "left" الخلفية = "../images/ye_r1_c2.gif" style = "height: 35px"> <table width = "119" border = "0" cellpacing = "0" الحشو الخلوي = "0">
56 <ر>
57 <td width="40" height="20"> </td>
58 <td width="79" valign="top"><strong>التسجيل للحصول على الاستلام</strong></td>
59 </tr>
60 </طاولة></تد>
61 <td style = "height: 35px"><img src = "../Images/ye_r1_c3.gif" alt = "" name = "ye_r1_c3" width = "12" height = "30" border = "0" id ="ye_r1_c3" /></td>
62 <td style="height: 35px"></td>
63 </tr>
64 <ر>
65 <td الخلفية = "../images/ye_r2_c1.gif"> </td>
66 <td width="13%"> </td>
67 <td width="83%" align="left"><img src="../Images/dj.gif" width="300" height="30" /></td>
68<td الخلفية="../images/ye_r2_c3.gif"> </td>
69<td> </td>
70 </tr>
71 <ر>
72<td الخلفية="../images/ye_r2_c1.gif"> </td>
73 <td colspan="2"><div align="center">
74 <جدول الحدود = "0" خلية الحشو = "0" تباعد الخلايا = "1" bgcolor = "#CCCCCC" نمط = "العرض: 566px">
75 <tr bgcolor="#b9d5f4">
76 <td style="width: 186px; الارتفاع: 20px">
77 <div align="center" class="style2"> عنوان الملف</div></td>
78 <td colspan = "2" محاذاة = "يسار" نمط = "الارتفاع: 20px؛ العرض: 433px؛">
79 <asp:TextBox ID="txtTitle" runat="server" class="Input_TextBox" Width="277px"></asp:TextBox>
80 <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtTitle"
81 Display="Dynamic" ErrorMessage="لا يمكن أن يكون عنوان الملف فارغًا."></asp:RequiredFieldValidator></td>
82 </tr>
83 <tr bgcolor="#F1F5FC">
84 <td style="width: 186px; الارتفاع: 20px">
85 مستخدمًا محليًا</td>
86 <td align="left" colspan="2" style="width: 433px; height: 20px">
87 <asp:TextBox ID="txtLocalUser" runat="server" Width="279px"></asp:TextBox><input
88 معرف = "SelectLocal" فئة = "Input_Button" اسم = "SelectLocal" onClick = "vbscript:Select_Local_User('..SelectMulti.aspx')" نوع = "زر"
89 value="select" /><asp:HiddenField ID="HiddenField1" runat="server" />
90 </TD>
91 </tr>
92 <tr bgcolor="#b9d5f4">
93 <td style="width: 186px; الارتفاع: 20px">
94 المستخدمين عن بعد</td>
95 <td align="left" colspan="2" style="width: 433px; height: 20px">
96 <asp:TextBox ID="txtRemoteUser" runat="server" Width="279px"></asp:TextBox>
"""
98 اكتب = "زر" القيمة = "حدد" />
99 <asp:HiddenField ID="HiddenField2" runat="server" />
100 </TD>
101 </tr>
102 <tr bgcolor="#F1F5FC">
103 <tdrowspan="2" align="center" style="width: 186px; height: 11px;"> تحميل الملف</td>
104 <td colspan = "2"rowspan = "2" محاذاة = "يسار" valign = "أعلى" bgcolor = "#F1F5FC" نمط = "العرض: 433px؛ الارتفاع: 11px؛">
105 <input id = "File1" runat = "server" style = "width: 381px" type = "file" /><br />
106 <input id = "File2" runat = "الخادم" style = "width: 379px" type = "file" />
107 <input id = "File3" runat = "الخادم" style = "width: 379px" type = "file" />
108 <input id = "File4" runat = "الخادم" style = "width: 379px" type = "file" />
109 <input id="File5" runat="server" style="width: 377px" type="file" /></td>
110 </tr>
111 <ر>
112 </tr>
113 <tr bgcolor="#B9D5F4">
114 <td style="width: 186px; الارتفاع: 22px;">
115 <div align="center" class="style2"> محتوى البريد الإلكتروني</div></td>
116 <td colspan = "2" محاذاة = "يسار" نمط = "العرض: 433 بكسل؛ الارتفاع: 22 بكسل؛">
117 <asp:TextBox ID="txtContent" runat="server" الارتفاع="57px" TextMode="MultiLine" Width="296px" class="Input_TextBox"></asp:TextBox>
الحلقة 118
119 Display="Dynamic" ErrorMessage="لا يمكن أن يكون محتوى البريد الإلكتروني فارغًا."></asp:RequiredFieldValidator></td>
120 </tr>
121 <tr bgcolor="#F1F5FC">
122 <td style="width: 186px; الارتفاع: 6px">
123 </TD>
124 <td colspan = "2" محاذاة = "يسار" نمط = "الارتفاع: 6 بكسل؛ العرض: 433 بكسل؛">
125 <asp:CheckBox ID="chkSms" runat="server" Text="SMS Notification" />
126 <asp:Button ID = "btnSubmit" runat = "server" OnClick = "btnSubmit_Click" Text = "Submit" class = "Input_Button" />
127 <input type="reset" name="Submit" value="Reset" class="Input_Button" /></td>
128 </tr>
129 </الجدول>
130 </div></td>
131 <td الخلفية = "../images/ye_r2_c3.gif"> </td>
132<td> </td>
133 </tr>
134 <ر>
135 <td><img src="../Images/ye_r3_c1.gif" alt="" name="ye_r3_c1" width="11" height="22" border="0" id="ye_r3_c1" />< / تد>
136 <td colspan="2" الخلفية="../images/ye_r3_c2.gif"> </td>
137 <td><img src="../Images/ye_r3_c3.gif" alt="" name="ye_r3_c3" width="12" height="22" border="0" id="ye_r3_c3" />< / تد>
138<td> </td>
139 </tr>
140 </الجدول>
141 </div>
142 </النموذج>
143
144</html>
145
SendEmail.aspx.cs
1استخدام النظام؛
2باستخدام System.Data;
3 باستخدام System.Configuration؛
4 باستخدام System.Collections؛
5باستخدام System.Web؛
6 باستخدام System.Web.Security؛
7باستخدام System.Web.UI؛
8 باستخدام System.Web.UI.WebControls؛
9باستخدام System.Web.UI.WebControls.WebParts;
10باستخدام System.Web.UI.HtmlControls;
11
12استخدام System.Data؛
13using System.Data.SqlClient;
14باستخدام EOffice.Model؛
15باستخدام EOffice.SqlServer؛
16باستخدام System.IO؛
17 باستخدام System.Configuration؛
18
19//استخدام iWebSMS2000;
20 [قابل للتسلسل]
21 فئة عامة جزئية GroupWork_SendEmail: System.Web.UI.Page
إثنان وعشرون{
23 اتصال SqlConnection العام؛
24 //iSMS2000 SMS العامة؛
25 // public DBstep.SMSClient2000 ObjiSMSClient2000;
26 Page_Load باطلة محمية (مرسل الكائن، EventArgs e)
27 {
28 conn = new SqlConnection("SERVER=SERVER;UID=sa;PWD=8860;database=EOFFICE_SERVER;");
29
30}
31 باطل محمي btnSubmit_Click(object sender, EventArgs e)
32 {
33 String strTitle = txtTitle.Text;
34 String strContent = txtContent.Text;
35 UserInfo info = (UserInfo)Session["EOfficeUserInfo"];
36 StrUserName = info.UserName;
37 StrTmpDept = info.DeptId.ToString();
38
39 StrUnitName = ConfigurationSettings.AppSettings["UnitName"];
40 String strServerFileIndex = ""; // ملف مرفق من جانب الخادم Index
41 String strClientFileIndex = ""; // ملف مرفق العميل Index
42
43 سلسلة strRemote = HiddenField2.Value؛
44 String[] strRemoteUser = strRemote.Split(',');
45 سلسلة strTmpUserName؛
46 سلسلة strTmpServer؛
47 Boolean bDone = false;
48
49 /**////////تحميل رموز مرفقات متعددة//////////////
50 //احصل على عنصر نموذج الملف
51 ملفات HttpFileCollection = HttpContext.Current.Request.Files;
52 HttpPostedFile postedFile;
53
54 foreach (سلسلة strUser في strRemoteUser)
55 {
56 String[] strSplit = strUser.Split('/');
57 strTmpUserName = strSplit[0];
58 strTmpServer = strSplit[1];
59 String strConnectString = "";
60 سلسلة strAreaName = "";
61 إنت nAreaID = 0;
62 سلسلة strDept = "";
63 strClientFileIndex = "";
64 SqlConnection connClient;
65
66 String strSQL = "Select * From Area Where AreaCode='" + strTmpServer + "'";
67 SqlCommand cmd = new SqlCommand(strSQL, conn);
68 cmd.Connection.Open();
69 باستخدام (SqlDataReader sdr = cmd.ExecuteReader())
70 {
71 إذا (sdr.قراءة())
72 {
73 strConnectString = sdr["ConnectString"].ToString();
74 strAreaName = sdr["AreaName"].ToString();
75 nAreaID = Convert.ToInt16(sdr["ID"]);
76 }
77 }
78 cmd.Connection.Close();
79
80 strSQL = "Select * From MemberList Where UserName='" + strTmpUserName + "' And AreaID=" + nAreaID;
81 cmd = new SqlCommand(strSQL, conn);
82 cmd.Connection.Open();
83 باستخدام (SqlDataReader sdr = cmd.ExecuteReader())
84 {
85 إذا (sdr.قراءة())
86 {
87 strDept = sdr["Dept"].ToString();
88 }
89 }
90 cmd.Connection.Close();
91
92 connClient = new SqlConnection(strConnectString);
93
94 لـ (int intCount = 0; intCount < files.Count; intCount++)
95 {
96postFile = files[intCount];
97
98 إذا (postedFile.ContentLength > 0)
99 {
100 StrOldFilePath = postFile.FileName;
101 String strFileName = strOldFilePath.Substring(strOldFilePath.LastIndexOf("\") + 1);
102
103 //تحميل الملفات إلى الخادم
104 //File1.PostedFile.SaveAs("c:\Test\" + DateTime.Now.ToString("yyyyMMddhhmmss") + strExtension);
105
106 //يستخدم لحفظ حجم الملف
107 إنت دوكلين؛
108 //يتم استخدام الدفق لقراءة البيانات التي تم تحميلها
109 دفق objStream؛
110 سلسلة strDocExt؛
111 //تحميل المحتوى المحدد للملف
112 intDocLen =postFile.ContentLength;
113 strDocExt = strOldFilePath.Substring(strOldFilePath.LastIndexOf(".") + 1);
114
115 بايت[] Docbuffer = بايت جديد[intDocLen];
116 objStream =postFile.InputStream;
117
118
119 //احفظ الملف في ذاكرة التخزين المؤقت
120
121 //سيتم حفظ ذاكرة التخزين المؤقت في قاعدة البيانات
122 objStream.Read(Docbuffer, 0, intDocLen);
123
124 سلسلة fileType =postFile.ContentType;
125
126
127 //تنفيذ الإجراء المخزن من جانب الخادم Send_Group_Email
128 إذا (!بتم)
129 {
130 cmd = new SqlCommand("Send_Group_Email"، conn);
131 cmd.CommandType = CommandType.StoredProcedure;
132 cmd.Parameters.Add("@FileName ", SqlDbType.VarChar, 200);
133 cmd.Parameters.Add("@FileBody", SqlDbType.Image);
134 cmd.Parameters.Add("@FileType", SqlDbType.VarChar, 4);
135 cmd.Parameters.Add("@File_Index", SqlDbType.Int);
136
137 cmd.Parameters[0].Value = strFileName;
138 cmd.Parameters[1].Value = Docbuffer;
139 //cmd.Parameters[2].Value = strDocExt;]
140 cmd.Parameters[2].Value = fileType;
141
142 //cmd.Parameters.Add(new SqlParameter("@File_Index", SqlDbType.Int));
143 cmd.Parameters[3].Direction = ParameterDirection.ReturnValue;
144 cmd.Connection.Open();
145 cmd.ExecuteNonQuery();
146 strServerFileIndex += cmd.Parameters[3].Value.ToString() + ""،;
147 cmd.Connection.Close();
148 }
149
150 //تنفيذ الإجراء المخزن للعميل Get_Upload_File
151 cmd = new SqlCommand("Get_Upload_File", connClient);
152 cmd.CommandType = CommandType.StoredProcedure;
153 cmd.Parameters.Add("@FileName ", SqlDbType.VarChar, 200);
154 cmd.Parameters.Add("@FileBody", SqlDbType.Image);
155 cmd.Parameters.Add("@FileType", SqlDbType.VarChar, 4);
156 cmd.Parameters.Add("@File_Index", SqlDbType.Int);
157
158 cmd.Parameters[0].Value = strFileName;
159 cmd.Parameters[1].Value = Docbuffer;
160 //cmd.Parameters[2].Value = strDocExt;
161 cmd.Parameters[2].Value = fileType;
162
163 //cmd.Parameters.Add(new SqlParameter("@File_Index", SqlDbType.Int));
164 cmd.Parameters[3].Direction = ParameterDirection.ReturnValue;
165 cmd.Connection.Open();
166 cmd.ExecuteNonQuery();
167 strClientFileIndex += cmd.Parameters[3].Value.ToString() + ""،";
168 cmd.Connection.Close();
169 }
170
171 إذا (intCount.Equals(files.Count - 1))
172 {
173 بدون = صحيح؛
174 }
175 }
176
177 strClientFileIndex = strClientFileIndex.Remove(strClientFileIndex.Length - 1);
178
179 strSQL = "أدخل في Group_Email (العنوان، المحتوى، المنطقة، SendToUser، Dept، المرسل، Files_Index)"؛
180 strSQL += "القيم(";
181 strSQL += "'" + strTitle + "'";
182 strSQL += "'" + strContent + "'";
183 strSQL += "'" + strUnitName + "'";
184 strSQL += "'" + strTmpUserName + "'،";
185 strSQL += "'" + strDept + "'";
186 strSQL += "'" + strUserName + "'،";
187 strSQL += "'" + strClientFileIndex + "')";
188 cmd = new SqlCommand(strSQL, connClient);
189 cmd.Connection.Open();
190 cmd.ExecuteNonQuery();
191 cmd.Connection.Close();
192
193 String strTmpServerFileIndex = strServerFileIndex.Remove(strServerFileIndex.Length - 1);
194
195 strSQL = "أدخل في Group_Email_Sever (العنوان، المحتوى، المنطقة، SendToUser، Dept، المرسل، Files_Index)"؛
196 strSQL += "القيم(";
197 strSQL += "'" + strTitle + "'";
198 strSQL += "'" + strContent + "'";
199 strSQL += "'" + strAreaName + "'،";
200 strSQL += "'" + strTmpUserName + "'،";
201 strSQL += "'" + strTmpDept + "'،";
202 strSQL += "'" + strUserName + "'،";
203 strSQL += "'" + strTmpServerFileIndex + "')";
204 cmd = new SqlCommand(strSQL, conn);
205 cmd.Connection.Open();
206 cmd.ExecuteNonQuery();
207 cmd.Connection.Close();
208 }
209 /**////////انتهاء رفع المرفقات المتعددة//////////////
210 استجابة.إعادة توجيه("../SuccessMsg.aspx");
211 }
212}
213
كود تحميل الملف:
DownFile.aspx
DownFile.aspx.cs
1استخدام النظام؛
2باستخدام System.Data;
3 باستخدام System.Configuration؛
4 باستخدام System.Collections؛
5باستخدام System.Web؛
6 باستخدام System.Web.Security؛
7باستخدام System.Web.UI؛
8 باستخدام System.Web.UI.WebControls؛
9باستخدام System.Web.UI.WebControls.WebParts;
10باستخدام System.Web.UI.HtmlControls;
11
12استخدام System.Data؛
13using System.Data.SqlClient;
14باستخدام EOffice.Model؛
15باستخدام EOffice.SqlServer؛
16 باستخدام System.IO؛
17
18 [قابل للتسلسل]
19. فئة عامة جزئية GroupWork_DownFile: System.Web.UI.Page
20 {
21 اتصال SqlConnection العام؛
22 سلسلة strFileID العامة؛
23 معلومات عامة عن معلومات المستخدم؛
24 Page_Load باطلة محمية (مرسل الكائن، EventArgs e)
25 {
26 strFileID = Request.QueryString["ID"];
27 info = (UserInfo)Session["EOfficeUserInfo"];
28
29 إذا (strFileID == فارغ)
30 {
31 Response.Redirect("../ErrorMsg.aspx");
32}
33
34 DbLink db = new DbLink();
35 كون = db.Connect();
36
37 StrSQL = "Select * From Group_Files Where ID=" + strFileID //+ " And SendToUser = '" + info.UserName + "'";
38 SqlCommand cmd = new SqlCommand(strSQL, conn);
39 cmd.Connection.Open();
40 باستخدام (SqlDataReader sdr = cmd.ExecuteReader())
41 {
42 إذا (!sdr.Read())
43 {
44 Response.Redirect("../ErrorMsg.aspx");
45 }
46 آخر
47 {
48 استجابة. واضح ()؛
49 String strFileName = sdr["FileName"].ToString();
50 Response.ContentType = "APPLICATION/OCTET-STREAM";
51 Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(strFileName));
52 Response.Buffer = صحيح؛
53 Response.BinaryWrite((byte[])sdr["FileBody"]);
54
55 //Response.Clear();
56 //Response.ContentType = "application/octet-stream";
57 /**/////Response.AddHeader("Content-Type", sdr["FileType"].ToString());
58 //Response.BinaryWrite((byte[])sdr["FileBody"]);
59 }
60 }
61 //conn.Close();
62
63 /**//*
64 SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);
65 SqlCommandBuilder MyCB = new SqlCommandBuilder(da);
66 DataSet ds = new DataSet("MyImages");
67 بايت[] MyData = new byte[0];
68 da.Fill(ds, "MyImages");
69 DataRow myRow = ds.Tables["MyImages"].Rows[0];
70 String strFileName = Convert.ToString(myRow["FileName"]);
71 MyData = (byte[])myRow["FileBody"];
72 int ArraySize = new int();
73 ArraySize = MyData.GetUpperBound(0);
74 FileStream fs = FileStream جديد(@"C:\Download" + strFileName,
75 FileMode.OpenOrCreate، FileAccess.Write)؛
76 fs.Write(MyData, 0, ArraySize);
77 خ.إغلاق();
78 */
79 //Response.Write("تنزيل الملف" + strFileName + "النجاح!");
80}
81}
82