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

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

Barbara Streisand
Barbara Streisandoriginal
2025-01-06 08:17:41539parcourir

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

Télécharger ou diffuser des fichiers à partir d'URL dans ASP.NET

Vous pouvez rencontrer des scénarios dans lesquels vous devez télécharger ou diffuser des fichiers à partir d'URL dans votre Applications ASP.NET. Cependant, des problèmes surviennent lorsque ces fichiers résident dans des répertoires virtuellement mappés, ce qui rend impossible la détermination de leur emplacement réel à l'aide de Server.MapPath.

Une solution à ce problème consiste à utiliser la classe HttpWebRequest pour récupérer le fichier et le diffuser. retour au client. Cela vous permet d'accéder aux fichiers via des URL au lieu de chemins de fichiers.

Considérez l'extrait de code suivant :

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

  // Get a response for the request
  HttpWebResponse fileResp = (HttpWebResponse)fileReq.GetResponse();
  if (fileReq.ContentLength > 0)
    fileResp.ContentLength = fileReq.ContentLength;

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

  // Prepare the response to the client
  HttpContext.Current.Response.ContentType = MediaTypeNames.Application.Octet;
  HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
  HttpContext.Current.Response.AddHeader("Content-Length", fileResp.ContentLength.ToString());

  int length;
  byte[] buffer = new byte[10000]; // Chunk size for reading the file
  do
  {
    // Check if the client is connected
    if (HttpContext.Current.Response.IsClientConnected)
    {
      // Read data into the buffer
      length = stream.Read(buffer, 0, buffer.Length);

      // Write it out to the response's output stream
      HttpContext.Current.Response.OutputStream.Write(buffer, 0, length);

      // Flush the data
      HttpContext.Current.Response.Flush();

      // Clear the buffer
      buffer = new byte[buffer.Length];
    }
    else
    {
      // Cancel the download if the client has disconnected
      length = -1;
    }
  } while (length > 0);
}
catch
{
  // Handle any errors that may occur
}
finally
{
  if (stream != null)
  {
    // Close the input stream
    stream.Close();
  }
}

En mettant en œuvre cette approche, vous pouvez diffuser des fichiers à partir d'URL et les afficher directement dans le navigateur ou permettre aux utilisateurs de les enregistrer sur leurs systèmes locaux.

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