Recientemente, hubo un trabajo que involucraba correos electrónicos, que requería cargar archivos en una base de datos, luego leer los archivos de la base de datos y descargarlos.
Encontré información y la apliqué al proyecto.
La estructura de la base de datos es la siguiente:
USO[EOffice]
IR
/**//****** Objeto: Tabla [dbo].[Group_Files] Fecha del script: 20/07/2006 23:57:34 ******/
ESTABLECER ANSI_NULLS EN
IR
ESTABLECER QUOTED_IDENTIFIER EN
IR
ESTABLECER ANSI_PADDING EN
IR
CREAR TABLA [dbo].[Group_Files](
[ID] [int] IDENTIDAD(1,1) NO NULO,
[Nombre de archivo] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Group_Files_FileName] DEFAULT (''),
[Cuerpo de archivo] [imagen] NULO,
[Tipo de archivo] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Group_Files_FileType] DEFAULT (''),
RESTRICCIÓN [PK_Group_Files] CLAVE PRIMARIA AGRUPADA
(
[ID]ASC
)CON (IGNORE_DUP_KEY = APAGADO) EN [PRIMARIO]
) EN [PRIMARIO] TEXTIMAGE_ON [PRIMARIO]
IR
DESACTIVAR ANSI_PADDING
Luego escribí un procedimiento almacenado con el siguiente código:
USO[EOffice]
IR
/**//****** Objeto: StoredProcedure [dbo].[SendTo_Group_Email] Fecha del script: 20/07/2006 23:59:21 ******/
ESTABLECER ANSI_NULLS EN
IR
ESTABLECER QUOTED_IDENTIFIER EN
IR
Crear PROCEDIMIENTO [dbo].[SendTo_Group_Email]
(
@Título varchar(200),
@Contenido varchar(MAX),
@Área varchar(máx),
@Remitente varchar(50),
@Depto varchar(50),
@SendToUser varchar(50),
@NombreDeArchivo varchar(200),
Imagen @FileBody,
@FileType varchar(4)
)
AS
INSERT Group_Email (Título,[Contenido],Área,Enviar al usuario,Depto,Remitente,Nombre de archivo,Cuerpo de archivo,Tipo de archivo) VALORES (@Título,@Contenido,@Área,@Enviar al usuario,@Depto,@Remitente,@Nombre de archivo,@Cuerpo de archivo, @Tipo de archivo)
El código del programa es el siguiente:
Enviar correo electrónico.aspx
1<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SendEmail.aspx.cs" Inherits="GroupWork_SendEmail" %>
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transicional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
4
5<html xmlns=" http://www.w3.org/1999/xhtml " >
6
7<cabeza runat="servidor">
8 <título>Enviar correo electrónico</título>
9<meta http-equiv="Tipo de contenido" content="text/html; charset=utf-8"><tipo de estilo="text/css">
10cuerpo,td,th {
11 tamaño de fuente: 9 puntos;
12}
13cuerpo {
14 imagen de fondo: url();
15 colores de fondo: #F2F7FB;
16 margen izquierdo: 10px;
17 margen superior: 5px;
18 margen derecho: 10px;
19 margen inferior: 5px;
20}
21-->
22</style></head>
23<lenguaje de escritura="vbscript">
24función Seleccionar_usuario_local (url)
25 k tenue
26 k=showModalDialog(url,","dialogWidth:485px;status:no;dialogHeight:280px")
27 si ubound(split(k," $#@&!"))>=0 entonces
28 document.form1.HiddenField1.value = dividir(k," $#@&!")(0 )
29 document.form1.txtLocalUser.value = split(k," $#@&!")(1 )
30 final si
31función final
32
33función Select_Remote_User(url)
34 k tenue
35 k=showModalDialog(url,","dialogWidth:485px;status:no;dialogHeight:310px")
36 si ubound(split(k," $#@&!"))>=0 entonces
37 document.form1.HiddenField2.value = dividir(k," $#@&!")(0 )
38 document.form1.txtRemoteUser.value=split(k," $#@&!")(1 )
39 final si
40función final
41
42</script>
43<cuerpo>
44 <form id="form1" método="post" enctype="multipart/form-data" runat="servidor">
45 <div style="text-align: center">
46 <table border="0" cellpadding="0" cellspace="0" ancho="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="altura: 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" cellspaceing="0" relleno de celda="0">
56 <tr>
57 <td ancho="40" alto="20"></td>
58 <td width="79" valign="top"><strong>Registrar recibo</strong></td>
59</tr>
60 </table></td>
61 <td style="altura: 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 estilo="altura: 35px"></td>
63</tr>
64 <tr>
65 <td background="../images/ye_r2_c1.gif"> </td>
66 <td ancho="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 <tr>
72 <td background="../images/ye_r2_c1.gif"> </td>
73 <td colspan="2"><div align="centro">
74 <table border="0" cellpadding="0" cellspace="1" bgcolor="#CCCCCC" style="ancho: 566px">
75 <trbgcolor="#b9d5f4">
76 <td estilo="ancho: 186px; alto: 20px">
77 <div align="center" class="style2"> Título del archivo</div></td>
78 <td colspan="2" align="left" style="alto: 20px; ancho: 433px;">
79 <asp:TextBox ID="txtTitle" runat="servidor" class="Input_TextBox" Ancho="277px"></asp:TextBox>
80 <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="servidor" ControlToValidate="txtTitle"
81 Display="Dynamic" ErrorMessage="El título del archivo no puede estar vacío."></asp:RequiredFieldValidator></td>
82</tr>
83 <trbgcolor="#F1F5FC">
84 <td estilo="ancho: 186px; alto: 20px">
85 usuarios locales</td>
86 <td align="left" colspan="2" style="ancho: 433px; alto: 20px">
87 <asp:TextBox ID="txtLocalUser" runat="servidor" Ancho="279px"></asp:TextBox><entrada
88 id="SelectLocal" class="Input_Button" nombre="SelectLocal" onClick="vbscript:Select_Local_User('..SelectMulti.aspx')" tipo="botón"
89 valor="select" /><asp:HiddenField ID="HiddenField1" runat="servidor" />
90</td>
91</tr>
92 <trbgcolor="#b9d5f4">
93 <td estilo="ancho: 186px; alto: 20px">
94 usuarios remotos</td>
95 <td align="left" colspan="2" style="ancho: 433px; alto: 20px">
96 <asp:TextBox ID="txtRemoteUser" runat="servidor" Ancho="279px"></asp:TextBox>
97 <input id="SelectRemote" class="Input_Button" nombre="SelectRemote" onClick="vbscript:Select_Remote_User('..SelectRemoteUser.aspx')"
98 tipo="botón" valor="seleccionar" />
99 <asp:HiddenField ID="HiddenField2" runat="servidor" />
100 </td>
101</tr>
102 <trbgcolor="#F1F5FC">
103 <td rowspan="2" align="center" style="ancho: 186px; alto: 11px;"> Carga de archivo</td>
104 <td colspan="2" rowspan="2" align="left" valign="top" bgcolor="#F1F5FC" style="ancho: 433px; alto: 11px;">
105 <input id="Archivo1" runat="servidor" estilo="ancho: 381px" tipo="archivo" /><br />
106 <input id="Archivo2" runat="servidor" estilo="ancho: 379px" tipo="archivo" />
107 <input id="Archivo3" runat="servidor" estilo="ancho: 379px" tipo="archivo" />
108 <input id="Archivo4" runat="servidor" estilo="ancho: 379px" tipo="archivo" />
109 <input id="Archivo5" runat="servidor" estilo="ancho: 377px" tipo="archivo" /></td>
110</tr>
111 <tr>
112</tr>
113 <trbgcolor="#B9D5F4">
114 <td estilo="ancho: 186px; alto: 22px;">
115 <div align="center" class="style2"> Contenido del correo electrónico</div></td>
116 <td colspan="2" align="left" style="ancho: 433px; alto: 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="servidor" ControlToValidate="txtContent"
119 Display="Dynamic" ErrorMessage="El contenido del correo electrónico no puede estar vacío."></asp:RequiredFieldValidator></td>
120</tr>
121 <trbgcolor="#F1F5FC">
122 <td estilo="ancho: 186px; alto: 6px">
123</td>
124 <td colspan="2" align="left" style="alto: 6px; ancho: 433px;">
125 <asp:CheckBox ID="chkSms" runat="servidor" Text="Notificación por SMS" />
126 <asp:Button ID="btnSubmit" runat="servidor" OnClick="btnSubmit_Click" Text="Enviar" class="Input_Button" />
127 <tipo de entrada="reset" nombre="Enviar" valor="Reset" class="Input_Button" /></td>
128</tr>
129 </tabla>
130 </div></td>
131 <td background="../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 </tabla>
141 </div>
142 </formulario>
143</cuerpo>
144</html>
145
Enviar correo electrónico.aspx.cs
1usando el sistema;
2usando datos del sistema;
3usando la configuración del sistema;
4usando System.Colecciones;
5usando System.Web;
6usando System.Web.Security;
7usando System.Web.UI;
8usando System.Web.UI.WebControls;
9usando System.Web.UI.WebControls.WebParts;
10usando System.Web.UI.HtmlControls;
11
12usando datos del sistema;
13usando System.Data.SqlClient;
14usando EOffice.Model;
15usando EOffice.SqlServer;
16usando System.IO;
17usando Configuración.del.Sistema;
18
19//usando iWebSMS2000;
20[Serializable]
21clase parcial pública GroupWork_SendEmail: System.Web.UI.Page
Veintidós{
23 conexión pública SqlConnection;
24 //SMS públicos iSMS2000;
25 //public DBstep.SMSClient2000 ObjiSMSClient2000;
26 Page_Load vacío protegido (remitente del objeto, EventArgs e)
27 {
28 conexión = nueva SqlConnection("SERVIDOR=SERVIDOR;UID=sa;PWD=8860;base de datos=EOFFICE_SERVER;");
29
30}
31 btnSubmit_Click vacío protegido (remitente del objeto, EventArgs e)
32 {
33 Cadena strTitle = txtTitle.Text;
34 Cadena strContent = txtContent.Text;
35 Información de usuario información = (Info de usuario) Sesión ["EOfficeUserInfo"];
36 Cadena strUserName = info.UserName;
37 Cadena strTmpDept = info.DeptId.ToString();
38
39 String strUnitName = ConfigurationSettings.AppSettings["UnitName"];
40 String strServerFileIndex = "" //Índice de archivos adjuntos del lado del servidor
41 String strClientFileIndex = "" //Índice de archivos adjuntos del cliente
42
43 Cadena strRemote = HiddenField2.Value;
44 Cadena[] strRemoteUser = strRemote.Split(',');
45 Cadena strTmpUserName;
46 Cadena strTmpServer;
47 Booleano bHecho = falso;
48
49 /**/////////Cargar múltiples códigos adjuntos//////////////
50 //Obtener el elemento de formulario de archivo
51 archivos HttpFileCollection = HttpContext.Current.Request.Files;
52 HttpPostedFile archivo publicado;
53
54 foreach (cadena strUser en strRemoteUser)
55 {
56 Cadena[] strSplit = strUser.Split('/');
57 strTmpUserName = strSplit[0];
58 strTmpServer = strSplit[1];
59 Cadena strConnectString = "";
60 Cadena strAreaName = "";
61 int nÁreaID = 0;
62 Cadena strDept = "";
63 strClientFileIndex = "";
64 conexión SqlConnectionClient;
65
66 String strSQL = "Seleccionar * Desde el área donde AreaCode='" + strTmpServer + "'";
67 SqlCommand cmd = nuevo SqlCommand(strSQL, conexión);
68 cmd.Conexión.Open();
69 usando (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.Conexión.Cerrar();
79
80 strSQL = "Seleccionar * De MemberList Donde Nombre de usuario ='" + strTmpUserName + "' And AreaID=" + nAreaID;
81 cmd = nuevo SqlCommand(strSQL, conexión);
82 cmd.Conexión.Open();
83 usando (SqlDataReader sdr = cmd.ExecuteReader())
84 {
85 si (sdr.Read())
86 {
87 strDept = sdr["Dept"].ToString();
88 }
89 }
90 cmd.Conexión.Cerrar();
91
92 connClient = nueva SqlConnection(strConnectString);
93
94 para (int intCount = 0; intCount < archivos.Count; intCount++)
95 {
96 archivo publicado = archivos [intCount];
97
98 si (postedFile.ContentLength > 0)
99 {
100 Cadena strOldFilePath = publicadoFile.FileName;
101 Cadena strFileName = strOldFilePath.Substring(strOldFilePath.LastIndexOf("\") + 1);
102
103 //Subir archivos al servidor
104 //File1.PostedFile.SaveAs("c:\Test\" + DateTime.Now.ToString("yyyyMMddhhmmss") + strExtension);
105
106 //Se utiliza para guardar el tamaño del archivo
107intintDocLen;
108 //La transmisión se utiliza para leer los datos cargados
109 Flujo objStream;
110 Cadena strDocExt;
111 //Sube el contenido específico del archivo
112 intDocLen = publicadoFile.ContentLength;
113 strDocExt = strOldFilePath.Substring(strOldFilePath.LastIndexOf(".") + 1);
114
115 bytes[] Docbuffer = nuevo byte[intDocLen];
116 objStream = publicadoFile.InputStream;
117
118
119 //Guardar el archivo en caché
120
121 //El caché se guardará en la base de datos.
122 objStream.Read(Docbuffer, 0, intDocLen);
123
124 cadena fileType = publicadoFile.ContentType;
125
126
127 //Ejecutar el procedimiento almacenado del lado del servidor Send_Group_Email
128 si (!bHecho)
129 {
130 cmd = nuevo 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.Parámetros[1].Valor = Docbuffer;
139 //cmd.Parameters[2].Value = strDocExt;]
140 cmd.Parámetros[2].Valor = tipo de archivo;
141
142 //cmd.Parameters.Add(new SqlParameter("@File_Index", SqlDbType.Int));
143 cmd.Parameters[3].Direction = ParameterDirection.ReturnValue;
144 cmd.Conexión.Open();
145 cmd.ExecuteNonQuery();
146 strServerFileIndex += cmd.Parameters[3].Value.ToString() + ",";
147 cmd.Conexión.Cerrar();
148 }
149
150 //Ejecutar procedimiento almacenado del cliente Get_Upload_File
151 cmd = nuevo 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.Parámetros[1].Valor = Docbuffer;
160 //cmd.Parameters[2].Value = strDocExt;
161 cmd.Parameters[2].Valor = tipo de archivo;
162
163 //cmd.Parameters.Add(new SqlParameter("@File_Index", SqlDbType.Int));
164 cmd.Parameters[3].Direction = ParameterDirection.ReturnValue;
165 cmd.Conexión.Open();
166 cmd.ExecuteNonQuery();
167 strClientFileIndex += cmd.Parameters[3].Value.ToString() + ",";
168 cmd.Conexión.Cerrar();
169 }
170
171 si (intCount.Equals(archivos.Count - 1))
172 {
173 bHecho = verdadero;
174 }
175 }
176
177 strClientFileIndex = strClientFileIndex.Remove(strClientFileIndex.Length - 1);
178
179 strSQL = "Insertar en grupo_correo electrónico (título, contenido, área, envío al usuario, departamento, remitente, índice_archivos)";
180 strSQL += " valores (";
181 strSQL += "'" + strTitle + "',";
182 strSQL += "'" + strContent + "',";
183 strSQL += "'" + strUnitName + "',";
184 strSQL += "'" + strTmpUserName + "',";
185 strSQL += "'" + strDept + "',";
186 strSQL += "'" + strUserName + "',";
187 strSQL += "'" + strClientFileIndex + "')";
188 cmd = nuevo SqlCommand(strSQL, connClient);
189 cmd.Conexión.Open();
190 cmd.ExecuteNonQuery();
191 cmd.Conexión.Cerrar();
192
193 Cadena strTmpServerFileIndex = strServerFileIndex.Remove(strServerFileIndex.Length - 1);
194
195 strSQL = "Insertar en Group_Email_Sever (Título, Contenido, Área, Enviar al usuario, Departamento, Remitente, Índice de archivos)";
196 strSQL += " valores (";
197 strSQL += "'" + strTitle + "',";
198 strSQL += "'" + strContent + "',";
199 strSQL += "'" + strAreaName + "',";
200 strSQL += "'" + strTmpUserName + "',";
201 strSQL += "'" + strTmpDept + "',";
202 strSQL += "'" + strUserName + "',";
203 strSQL += "'" + strTmpServerFileIndex + "')";
204 cmd = nuevo SqlCommand(strSQL, conexión);
205 cmd.Conexión.Open();
206 cmd.ExecuteNonQuery();
207 cmd.Conexión.Cerrar();
208 }
209 /**/////////Finalizar la carga de múltiples archivos adjuntos//////////////
210 Respuesta.Redirect("../SuccessMsg.aspx");
211 }
212}
213
Código para descargar el archivo:
ArchivoAbajo.aspx
ArchivoAbajo.aspx.cs
1usando el sistema;
2usando datos del sistema;
3usando la configuración del sistema;
4usando System.Colecciones;
5usando System.Web;
6usando System.Web.Security;
7usando System.Web.UI;
8usando System.Web.UI.WebControls;
9usando System.Web.UI.WebControls.WebParts;
10usando System.Web.UI.HtmlControls;
11
12usando datos del sistema;
13usando System.Data.SqlClient;
14usando EOffice.Model;
15usando EOffice.SqlServer;
16usando System.IO;
17
18[Serializable]
19clase parcial pública GroupWork_DownFile: System.Web.UI.Page
20{
21 conexión pública SqlConnection;
22 cadena pública strFileID;
23 información pública de información de usuario;
24 Page_Load vacío protegido (remitente del objeto, EventArgs e)
25 {
26 strFileID = Solicitud.QueryString["ID"];
27 información = (UserInfo)Sesión["EOfficeUserInfo"];
28
29 si (strFileID == nulo)
30 {
31 Respuesta.Redirect("../ErrorMsg.aspx");
32}
33
34 DbLink db = nuevo DbLink();
35 conexión = db.Connect();
36
37 String strSQL = "Seleccionar * De Group_Files Donde ID=" + strFileID //+ " Y SendToUser = '" + info.UserName + "'";
38 SqlCommand cmd = nuevo SqlCommand(strSQL, conexión);
39 cmd.Conexión.Open();
40 usando (SqlDataReader sdr = cmd.ExecuteReader())
41 {
42 si (!sdr.Read())
43 {
44 Respuesta.Redirect("../ErrorMsg.aspx");
45 }
46 más
47 {
48 Respuesta.Borrar();
49 Cadena strFileName = sdr["FileName"].ToString();
50 Response.ContentType = "APLICACIÓN/OCTETO-STREAM";
51 Response.AddHeader("disposición-contenido", "attachment;filename=" + HttpUtility.UrlEncode(strFileName));
52 Respuesta.Buffer = verdadero;
53 Response.BinaryWrite((byte[])sdr["FileBody"]);
54
55 //Respuesta.Borrar();
56 //Response.ContentType = "aplicación/flujo de octeto";
57 /**/////Response.AddHeader("Content-Type", sdr["FileType"].ToString());
58 //Response.BinaryWrite((byte[])sdr["FileBody"]);
59 }
60 }
61 //conn.Close();
62
63 /**//*
64 SqlDataAdapter da = nuevo SqlDataAdapter(strSQL, conn);
65 SqlCommandBuilder MyCB = nuevo SqlCommandBuilder(da);
66 DataSet ds = nuevo DataSet("Mis Imágenes");
67 bytes[] MisDatos = nuevo byte[0];
68 da.Fill(ds, "MisImagenes");
69 DataRow myRow = ds.Tables["MisImagenes"].Rows[0];
70 String strFileName = Convert.ToString(myRow["FileName"]);
71 MisDatos = (byte[])miFila["FileBody"];
72 int ArraySize = nuevo int();
73 ArraySize = MyData.GetUpperBound(0);
74 FileStream fs = nuevo FileStream(@"C:\Descargar" + strFileName,
75 FileMode.OpenOrCreate, FileAccess.Write);
76 fs.Write(MyData, 0, ArraySize);
77 fs.Cerrar();
78 */
79 //Response.Write("Descargar archivo" + strFileName + "¡Éxito!");
80}
81}
82