Maison > développement back-end > C++ > Comment diffuser des fichiers à partir d'URL dans ASP.NET ?

Comment diffuser des fichiers à partir d'URL dans ASP.NET ?

Linda Hamilton
Libérer: 2025-01-06 08:19:40
original
558 Les gens l'ont consulté

How to Stream Files from URLs in ASP.NET?

Téléchargement et streaming de fichiers à partir d'URL dans ASP.NET

Dans ASP.NET, les fichiers en streaming qui demandent des invites d'enregistrement dans le navigateur peuvent être réalisé en utilisant Server.MapPath. Toutefois, lorsque le fichier se trouve dans un répertoire virtuellement mappé, cette méthode peut ne pas fonctionner. Voici une solution alternative utilisant HttpWebRequest pour diffuser des fichiers à partir d'URL :

//Create a stream for the file
Stream stream = null;

//This controls how many bytes to read at a time and send to the client
int bytesToRead = 10000;

// Buffer to read bytes in chunk size specified above
byte[] buffer = new Byte[bytesToRead];

// The number of bytes read
try
{
  //Create a WebRequest to get the file
  HttpWebRequest fileReq = (HttpWebRequest) HttpWebRequest.Create(url);

  //Create a response for this request
  HttpWebResponse fileResp = (HttpWebResponse) fileReq.GetResponse();

  if (fileReq.ContentLength > 0)
    fileResp.ContentLength = fileReq.ContentLength;

    //Get the Stream returned from the response
    stream = fileResp.GetResponseStream();

    // prepare the response to the client. resp is the client Response
    var resp = HttpContext.Current.Response;

    //Indicate the type of data being sent
    resp.ContentType = MediaTypeNames.Application.Octet;

    //Name the file
    resp.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
    resp.AddHeader("Content-Length", fileResp.ContentLength.ToString());

    int length;
    do
    {
        // Verify that the client is connected.
        if (resp.IsClientConnected)
        {
            // Read data into the buffer.
            length = stream.Read(buffer, 0, bytesToRead);

            // and write it out to the response's output stream
            resp.OutputStream.Write(buffer, 0, length);

            // Flush the data
            resp.Flush();

            //Clear the buffer
            buffer = new Byte[bytesToRead];
        }
        else
        {
            // cancel the download if client has disconnected
            length = -1;
        }
    } while (length > 0); //Repeat until no data is read
}
finally
{
    if (stream != null)
    {
        //Close the input stream
        stream.Close();
    }
}
Copier après la connexion

Ce code vous permet de spécifier une URL pour le fichier, qui peut être située n'importe où, quel que soit l'emplacement physique du site Web. Il configure les en-têtes appropriés et diffuse le fichier au client en morceaux, offrant ainsi une expérience de téléchargement transparente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal