从 ASP.NET 中的 URL 下载或流式传输文件
您可能会遇到需要从 ASP.NET 中的 URL 下载或流式传输文件的情况ASP.NET 应用程序。然而,当这些文件驻留在虚拟映射目录中时,就会出现挑战,从而无法使用 Server.MapPath 确定它们的实际位置。
对此的一种解决方案是使用 HttpWebRequest 类来检索文件并流式传输返回给客户端。这允许您通过 URL 而不是文件路径访问文件。
考虑以下代码片段:
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(); } }
通过实现此方法,您可以从 URL 流式传输文件并直接在中显示它们浏览器或允许用户将它们保存到本地系统。
以上是如何从 ASP.NET 中的 URL 下载或流式传输文件?的详细内容。更多信息请关注PHP中文网其他相关文章!