최근에는 데이터베이스에 파일을 업로드한 다음 데이터베이스에서 파일을 읽고 다운로드해야 하는 이메일 관련 작업이 있었습니다.
몇 가지 정보를 찾아 프로젝트에 적용했습니다.
데이터베이스의 구조는 다음과 같습니다.
사용[EOffice]
가다
/**//******** 개체: 테이블 [dbo].[Group_Files] 스크립트 날짜: 07/20/2006 23:57:34 ******/
ANSI_NULLS를 ON으로 설정
가다
QUOTED_IDENTIFIER를 켜짐으로 설정
가다
ANSI_PADDING을 켜짐으로 설정
가다
CREATE TABLE [dbo].[그룹_파일](
[ID] [int] IDENTITY(1,1) NULL이 아님,
[파일 이름] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Group_Files_FileName] DEFAULT (''),
[파일 본문] [이미지] NULL,
[FileType] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Group_Files_FileType] DEFAULT (''),
제약 조건 [PK_Group_Files] 기본 키 클러스터링
(
[ID]ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [기본]
) ON [기본] TEXTIMAGE_ON [기본]
GO
ANSI_PADDING을 꺼짐으로 설정
그런 다음 다음 코드를 사용하여 저장 프로시저를 작성했습니다.
사용[EOffice]
가다
/**//****** 개체: StoredProcedure [dbo].[SendTo_Group_Email] 스크립트 날짜: 2006년 7월 20일 23:59:21 ******/
ANSI_NULLS를 ON으로 설정
가다
QUOTED_IDENTIFIER를 켜짐으로 설정
가다
절차 생성 [dbo].[SendTo_Group_Email]
(
@제목 varchar(200),
@콘텐츠 varchar(MAX),
@Area varchar(최대),
@발신자 varchar(50),
@부서 varchar(50),
@SendToUser varchar(50),
@파일이름 varchar(200),
@FileBody 이미지,
@FileType varchar(4)
)
AS
INSERT Group_Email(제목,[콘텐츠],지역,SendToUser,Dept,Sender,FileName,FileBody,FileType) VALUES(@Title,@Content,@Area,@SendToUser,@Dept,@Sender,@FileName,@FileBody, @파일 유형)
프로그램 코드는 다음과 같습니다.
SendEmail.aspx
1<%@ Page Language="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<head runat="서버">
8 <title>이메일 보내기</title>
9<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><style type="text/css">
10바디,td,번째 {
11 글꼴 크기: 9pt;
12}
13몸 {
14 배경 이미지: url();
15 배경색: #F2F7FB;
16 여백-왼쪽: 10px;
17 여백 상단: 5px;
18 오른쪽 여백: 10px;
19 여백-하단: 5px;
20}
21-->
22</style></head>
23<스크립트 언어="vbscript">
24기능 Select_Local_User(url)
25딤케이
26 k=showModalDialog(url,"","dialogWidth:485px;status:no;dialogHeight:280px")
27 if ubound(split(k," $#@&!"))>=0 이면
28 document.form1.HiddenField1.value = 분할(k," $#@&!")(0 )
29 document.form1.txtLocalUser.value = 분할(k," $#@&!")(1 )
30이면 끝
31엔드 기능
32
33기능 Select_Remote_User(url)
34딤케이
35 k=showModalDialog(url,"","dialogWidth:485px;status:no;dialogHeight:310px")
36 if ubound(split(k," $#@&!"))>=0 이면
37 document.form1.HiddenField2.value = 분할(k," $#@&!")(0 )
38 document.form1.txtRemoteUser.value=split(k," $#@&!")(1 )
39 끝이면
40end 기능
41
42</script>
43<본문>
44 <form id="form1" method="post" enctype="multipart/form-data" runat="서버">
45 <div style="text-align: 센터">
46 <table border="0" cellpadding="0" cellpacing="0" width="100%">
47 <tr>
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 <tr>
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" background="../images/ye_r1_c2.gif" style="height: 35px"><table width="119" border="0" cellpacing="0" 셀패딩="0">
56 <tr>
57 <td width="40" height="20"> </td>
58 <td width="79" valign="top"><strong>영수증 등록</strong></td>
59 </tr>
60 </table></td>
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="높이: 35px"></td>
63 </tr>
64 <tr>
65 <td background="../images/ye_r2_c1.gif"> </td>
66 <td width="13%"> </td>
67 <td width="83%" align="왼쪽"><img src="../Images/dj.gif" width="300" height="30" /></td>
68 <td background="../images/ye_r2_c3.gif"> </td>
69 <td> </td>
70 </tr>
71<tr>
72 <td 배경="../images/ye_r2_c1.gif"> </td>
73 <td colspan="2"><div align="center">
74 <table border="0" cellpadding="0" cellpacing="1" bgcolor="#CCCCCC" style="너비: 566px">
75 <tr bgcolor="#b9d5f4">
76 <td style="너비: 186px; 높이: 20px">
77 <div align="center" class="style2"> 파일 제목</div></td>
78 <td colspan="2" align="left" style="높이: 20px; 너비: 433px;">
79 <asp:TextBox ID="txtTitle" runat="server" class="Input_TextBox" Width="277px"></asp:TextBox>
80 <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="서버" ControlToValidate="txtTitle"
81 Display="동적" ErrorMessage="파일 제목은 비워둘 수 없습니다."></asp:RequiredFieldValidator></td>
82 </tr>
83 <tr bgcolor="#F1F5FC">
84 <td style="너비: 186px; 높이: 20px">
로컬 사용자 85명</td>
86 <td align="left" colspan="2" style="너비: 433px; 높이: 20px">
87 <asp:TextBox ID="txtLocalUser" runat="server" Width="279px"></asp:TextBox><input
88 id="SelectLocal" class="Input_Button" name="SelectLocal" onClick="vbscript:Select_Local_User('..SelectMulti.aspx')" type="버튼"
89 value="select" /><asp:HiddenField ID="HiddenField1" runat="서버" />
90 </td>
91 </tr>
92 <tr bgcolor="#b9d5f4">
93 <td style="너비: 186px; 높이: 20px">
94명의 원격 사용자</td>
95 <td align="left" colspan="2" style="너비: 433px; 높이: 20px">
96 <asp:TextBox ID="txtRemoteUser" runat="server" Width="279px"></asp:TextBox>
97 <input id="SelectRemote" class="Input_Button" name="SelectRemote" onClick="vbscript:Select_Remote_User('..SelectRemoteUser.aspx')"
98 유형="버튼" 값="선택" />
99 <asp:HiddenField ID="HiddenField2" runat="서버" />
100</td>
101 </tr>
102 <tr bgcolor="#F1F5FC">
103 <td rowspan="2" align="center" style="width: 186px; height: 11px;"> 파일 업로드</td>
104 <td colspan="2" rowspan="2" align="left" valign="top" bgcolor="#F1F5FC" style="너비: 433px; 높이: 11px;">
105 <input id="File1" runat="server" style="width: 381px" type="file" /><br />
106 <input id="File2" runat="server" style="width: 379px" type="file" />
107 <input id="File3" runat="server" style="width: 379px" type="file" />
108 <input id="File4" runat="server" style="width: 379px" type="file" />
109 <input id="File5" runat="server" style="width: 377px" type="file" /></td>
110 </tr>
111<tr>
112 </tr>
113 <tr bgcolor="#B9D5F4">
114 <td style="너비: 186px; 높이: 22px;">
115 <div align="center" class="style2"> 이메일 콘텐츠</div></td>
116 <td colspan="2" align="left" style="너비: 433px; 높이: 22px;">
117 <asp:TextBox ID="txtContent" runat="server" Height="57px" TextMode="MultiLine" Width="296px" class="Input_TextBox"></asp:TextBox>
118 <asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="서버" ControlToValidate="txtContent"
119 Display="동적" ErrorMessage="이메일 내용은 비워둘 수 없습니다."></asp:RequiredFieldValidator></td>
120 </tr>
121 <tr bgcolor="#F1F5FC">
122 <td style="너비: 186px; 높이: 6px">
123 </td>
124 <td colspan="2" align="left" 스타일="높이: 6px; 너비: 433px;">
125 <asp:CheckBox ID="chkSms" runat="server" Text="SMS 알림" />
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 <tr>
135 <td><img src="../Images/ye_r3_c1.gif" alt="" name="ye_r3_c1" width="11" height="22" border="0" id="ye_r3_c1" />< /td>
136 <td colspan="2" background="../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" />< /td>
138 <td> </td>
139 </tr>
140 </table>
141 </div>
142 </form>
143</body>
144</html>
145
SendEmail.aspx.cs
1사용 시스템;
2System.Data 사용;
3시스템 구성 사용;
4System.Collections 사용;
5System.Web 사용;
6System.Web.Security 사용;
7System.Web.UI 사용;
8System.Web.UI.WebControls 사용;
9System.Web.UI.WebControls.WebParts 사용;
10System.Web.UI.HtmlControls 사용;
11
12시스템.데이터 사용;
13System.Data.SqlClient 사용;
14EOffice.Model 사용;
15EOffice.SqlServer 사용;
16System.IO 사용;
17System.Configuration 사용;
18
19//iWebSMS2000 사용;
20[직렬화 가능]
21공개 부분 클래스 GroupWork_SendEmail : System.Web.UI.Page
스물둘{
23 공개 SqlConnection 연결;
24 //공개 iSMS2000 SMS;
25 //공개 DBstep.SMSClient2000 ObjiSMSClient2000;
26 protected void Page_Load(개체 전송자, EventArgs e)
27 {
28 conn = new SqlConnection("SERVER=SERVER;UID=sa;PWD=8860;database=EOFFICE_SERVER;");
29
30}
31 protected void btnSubmit_Click(객체 전송자, EventArgs e)
32 {
33 문자열 strTitle = txtTitle.Text;
34 문자열 strContent = txtContent.Text;
35 UserInfo 정보 = (UserInfo)Session["EOfficeUserInfo"];
36 문자열 strUserName = info.UserName;
37 문자열 strTmpDept = info.DeptId.ToString();
38
39 문자열 strUnitName = ConfigurationSettings.AppSettings["UnitName"];
40 String strServerFileIndex = "" //서버측 파일 첨부 인덱스;
41 String strClientFileIndex = ""; //클라이언트 파일 첨부 인덱스
42
43 문자열 strRemote = HiddenField2.Value;
44 String[] strRemoteUser = strRemote.Split(',');
45 문자열 strTmpUserName;
46 문자열 strTmpServer;
47 부울 bDone = false;
48
49 /**/////////여러 첨부코드 업로드//////////////
50 //파일 양식 요소 가져오기
51 HttpFileCollection 파일 = HttpContext.Current.Request.Files;
52 HttpPostedFile 게시파일;
53
54 foreach(strRemoteUser의 문자열 strUser)
55 {
56 String[] strSplit = strUser.Split('/');
57 strTmpUserName = strSplit[0];
58 strTmp서버=strSplit[1];
59 문자열 strConnectString = "";
60 문자열 strAreaName = "";
61 int nAreaID = 0;
62 문자열 strDept = "";
63 strClientFileIndex = "";
64 SqlConnection conn클라이언트;
65
66 문자열 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.Read())
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 if (sdr.Read())
86 {
87 strDept = sdr["부서"].ToString();
88 }
89 }
90cmd.Connection.Close();
91
92 connClient = 새로운 SqlConnection(strConnectString);
93
94(int intCount = 0; intCount < files.Count; intCount++)
95 {
96 게시파일 = 파일[intCount];
97
98 if (postedFile.ContentLength > 0)
99 {
100 문자열 strOldFilePath = 게시된파일.파일이름;
101 문자열 strFileName = strOldFilePath.Substring(strOldFilePath.LastIndexOf("\") + 1);
102
103 //서버에 파일 업로드
104 //File1.PostedFile.SaveAs("c:\Test\" + DateTime.Now.ToString("yyyyMMddhhmmss") + strExtension);
105
106 //파일 크기를 저장하는데 사용됩니다
107 int intDocLen;
108 //스트림은 업로드된 데이터를 읽는 데 사용됩니다.
109 스트림 objStream;
110 문자열 strDocExt;
111 //파일의 특정 내용을 업로드합니다.
112 intDocLen = 게시파일.ContentLength;
113 strDocExt = strOldFilePath.Substring(strOldFilePath.LastIndexOf(".") + 1);
114
115바이트[] Docbuffer = 새 바이트[intDocLen];
116 objStream = 게시된파일.InputStream;
117
118
119 //파일을 캐시에 저장
120
121 //캐시가 데이터베이스에 저장됩니다
122 objStream.Read(Docbuffer, 0, intDocLen);
123
124 문자열 fileType = 게시된File.ContentType;
125
126
127 //서버 측 저장 프로시저 실행 Send_Group_Email
128 if (!b완료)
129 {
130 cmd = new SqlCommand("Send_Group_Email", conn);
131 cmd.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 = 파일 유형;
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 = 파일유형;
162
163 //cmd.Parameters.Add(new SqlParameter("@File_Index", SqlDbType.Int));
164 cmd.Parameters[3].Direction = ParameterDirection.ReturnValue;
165 cmd.Connection.Open();
166cmd.ExecuteNonQuery();
167 strClientFileIndex += cmd.Parameters[3].Value.ToString() + ",";
168 cmd.Connection.Close();
169 }
170
171 if (intCount.Equals(files.Count - 1))
172 {
173 b완료 = 참;
174 }
175 }
176
177 strClientFileIndex = strClientFileIndex.Remove(strClientFileIndex.Length - 1);
178
179 strSQL = "그룹_이메일에 삽입(제목, 내용, 영역, SendToUser, 부서, 보낸 사람, 파일_인덱스)";
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 문자열 strTmpServerFileIndex = strServerFileIndex.Remove(strServerFileIndex.Length - 1);
194
195 strSQL = "Group_Email_Sever에 삽입(제목, 내용, 영역, SendToUser, 부서, 보낸 사람, 파일_색인)";
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.연결.열기();
206 cmd.ExecuteNonQuery();
207 cmd.Connection.Close();
208 }
209 /**/////////여러 첨부파일 업로드 종료//////////////
210 응답.리디렉션("../성공Msg.aspx");
211 }
212}
213
파일을 다운로드하는 코드:
DownFile.aspx
DownFile.aspx.cs
1사용 시스템;
2System.Data 사용;
3시스템 구성 사용;
4System.Collections 사용;
5System.Web 사용;
6System.Web.Security 사용;
7System.Web.UI 사용;
8System.Web.UI.WebControls 사용;
9System.Web.UI.WebControls.WebParts 사용;
10System.Web.UI.HtmlControls 사용;
11
12시스템.데이터 사용;
13System.Data.SqlClient 사용;
14EOffice.Model 사용;
15EOffice.SqlServer 사용;
16System.IO 사용;
17
18[직렬화 가능]
19공개 부분 클래스 GroupWork_DownFile : System.Web.UI.Page
20{
21 공개 SqlConnection 연결;
22 공개 문자열 strFileID;
23 공개 UserInfo 정보;
24 protected void Page_Load(개체 전송자, EventArgs e)
25 {
26 strFileID = Request.QueryString["ID"];
27 info = (UserInfo)Session["EOfficeUserInfo"];
28
29 if (strFileID == null)
30 {
31 Response.Redirect("../ErrorMsg.aspx");
32}
33
34 DbLink db = 새로운 DbLink();
35 conn = 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 if (!sdr.Read())
43 {
44 Response.Redirect("../ErrorMsg.aspx");
45 }
그 외 46개
47 {
48 응답.지우기();
49 문자열 strFileName = sdr["FileName"].ToString();
50 Response.ContentType = "APPLICATION/OCTET-STREAM";
51 Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(strFileName));
52 응답.버퍼 = true;
53 Response.BinaryWrite((byte[])sdr["FileBody"]);
54
55 //응답.클리어();
56 //Response.ContentType = "응용프로그램/옥텟-스트림";
57 /**/////Response.AddHeader("Content-Type", sdr["FileType"].ToString());
58 //Response.BinaryWrite((byte[])sdr["FileBody"]);
59 }
60 }
61 //콘.클로즈();
62
63 /**//*
64 SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);
65 SqlCommandBuilder MyCB = 새 SqlCommandBuilder(da);
66 DataSet ds = new DataSet("MyImages");
67 byte[] MyData = 새 바이트[0];
68 da.Fill(ds, "MyImages");
69 DataRow myRow = ds.Tables["MyImages"].Rows[0];
70 문자열 strFileName = Convert.ToString(myRow["FileName"]);
71 MyData = (바이트[])myRow["FileBody"];
72 int ArraySize = new int();
73 ArraySize = MyData.GetUpperBound(0);
74 FileStream fs = new FileStream(@"C:\Download" + strFileName,
75 파일모드.OpenOrCreate, 파일액세스.쓰기);
76 fs.Write(내데이터, 0, ArraySize);
77 fs.닫기();
78 */
79 //Response.Write("파일 다운로드" + strFileName + "성공!");
80}
81}
82