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

Comment diffuser ou télécharger des fichiers à partir d'URL distantes dans ASP.NET ?

Linda Hamilton
Libérer: 2025-01-06 08:09:41
original
769 Les gens l'ont consulté

How to Stream or Download Files from Remote URLs in ASP.NET?

Diffusez ou téléchargez des fichiers à partir d'URL distantes dans ASP.NET

Problème :

Vous Vous devez diffuser ou télécharger un fichier à partir d'une URL distante et l'afficher sous forme de boîte de dialogue d'enregistrement sous dans le navigateur. Cependant, le répertoire du fichier est virtuel, ce qui le rend inaccessible via les méthodes traditionnelles telles que Server.MapPath.

Solution :

Utilisez HttpWebRequest pour récupérer le fichier à partir de l'URL et diffuser le renvoyer au client. Cette approche vous permet de travailler avec des fichiers accessibles uniquement via une URL.

Voici un exemple de code :

    //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 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