red asp
C# puede utilizar los siguientes 4 métodos para descargar archivos desde el servidor: TransmitFile, WriteFile, WriteFile y modo de transmisión para descargar archivos y guardarlos como los tipos correspondientes. Los métodos son los siguientes:
1. Implementación de TransmitFile Descargar protected?void?Button1_Click(object?sender,?EventArgs?e)
{
/*?
Microsoft proporciona una ¿Nuevo método TransmitFile para resolver el problema del uso de Response.BinaryWrite?
Al descargar un archivo que supera los 400 MB, el proceso Aspnet_wp.exe se recicla y la descarga no puede realizarse correctamente.
?
El código es el siguiente:?
*/?
Response.ContentType?=?"application/x-zip-compressed"; p>
Response.AddHeader("Content-Disposition",?"attachment;filename=z.zip");
string?filename?=?Server.MapPath("DownLoad/z.zip ");
Response.TransmitFile(nombre de archivo);
}
2. WriteFile implementa la descarga protegida?void?Button2_Click(object?sender,?EventArgs? e)
{
/*?
usando?System.IO;
*/
cadena ?fileName? =?"asd.txt";//¿El nombre del archivo guardado por el cliente?
string?filePath?=?Server.MapPath("DownLoad/aaa.txt");//Ruta
FileInfo?fileInfo?=?new?FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Respuesta .ClearHeaders();
Response.AddHeader("Content-Disposition",?"attachment;filename="?+?fileName);
Response.AddHeader( "Content-Length ",?fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding",?"binary");
Respuesta. ContentType?=? "application/octet-stream";
Response.ContentEncoding?=?System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo) .FullName);
Response.Flush();
Response.End();
}
3. ¿fragmentos protegidos? void?Button3_Click(object?sender,?EventArgs?e)
{
string?fileName?=?"aaa.txt";//El nombre del archivo guardado por el cliente?
string?filePath?=?Server.MapPath("DownLoad/aaa.txt");//Path
System.IO.FileInfo?fileInfo?=? new?System.IO .FileInfo(filePath);
if?(fileInfo.Exists?==?true)
{
const?long?ChunkSize ?=?102400; //100K? Cada vez que se lee un archivo, solo se leen 100K. ¿Esto puede aliviar la presión sobre el servidor?
byte[]?buffe.
r?=?new?byte[ChunkSize];
Response.Clear();
System.IO.FileStream?iStream?=?System.IO.File.OpenRead(filePath );
long?dataLengthToRead?=?iStream.Length;//¿Obtener el tamaño total de los archivos descargados?
Response.ContentType?=?"application/octet-stream";
Response.AddHeader("Content-Disposition",?"attachment;?filename="?+?HttpUtility.UrlEncode(fileName));
mientras?(dataLengthToRead?>? 0 ?&&?Response.IsClientConnected)
{
int?lengthRead?=?iStream.Read(buffer,?0,?Convert.ToInt32(ChunkSize));//leer ¿tamaño?
Response.OutputStream.Write(buffer,?0,?lengthRead);
Response.Flush();
dataLengthToRead?=?dataLengthToRead ? -?lengthRead;
}
Respuesta.Close();
}
}
4, descarga de flujo protected?void?Button4_Click(object?sender,?EventArgs?e)
{
string?fileName?=?"aaa.txt";//Cliente Nombre de archivo guardado ?
string?filePath?=?Server.MapPath("DownLoad/aaa.txt");//Path
//Descargar el archivo en forma de flujo de caracteres ?
FileStream?fs?=?new?FileStream(filePath,?FileMode.Open);
byte[]?bytes?=?new?byte[(int)fs Longitud] ;
fs.Read(bytes,?0,?bytes.Length);
fs.Close();
Response.ContentType?= ?" application/octet-stream";
//¿Notificar al navegador que descargue el archivo en lugar de abrirlo?
Response.AddHeader("Content-Disposition",?"attachment;? nombre de archivo ="?+?HttpUtility.UrlEncode(fileName,?System.Text.Encoding.UTF8));
Respuesta.BinaryWrite(bytes);
Respuesta.Flush();
Respuesta.End();
}