正在继续下载

2023-12-29

这个想法很简单,我正在创建一个服务,用户可以在其中放置托管在另一个网站上的文件的直接链接,我的程序将打开到该远程服务器的流并开始以字节为单位读取文件,然后返回每个读取的文件字节给用户。

到目前为止,我设法让它工作,这是我的代码

    public void Index()
    {
        //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; //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("http://SOME-OTHER-SERVER.com/File.rar");


            //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.Response;

            //Indicate the type of data being sent
            resp.ContentType = "application/octet-stream";

            //Name the file 
            resp.AddHeader("Content-Disposition", "attachment; filename=\"" + "fle.rar" + "\"");
            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();
            }
        }
    }

当我转到我的页面时,它下载得很好,但问题是如果我停止下载,它就不会再次恢复。

我搜索了该问题,发现必须在连接中定义一个标头“Accept-Ranges”才能支持恢复。

所以我添加了该标头但不起作用。


处理范围请求 http://www.w3.org/Protocols/rfc2616/rfc2616.html比这稍微复杂一点。一般来说,你需要处理Range and If-Range请求中的标头并正确提供服务第206章 部分内容回应Content-Range, Date and ETag or Content-Location标头。

文章ASP.NET MVC 中的范围请求 – RangeFileResult https://www.tpeczek.com/2011/10/range-requests-in-aspnet-mvc.html详细描述了如何创建 ASP.NET MVCActionResult with 范围请求支持。

在您的情况下,您还必须检查另一侧(您使用的一侧)是否fileReq) 支持范围请求。如果是,那么您可以只请求所需的部分(最好将其缓存在本地某个地方),但如果不是,您需要获取整个文件并寻找正确的位置(在这种情况下,您肯定希望有一个本地缓存方案)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正在继续下载 的相关文章

  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • Python - 最小化卡方

    我一直在尝试通过最小化卡方来将线性模型拟合到一组应力 应变数据 不幸的是 使用下面的代码并不能正确地最小化chisqfunc功能 它正在寻找初始条件下的最小值 x0 这是不正确的 我已经浏览过scipy optimize文档并测试了最小化其
  • 实体框架 ToListAsync() 和 Select()

    我的控制器中有以下 ActionResult public async Task
  • Angular2/Websocket:如何返回传入的 websocket 消息的可观察值

    我将使用 Angular2 接收 websocket 传入消息并根据收到的消息更新网页 现在 我正在使用虚拟 echo websocket 服务并将替换它 根据我的理解 接收 websocket 消息的函数必须返回一个由将更新网页的处理程序
  • 从 Python 线程更新 PyQt GUI

    我有一个用 Designer pyqt5 制作的 GUI 我的主类中的函数需要在单独的线程上工作 我还在操作期间捕捉 QtextEdit LIVE 上的标准输出 到目前为止一切正常 现在我正在尝试在我的主 GUI 窗体上实现一个 Progr
  • Service Worker 无法在 Node js 服务器的离线模式下工作

    I am trying to build a PWA with an offline first policy 源文件的服务器是NodeJS 服务器 我目前正在测试这个本地主机节点服务器 不确定它有影响吗 Service Worker 缓存
  • WooCommerce 免费送货标签的自定义功能

    当我将以下内容放入我的functions php 时 它使我的整个网站崩溃 这个函数的目的是改变 elseif method gt id free shipping label Free woocommerce 对此 elseif meth
  • 在命名空间中导出命名空间

    我可以导出命名空间 A 并在其中包含另一个命名空间 B 吗 就像是 b ts export namespace B export const val val a ts export namespace A some thing import
  • Z3 上下文序列化/反序列化?

    是否可以序列化 反序列化 Z3 上下文 来自 C 如果没有 这个功能有计划吗 我认为这个功能对于现实世界的应用程序很重要 当前 API 不直接支持此功能 下一版本将支持多个求解器 我们将提供用于将断言从一个求解器复制到另一个求解器并检索断言
  • 用有限的资金扩展 YouTube API 配额

    通过一个简单的 java 程序 我使用以下命令发送 GET 请求YouTube 数据 API https developers google com youtube v3 具体来说视频列表 https developers google c
  • 将 LocalDateTime 转换为日期

    我有一个字符串日期 我用下面的语句将其转换 LocalDateTime datetime LocalDateTime parse rs getString DateIn DateTimeFormatter ofPattern yyyy MM
  • 来自网络工作者的 setTimeout

    如果我想在无法继续处理数据的情况下暂停 Web Worker 然后稍后再尝试 该怎么办 我可以在网络工作者中以这种方式做到这一点吗 var doStuff function if databaseBusy setTimeout doStuf
  • “unicode”对象没有属性“keys”

    我在 ebextensions 目录中添加 config 以在 Elastic Beanstalk 下管理的 Amazon Linux 中安装 imagemagick 包时遇到严重问题 我用了 packages yum ImageMagic
  • @IBAction 只是 Swift 中的一种语法还是 @Something 在 Swift 中意味着特定的事物?

    IBAction 只是 Swift 中的语法差异还是它表示特定的东西 此外 在编写 UIApplicationMain 的 AppDelegate swift 中也可以看到类似的用法 这些都是attributes在 swift 中 它们对编
  • 如何使用 GetThemeStream 保存 Windows 主题部分? (DWWINDOWS 除外)

    我想使用特定状态保存主题部分的原始 PNG BMP 32 位 带 alpha GetThemeStream https msdn microsoft com en us library windows desktop bb759768 v
  • 32 位 Oracle 客户端的 SSRS 报告无法在 64 位环境中工作

    我有一个在 BIDS 2008 中使用 32 位 Oracle 客户端构建的 SSRS 报告 报告在 BIDS VS 2008 中运行良好 但是当部署到 Win2k3 64 位服务器上的报告管理器时 它失败并出现以下错误 尝试加载 Orac
  • 如何手动设置在应用程序委托中显示哪个故事板视图

    我有一个应用程序 只要应用程序在一段时间内处于非活动状态 就希望注销用户 应用程序中有多个不同的视图 我希望应用程序委托在触发此方法时将登录视图设置为当前视图 void applicationDidBecomeActive UIApplic
  • Postgres 8.4.4(Win7 x64 上的 x32)小表上的更新速度非常慢

    我有一个非常简单的更新语句 UPDATE W SET state thing WHERE state NOT IN this that AND losttime lt CURRENT TIMESTAMP 表 W 只有 90 行 每行的丢失时
  • Jmeter - 如何基于“jar”文件循环数据

    我想创建一个场景 将 jar 文件中的数据使用到 Jmeter 循环逻辑中 我的罐子看起来像 public String Australia String a location lat 33 8669710 lng 151 1958750
  • BlackBerry - 如何设置应用程序图标?

    我需要为我的应用程序设置一个图标 当焦点位于该特定应用程序时 该图标必须更改 请参阅项目 gt 属性 gt BlackBerry 项目属性 gt 资源 要动态更改图标 请参阅在 BlackBerry JDE 4 5 0 的状态栏添加通知图标
  • 正在继续下载

    这个想法很简单 我正在创建一个服务 用户可以在其中放置托管在另一个网站上的文件的直接链接 我的程序将打开到该远程服务器的流并开始以字节为单位读取文件 然后返回每个读取的文件字节给用户 到目前为止 我设法让它工作 这是我的代码 public