Maison > développement back-end > C++ > Comment diffuser et inviter le téléchargement d'un fichier à partir d'une URL dans ASP.NET ?

Comment diffuser et inviter le téléchargement d'un fichier à partir d'une URL dans ASP.NET ?

Patricia Arquette
Libérer: 2025-01-06 08:06:41
original
219 Les gens l'ont consulté

How to Stream and Prompt Download of a File from a URL in ASP.NET?

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

Question :

Comment un fichier peut-il être diffusé à partir d'un URL et invité à enregistrer dans le navigateur ?

Contexte :

Dans ce scénario, un fichier est stocké dans un répertoire virtuellement mappé, le rendant inaccessible via Server.MapPath. L'objectif est de diffuser le fichier en transmettant une URL Web au lieu d'un chemin de fichier serveur.

Solution :

Pour surmonter ce problème, HttpWebRequest peut être utilisé pour récupérer le fichier à partir de l'URL et le renvoyer au client.

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

// Chunk size for reading bytes
int bytesToRead = 10000;

// Buffer for reading bytes
byte[] buffer = new Byte[bytesToRead];

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

    // HTTP response for the request
    HttpWebResponse fileResp = (HttpWebResponse)fileReq.GetResponse();

    // Get response stream
    stream = fileResp.GetResponseStream();

    // Client response object
    var resp = HttpContext.Current.Response;

    // Indicate data type
    resp.ContentType = "application/octet-stream";

    // File name
    resp.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

    // File size
    resp.AddHeader("Content-Length", fileResp.ContentLength.ToString());

    int length;
    do
    {
        // Client connected?
        if (resp.IsClientConnected)
        {
            // Read data into buffer
            length = stream.Read(buffer, 0, bytesToRead);

            // Write data to output stream
            resp.OutputStream.Write(buffer, 0, length);

            // Flush data
            resp.Flush();

            // Clear buffer
            buffer = new Byte[bytesToRead];
        }
        else
        {
            // Cancel if client disconnected
            length = -1;
        }
    } while (length > 0);
}
finally
{
    // Close input stream
    if (stream != null)
        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