Récemment, il y a eu un travail impliquant des e-mails, qui nécessitait de télécharger des fichiers dans une base de données, puis de lire les fichiers hors de la base de données et de les télécharger.
J'ai trouvé des informations et je les ai appliquées au projet.
La structure de la base de données est la suivante :
UTILISER[EOffice]
ALLER
/**//****** Objet : Table [dbo].[Group_Files] Date du script : 20/07/2006 23:57:34 ******/
DÉFINIR ANSI_NULLS SUR
ALLER
ACTIVER QUOTED_IDENTIFIER
ALLER
DÉFINIR ANSI_PADDING SUR
ALLER
CRÉER UNE TABLE [dbo].[Group_Files](
[ID] [int] IDENTITÉ(1,1) NON NULL,
[FileName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Group_Files_FileName] DEFAULT (''),
[Corps du fichier] [image] NULL,
[FileType] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Group_Files_FileType] DEFAULT (''),
CONTRAINTE [PK_Group_Files] CLÉ PRIMAIRE CLUSTERÉE
(
[ID]ASC
)AVEC (IGNORE_DUP_KEY = OFF) ON [PRIMAIRE]
) SUR [PRIMAIRE] TEXTIMAGE_ON [PRIMAIRE]
ALLER
DÉSACTIVER ANSI_PADDING
Ensuite j'ai écrit une procédure stockée avec le code suivant :
UTILISER[EOffice]
ALLER
/**//****** Objet : StoredProcedure [dbo].[SendTo_Group_Email] Date du script : 20/07/2006 23:59:21 ******/
DÉFINIR ANSI_NULLS SUR
ALLER
ACTIVER QUOTED_IDENTIFIER
ALLER
Créer une PROCÉDURE [dbo].[SendTo_Group_Email]
(
@Titre varchar(200),
@Contenu varchar(MAX),
@Area varchar(max),
@Expéditeur varchar(50),
@Dept varchar (50),
@SendToUservarchar(50),
@FileName varchar(200),
Image @FileBody,
@FileTypevarchar(4)
)
AS
INSERT Group_Email (Titre,[Contenu],Zone,SendToUser,Dept,Sender,FileName,FileBody,FileType) VALUES (@Title,@Content,@Area,@SendToUser,@Dept,@Sender,@FileName,@FileBody, @TypeFichier)
Le code du programme est le suivant :
EnvoyerEmail.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="serveur">
8 <title>Envoyer un e-mail</title>
9<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><style type="text/css">
10corps,td,th {
11 taille de police : 9 pt ;
12}
13corps {
14 image d'arrière-plan : url();
15 couleur d'arrière-plan : #F2F7FB ;
16 marge gauche : 10px ;
17 marge supérieure : 5 px ;
18 marge droite : 10 px ;
19 marge inférieure : 5 px ;
20}
21 -->
22</style></head>
23<langage de script="vbscript">
24fonction Select_Local_User(url)
25 dim k
26 k=showModalDialog(url,"","dialogWidth:485px;status:no;dialogHeight:280px")
27 si ubound(split(k," $#@&!"))>=0 alors
28 document.form1.HiddenField1.value = split(k," $#@&!")(0 )
29 document.form1.txtLocalUser.value = split(k," $#@&!")(1 )
30 fin si
31e fonction
32
33fonction Select_Remote_User(url)
34 dim k
35 k=showModalDialog(url,"","dialogWidth:485px;status:no;dialogHeight:310px")
36 si ubound(split(k," $#@&!"))>=0 alors
37 document.form1.HiddenField2.value = split(k," $#@&!")(0 )
38 document.form1.txtRemoteUser.value=split(k," $#@&!")(1 )
39 fin si
fonction 40end
41
42
43<corps>
44 <form id="form1" method="post" enctype="multipart/form-data" runat="server">
45 <div style="text-align: center">
46 <table border="0" cellpadding="0" cellpacing="0" width="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="hauteur : 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" cellpadding="0">
56
57 <td width="40" height="20"> </td>
58 <td width="79" valign="top"><strong>Enregistrer pour recevoir</strong></td>
59 </tr>
60 </table></td>
61 <td style="hauteur : 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="hauteur : 35px"></td>
63 </tr>
64
65 <td background="../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 background="../images/ye_r2_c3.gif"> </td>
69 <td> </td>
70 </tr>
71
72 <td background="../images/ye_r2_c1.gif"> </td>
73 <td colspan="2"><div align="center">
74 <table border="0" cellpadding="0" Cellpacing="1" bgcolor="#CCCCCC" style="width: 566px">
75 <tr bgcolor="#b9d5f4">
76 <td style="largeur : 186px; hauteur : 20px">
77 <div align="center" class="style2"> Titre du fichier</div></td>
78 <td colspan="2" align="left" style="hauteur : 20px; largeur : 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="Le titre du fichier ne peut pas être vide."></asp:RequiredFieldValidator></td>
82 </tr>
83 <tr bgcolor="#F1F5FC">
84 <td style="largeur : 186px; hauteur : 20px">
85 utilisateurs locaux</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 id="SelectLocal" class="Input_Button" name="SelectLocal" onClick="vbscript:Select_Local_User('..SelectMulti.aspx')" type="bouton"
89 value="select" /><asp:HiddenField ID="HiddenField1" runat="server" />
90 </td>
91 </tr>
92 <tr bgcolor="#b9d5f4">
93 <td style="largeur : 186px; hauteur : 20px">
94 Utilisateurs distants</td>
95 <td align="left" colspan="2" style="width: 433px; height: 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 type="bouton" valeur="select" />
99 <asp:HiddenField ID="HiddenField2" runat="server" />
100 </td>
101 </tr>
102 <tr bgcolor="#F1F5FC">
103 <td rowspan="2" align="center" style="width: 186px; height: 11px;"> Téléchargement de fichier</td>
104 <td colspan="2" rowspan="2" align="left" valign="top" bgcolor="#F1F5FC" style="largeur : 433px; hauteur : 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
112 </tr>
113 <tr bgcolor="#B9D5F4">
114 <td style="largeur : 186px; hauteur : 22px;">
115 <div align="center" class="style2"> Contenu de l'e-mail</div></td>
116 <td colspan="2" align="left" style="largeur : 433px; hauteur : 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="server" ControlToValidate="txtContent"
119 Display="Dynamic" ErrorMessage="Le contenu de l'e-mail ne peut pas être vide."></asp:RequiredFieldValidator></td>
120 </tr>
121 <tr bgcolor="#F1F5FC">
122 <td style="largeur : 186px; hauteur : 6px">
123 </td>
124 <td colspan="2" align="left" style="hauteur : 6px; largeur : 433px;">
125 <asp:CheckBox ID="chkSms" runat="server" Text="Notification 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 </table>
130 </div></td>
131 <td background="../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" />< /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
144</html>
145
EnvoyerEmail.aspx.cs
1en utilisant le système ;
2en utilisant System.Data ;
3en utilisant System.Configuration ;
4en utilisant System.Collections ;
5en utilisant System.Web ;
6en utilisant System.Web.Security ;
7en utilisant System.Web.UI ;
8en utilisant System.Web.UI.WebControls ;
9en utilisant System.Web.UI.WebControls.WebParts ;
10en utilisant System.Web.UI.HtmlControls ;
11
12en utilisant System.Data ;
13en utilisant System.Data.SqlClient ;
14en utilisant EOffice.Model ;
15en utilisant EOffice.SqlServer ;
16en utilisant System.IO ;
17en utilisant System.Configuration ;
18
19//en utilisant iWebSMS2000 ;
20[Sérialisable]
21classe partielle publique GroupWork_SendEmail : System.Web.UI.Page
vingt-deux{
23 connexion publique SqlConnection ;
24 //SMS iSMS2000 publics ;
25 //public DBstep.SMSClient2000 ObjiSMSClient2000;
26 void protégé Page_Load (expéditeur de l'objet, EventArgs e)
27 {
28 conn = new SqlConnection("SERVER=SERVER;UID=sa;PWD=8860;database=EOFFICE_SERVER;");
29
30}
31 void protégé btnSubmit_Click (expéditeur de l'objet, EventArgs e)
32 {
33 Chaîne strTitle = txtTitle.Text;
34 Chaîne strContent = txtContent.Text;
35 InfosUtilisateur = (UserInfo)Session["EOfficeUserInfo"];
36 String strUserName = info.UserName;
37 String strTmpDept = info.DeptId.ToString();
38
39 Chaîne strUnitName = ConfigurationSettings.AppSettings["UnitName"];
40 String strServerFileIndex = "" ; //Index des pièces jointes côté serveur
41 String strClientFileIndex = "" ; //Index des pièces jointes du fichier client
42
43 Chaîne strRemote = HiddenField2.Value ;
44 String[] strRemoteUser = strRemote.Split(',');
45 Chaîne strTmpUserName ;
46 Chaîne strTmpServer ;
47 Booléen bDone = faux ;
48
49 /**/////////Télécharger plusieurs codes de pièce jointe//////////////
50 //Récupérer l'élément du formulaire Fichier
51 Fichiers HttpFileCollection = HttpContext.Current.Request.Files ;
52 HttpPostedFile postéFichier ;
53
54 foreach (chaîne strUser dans strRemoteUser)
55 {
56 String[] strSplit = strUser.Split('/');
57 strTmpUserName = strSplit[0];
58 strTmpServer = strSplit[1];
59 Chaîne strConnectString = "";
60 Chaîne strAreaName = "" ;
61 int nAreaID = 0 ;
62 Chaîne strDept = "" ;
63 strClientFileIndex = "";
64 Client de connexion SqlConnection ;
65
66 String strSQL = "Select * From Area Where AreaCode='" + strTmpServer + "'";
67 SqlCommand cmd = new SqlCommand(strSQL, conn);
68 cmd.Connection.Open();
69 en utilisant (SqlDataReader sdr = cmd.ExecuteReader())
70 {
71 si (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 en utilisant (SqlDataReader sdr = cmd.ExecuteReader())
84 {
85 si (sdr.Read())
86 {
87 strDept = sdr["Département"].ToString();
88 }
89 }
90 cmd.Connection.Close();
91
92 connClient = new SqlConnection(strConnectString);
93
94 pour (int intCount = 0 ; intCount < files.Count ; intCount++)
95 {
96 postFile = fichiers[intCount];
97
98 si (postedFile.ContentLength > 0)
99 {
100 Chaîne strOldFilePath = postFile.FileName ;
101 String strFileName = strOldFilePath.Substring(strOldFilePath.LastIndexOf("\") + 1);
102
103 //Télécharger des fichiers sur le serveur
104 //File1.PostedFile.SaveAs("c:\Test\" + DateTime.Now.ToString("aaaaMMjjhhmmss") + strExtension);
105
106 //Utilisé pour enregistrer la taille du fichier
107 int intDocLen;
108 //Le flux est utilisé pour lire les données téléchargées
109 Flux objStream ;
110 Chaîne strDocExt ;
111 //Télécharger le contenu spécifique du fichier
112 intDocLen =postedFile.ContentLength;
113 strDocExt = strOldFilePath.Substring(strOldFilePath.LastIndexOf(".") + 1);
114
115 octets[] Docbuffer = nouvel octet[intDocLen];
116 objStream = postFile.InputStream ;
117
118
119 //Enregistrer le fichier dans le cache
120
121 //Le cache sera enregistré dans la base de données
122 objStream.Read(Docbuffer, 0, intDocLen);
123
124 chaînes fileType = postsFile.ContentType ;
125
126
127 //Exécuter la procédure stockée côté serveur Send_Group_Email
128 si (!bTerminé)
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 //Exécuter la procédure stockée client 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 si (intCount.Equals(files.Count - 1))
172 {
173 bFait = vrai ;
174 }
175 }
176
177 strClientFileIndex = strClientFileIndex.Remove(strClientFileIndex.Length - 1);
178
179 strSQL = "Insérer dans Group_Email (Titre, Contenu, Zone, SendToUser, Département, Expéditeur, Files_Index)" ;
180 strSQL += " valeurs (";
181 strSQL += "'" + strTitre + "',";
182 strSQL += "'" + strContent + "',";
183 strSQL += "'" + strUnitName + "',";
184 strSQL += "'" + strTmpUserName + "',";
185 strSQL += "'" + strDept + "',";
186 strSQL += "'" + strNomUtilisateur + "',";
187 strSQL += "'" + strClientFileIndex + "')";
188 cmd = new SqlCommand(strSQL, connClient);
189 cmd.Connection.Open();
190 cmd.ExecuteNonQuery();
191 cmd.Connection.Close();
192
193 Chaîne strTmpServerFileIndex = strServerFileIndex.Remove(strServerFileIndex.Length - 1);
194
195 strSQL = "Insérer dans Group_Email_Sever (Titre, Contenu, Zone, SendToUser, Département, Expéditeur, Files_Index)" ;
196 strSQL += " valeurs (";
197 strSQL += "'" + strTitre + "',";
198 strSQL += "'" + strContent + "',";
199 strSQL += "'" + strAreaName + "',";
200 strSQL += "'" + strTmpUserName + "',";
201 strSQL += "'" + strTmpDept + "',";
202 strSQL += "'" + strNomUtilisateur + "',";
203 strSQL += "'" + strTmpServerFileIndex + "')";
204 cmd = new SqlCommand(strSQL, conn);
205 cmd.Connection.Open();
206 cmd.ExecuteNonQuery();
207 cmd.Connection.Close();
208 }
209 /**/////////Fin du téléchargement de plusieurs pièces jointes//////////////
210 Réponse.Redirect("../SuccessMsg.aspx");
211 }
212}
213
Code pour télécharger le fichier :
DownFile.aspx
DownFile.aspx.cs
1en utilisant le système ;
2en utilisant System.Data ;
3en utilisant System.Configuration ;
4en utilisant System.Collections ;
5en utilisant System.Web ;
6en utilisant System.Web.Security ;
7en utilisant System.Web.UI ;
8en utilisant System.Web.UI.WebControls ;
9en utilisant System.Web.UI.WebControls.WebParts ;
10en utilisant System.Web.UI.HtmlControls ;
11
12en utilisant System.Data ;
13en utilisant System.Data.SqlClient ;
14en utilisant EOffice.Model ;
15en utilisant EOffice.SqlServer ;
16en utilisant System.IO ;
17
18[Sérialisable]
19classe partielle publique GroupWork_DownFile : System.Web.UI.Page
20{
21 connexion publique SqlConnection ;
22 chaîne publique strFileID ;
23 informations publiques UserInfo ;
24 void protégé Page_Load (expéditeur de l'objet, EventArgs e)
25 {
26 strFileID = Request.QueryString["ID"];
27 info = (UserInfo)Session["EOfficeUserInfo"];
28
29 si (strFileID == null)
30 {
31 Réponse.Redirect("../ErrorMsg.aspx");
32}
33
34 DbLink db = new DbLink();
35 conn = db.Connect();
36
37 String strSQL = "Select * From Group_Files Where ID=" + strFileID; //+ " Et SendToUser = '" + info.UserName + "'";
38 SqlCommand cmd = new SqlCommand(strSQL, conn);
39 cmd.Connection.Open();
40 en utilisant (SqlDataReader sdr = cmd.ExecuteReader())
41 {
42 si (!sdr.Read())
43 {
44 Réponse.Redirect("../ErrorMsg.aspx");
45 }
46 autres
47 {
48 Réponse.Clear();
49 String strFileName = sdr["FileName"].ToString();
50 Response.ContentType = "APPLICATION/OCTET-STREAM";
51 Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(strFileName));
52 Réponse.Buffer = vrai ;
53 Réponse.BinaryWrite((byte[])sdr["FileBody"]);
54
55 //Réponse.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("MesImages");
67 octets[] MyData = nouvel octet[0] ;
68 jours.Fill(ds, "MesImages");
69 DataRow myRow = ds.Tables["MesImages"].Rows[0];
70 String strFileName = Convert.ToString(myRow["FileName"]);
71 MesDonnées = (octet[])myRow["FileBody"];
72 int ArraySize = new int();
73 ArraySize = MyData.GetUpperBound(0);
74 FileStream fs = nouveau FileStream (@"C:\Download" + strFileName,
75 FileMode.OpenOrCreate, FileAccess.Write);
76 fs.Write(MyData, 0, ArraySize);
77 fs.Close();
78 */
79 //Response.Write("Télécharger le fichier" + strFileName + "Succès !");
80}
81}
82