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

Comment télécharger et diffuser des fichiers à partir d'une URL distante dans ASP.NET ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-06 08:26:43777parcourir

How to Download and Stream Files from a Remote URL in ASP.NET?

Télécharger/diffuser un fichier à partir d'une URL - asp.net

Dans certains scénarios, il peut être nécessaire de diffuser ou de télécharger un fichier à partir d'une URL distante et de déclencher un " Invite "Enregistrer sous" dans le navigateur. Cependant, lorsque le fichier se trouve dans un répertoire virtuellement mappé, accéder à son emplacement réel à l'aide de Server.MapPath peut être difficile.

Au lieu de cela, vous pouvez exploiter la puissance de HttpWebRequest pour obtenir cette fonctionnalité. Voici un exemple qui vous permet de transmettre une URL Web :

using System.IO;
using System.Net;

namespace FileDownloader
{
    public static class FileDownloader
    {
        public static void DownloadFile(string url, string fileName)
        {
            // Create a stream for the file
            Stream stream = null;

            // Configure streaming chunk size
            int bytesToRead = 10000;

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

            // Initialize response
            HttpWebResponse fileResp = null;

            try
            {
                // Create a WebRequest to get the file
                HttpWebRequest fileReq = (HttpWebRequest)HttpWebRequest.Create(url);

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

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

                // Prepare the response to the client
                HttpResponse resp = HttpContext.Current.Response;

                // Set response type and add headers
                resp.ContentType = MediaTypeNames.Application.Octet;
                resp.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
                resp.AddHeader("Content-Length", fileResp.ContentLength.ToString());

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

                        // Write data 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 download if client disconnects
                        length = -1;
                    }
                } while (length > 0); // Repeat until no data remains
            }
            finally
            {
                // Close the input stream
                if (stream != null)
                {
                    stream.Close();
                }

                // Dispose the response
                if (fileResp != null)
                {
                    fileResp.Close();
                }
            }
        }
    }
}

En utilisant cette approche, vous pouvez diffuser des fichiers à partir d'URL distantes et permettre aux utilisateurs de les enregistrer localement avec un nom de fichier généré dynamiquement.

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!

Déclaration:
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