C# - 按块上传文件 - 最后一个块大小错误

2023-12-31

我正在尝试将大文件分块上传到第三部分服务。但我对最后一块有问题。最后一个块总是小于 5mb,但所有块都包括。最后一个大小相同 - 5mb 我的代码:

int chunkSize = 1024 * 1024 * 5;
using (Stream streamx = new FileStream(file.Path, FileMode.Open, FileAccess.Read))
 {
    byte[] buffer = new byte[chunkSize];

    int bytesRead = 0;
    long bytesToRead = streamx.Length;

    while (bytesToRead > 0)
    {

        int n = streamx.Read(buffer, 0, chunkSize);

        if (n == 0) break;

        // do work on buffer...
        // uploading chunk ....
        var partRequest = HttpHelpers.InvokeHttpRequestStream
            (
                new Uri(endpointUri + "?partNumber=" + i + "&uploadId=" + UploadId),
                "PUT",
                 partHeaders,
                 buffer
            );  // upload buffer


        bytesRead += n;
        bytesToRead -= n;

    }
    streamx.Dispose();
 }   

缓冲区上传到第 3 方服务。


解决了,有人在评论中发布了更新的代码,但几秒钟后删除了此评论。但有解决办法。我在之后添加了这部分

if (n == 0)

此代码将最后一个块的大小调整为正确的大小

// Let's resize the last incomplete buffer
if (n != buffer.Length)
    Array.Resize(ref buffer, n);

谢谢你们。

我发布完整的工作代码:

int chunkSize = 1024 * 1024 * 5;
using (Stream streamx = new FileStream(file.Path, FileMode.Open, FileAccess.Read))
 {
    byte[] buffer = new byte[chunkSize];

    int bytesRead = 0;
    long bytesToRead = streamx.Length;

    while (bytesToRead > 0)
    {

        int n = streamx.Read(buffer, 0, chunkSize);

        if (n == 0) break;

        // Let's resize the last incomplete buffer
        if (n != buffer.Length)
           Array.Resize(ref buffer, n);

        // do work on buffer...
        // uploading chunk ....
        var partRequest = HttpHelpers.InvokeHttpRequestStream
            (
                new Uri(endpointUri + "?partNumber=" + i + "&uploadId=" + UploadId),
                "PUT",
                 partHeaders,
                 buffer
            );  // upload buffer


        bytesRead += n;
        bytesToRead -= n;

    }

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

C# - 按块上传文件 - 最后一个块大小错误 的相关文章

随机推荐

  • 访问结果集行中的值,其中该值来自 MySQL 函数调用

    因此 由于普通的 PHP 查询返回一个数组 所以从未向我解释过当列值是 MySQL 函数调用的返回值时 如何实际从查询的结果集数组中提取值 countThemes Singlequery SELECT COUNT 1 FROM items
  • 如何正确增加 mongoDB 中的多个日期?

    我不是一个特别擅长 Javascript 的人 我在尝试更新很多内容时遇到了一些麻烦DateMongo 中的对象 看起来 inc尚未实施Date objects https jira mongodb org browse SERVER 31
  • Facebook OAuth api 登录问题

    我对用于登录的 Facebook API 感到困惑 我在网上找不到任何有用的信息 我的 FB 会话委托方法没有被调用 并且访问令牌和过期日期值没有被设置 所以我认为我从未登录过 我恢复到一个非常简单的应用程序 只有两个按钮 登录 注销 和一
  • openFrameworks 与处理

    我已经阅读了很多有关 openFrameworks 和 Processing 的内容 但仍然无法区分 除了一个是 C 中的 另一个是 Java 中的 有人能告诉我哪个具体是做什么用的吗 你是对的 一个是 C 另一个是 Java 这些差异适用
  • Graphql: "message": "ID 不能代表值: 5a72240cf31713598588b70f"

    I use moongose与 一起工作mongodb on nodejs基于应用程序 目前 我尝试实施Grapqhl基于API 我的查询graphql架构如下所示 const schema buildSchema type Query p
  • ng-show 当数组长度为零时

    我是 AngularJS 的初学者 我试图在过滤过程中在 的帮助下显示 未找到标签 ng show JS function simpleController scope scope tags HTML CSS Jquery Bootstra
  • 如何在 bookshelf.js 中获取 SQLSTATE?

    在与 PostgreSQL 或其他 RDBMS 通信时 如何检测 bookshelf js 中发生的错误类型 提示者 这个问题 https stackoverflow com q 43815157 398670 我自己不使用 bookshe
  • 如何在 PHP 中转义引号? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有那个代码 a href Add an Img a 我不知道如何把它放在这里echo code 这会起作用 已测试
  • 如何使用设置了“num_epochs”的“read_batch_examples”创建“input_fn”?

    我有一个基本的input fn可以与下面的 Tensorflow 估计器一起使用 无需设置即可完美运行num epochs范围 获得的张量具有离散形状 传入num epochs与其他任何事物一样None结果是未知的形状 我的问题在于在使用时
  • React-MobX 错误:“decorators”插件需要“decoratorsBeforeExport”选项,其值必须是布尔值

    我收到以下错误 如果您从 Babylon Babel 6 迁移或想要使用旧的装饰器提案 则应该使用 decorators legacy 插件而不是 decorators 包 json babel plugin proposal decora
  • 具有初始容量的 Powershell 哈希表

    我想知道你如何在 powershell 中声明具有初始容量的哈希表 我知道我想要它有多大 但我必须在循环中为其分配值 所以像这样 hashtable 100 杰伦 莫斯特 https stackoverflow com users 4137
  • Win32 与 .Net [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 NET 比 Win32 更好还是相反 两者的优缺点是什么 在什么情况下一个会比另一个更好 Microsoft 是否已发布 Net 作为 Win3
  • 离开同步块时自动notify()/notifyAll() [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Microsoft Visual Studio“安装程序被阻止”

    当我尝试安装 Microsoft Visual Studio 2015 时 出现错误 安装程序被阻止 告诉我 需要重新启动计算机才能继续安装 请重新启动计算机并再次运行安装程序 这样做了之后还是不行 我使用的是 Windows 10 Bui
  • 方法参数的编译时验证

    我在这里发现了一些类似的问题 但不完整的答案没有帮助 而且比澄清任何事情都产生了更多的混乱 所以我尝试给出一个更结构化的问题 并希望得到能够帮助更多用户的答案 我的简化示例 我有一个带有两个不同构造函数的 Java 类 public cla
  • 从目录中读取所有文本文件

    我是 python 新手 我使用以下代码来提取输出作为情感分析 import json from watson developer cloud import ToneAnalyzerV3Beta import urllib request
  • Android Studio - 错误:程序类型已存在

    当我尝试编译代码时 Android Studio 3 0 1 上出现以下错误 Error Program type already present com squareup picasso Action RequestWeakReferen
  • BasicDatasource 和 PoolingDatasource 之间的区别

    org apache commons dbcp BasicDatasource 和 PoolingDataSoure 之间有什么区别 两者都支持连接池吗 何时使用它们中的每一个 基本数据源是 作为javadoc http commons a
  • Mustache 在服务器 (rails) 和客户端 (javascript) 上渲染

    是否有关于在服务器 使用 Rails 和客户端 使用 javascript 上使用 Mustache 最佳实践的文档 hello world mustache Hello planet some other file
  • C# - 按块上传文件 - 最后一个块大小错误

    我正在尝试将大文件分块上传到第三部分服务 但我对最后一块有问题 最后一个块总是小于 5mb 但所有块都包括 最后一个大小相同 5mb 我的代码 int chunkSize 1024 1024 5 using Stream streamx n