Red de conocimiento informático - Computadora portátil - red asp

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";

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();

}