首页 > 后端开发 > C++ > 如何在 ASP.NET 中从远程 URL 流式传输或下载文件?

如何在 ASP.NET 中从远程 URL 流式传输或下载文件?

Linda Hamilton
发布: 2025-01-06 08:09:41
原创
769 人浏览过

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

从 ASP.NET 中的远程 URL 流式传输或下载文件

问题:

您需要从远程 URL 流式传输或下载文件并将其显示为浏览器中的另存为对话框。然而,该文件的目录是虚拟的,无法通过 Server.MapPath 等传统方法访问它。

解决方案:

利用 HttpWebRequest 从 URL 和流中检索文件它返回给客户端。这种方法允许您处理只能通过 URL 访问的文件。

下面是一个代码示例:

    //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();
        }
    }
登录后复制

以上是如何在 ASP.NET 中从远程 URL 流式传输或下载文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板