Javascript GZIP 和 btoa 并用 C# 解压

2023-12-05

我正在开发一个应用程序,其中使用 pako.gzip 压缩大型 JSON 数据,然后使用 btoa 函数将其设为 base64string,以便将数据发布到服务器。在我写的 JavaScript 中:

    var data = JSON.stringify(JSONData);
    var ZippedData = pako.gzip(data, { to: 'string' });
    var base64String = btoa(ZippedData);
    /* post to server*/
    $http.post("URL?base64StringParam=" + base64String").then(function (response) {
        //do stuff
    });

问题是我需要在发布后再次用 C# 代码解压缩数据,以便对其进行其他工作。我在 C# 代码中写道:

    byte[] data = Convert.FromBase64String(base64StringParam);
            string decodedString = System.Text.ASCIIEncoding.ASCII.GetString(data);
            Encoding enc = Encoding.Unicode;
            MemoryStream stream = new MemoryStream(enc.GetBytes(decodedString));
            GZipStream decompress = new GZipStream(stream, CompressionMode.Decompress);
            string plainDef = "";

我在这里收到错误

    using (var sr = new StreamReader(decompress))
            {
                plainDef = sr.ReadToEnd();
            }

解码时发现无效数据。

任何将数据解压缩回 C# 的帮助将不胜感激

EDIT: 总结一下需要做什么 JavaScript 执行以下操作:

纯文本 >> 到 >> gzip 字节 >> 到 >> base64 字符串

我需要 C# 来做相反的事情:

Base64 >> 到 >> 解压缩字节 >> 到 >> 纯文本


假设有以下js:

dataToCommitString = btoa(pako.gzip(dataToCommitString, { to: "string" }));

这是使用 GZip 压缩/解压缩的正确 C# 代码:取自https://stackoverflow.com/a/7343623/679334

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace YourNamespace
{

    public class GZipCompressor : ICompressor
    {
        private static void CopyTo(Stream src, Stream dest)
        {
            byte[] bytes = new byte[4096];

            int cnt;

            while ((cnt = src.Read(bytes, 0, bytes.Length)) != 0)
            {
                dest.Write(bytes, 0, cnt);
            }
        }

        public byte[] Zip(string str)
        {
            var bytes = Encoding.UTF8.GetBytes(str);

            using (var msi = new MemoryStream(bytes))
            using (var mso = new MemoryStream())
            {
                using (var gs = new GZipStream(mso, CompressionMode.Compress))
                {
                    //msi.CopyTo(gs);
                    CopyTo(msi, gs);
                }

                return mso.ToArray();
            }
        }

        public string Unzip(byte[] bytes)
        {
            using (var msi = new MemoryStream(bytes))
            using (var mso = new MemoryStream())
            {
                using (var gs = new GZipStream(msi, CompressionMode.Decompress))
                {
                    //gs.CopyTo(mso);
                    CopyTo(gs, mso);
                }

                return Encoding.UTF8.GetString(mso.ToArray());
            }
        }
    }
}

调用方式如下:

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

Javascript GZIP 和 btoa 并用 C# 解压 的相关文章

  • Delphi 2010 - 从 XML 文档解码 Base64 编码图像

    我正在尝试从应用程序中的 XML 文档解码 base64 编码的 EMF 图像并将其呈现在屏幕上 但是 它似乎从未出现 如果我将 XML 文档中的数据复制 粘贴到 Notepad 中并使用Base64 Decode选项并将文件另存为 emf
  • 十六进制字符串的运行长度编码(包括换行符)

    我正在使用以下方法实现游程长度编码GZipStreamC winforms 应用程序中的类 数据以一系列由换行符分隔的字符串形式提供 如下所示 FFFFFFFF FFFFFEFF FDFFFFFF 00FFFFFF 在压缩之前 我将字符串转
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 在 Java 中使用 Inflater 解压缩 gzip 数据

    我正在尝试使用以下方法解压缩 gzip 数据Inflater 根据文档 如果参数 nowrap 为 true 则 ZLIB 标头和校验和 字段将不会被使用 这提供了与 GZIP 和 PKZIP 使用的压缩格式 注意 使用 nowrap 选项
  • 使用 unrar 库 - 将文件提取到文件流缓冲区中

    我需要的是能够将 rar 文件中的文件提取到流中 我正在创建一个测试用例来了解如何使用解压源文件 http www rarlab com rar unrarsrc 3 9 9 tar gz 我已经搜索和修补了一段时间 但我不知道如何使用该库
  • 如何将 UPX 与 pyinstaller 一起使用?

    如何将 UPX 与 pyinstaller 一起使用 我正在关注文档 我已经下载了UPX 我的文件如下所示 import csv import selenium import pandas print Hello 然后我运行 pyinsta
  • javascript:在 IE9 中获取输入字段(类型=文件)的 base64

    我需要上传一张图片 类似这样的
  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • 在线 CSS 压缩不会消除 IE 黑客攻击

    是否有在线 CSS 压缩器不能消除任何 CSS 浏览器黑客攻击 例如 使用 cleancss com http www cleancss com 我设置的选项没有区别 它总是会删除 display用于 IE 显示内联块 hack a bor
  • Pako 无法压缩 python 中生成的 gzip 文件

    我使用以下代码从 python 生成 gzip 文件 使用 python 3 file gzip open output json gzip wb dataToWrite json dumps data encode utf 8 file
  • 如何使用 PHP 在邮件正文中发送 Base64 图像?

    我正在尝试使用下面的代码使用 PHP 发送一封正文上包含 base64 图像的电子邮件 但该图像永远不会出现 如果我更改为 URL 它可以工作 但它不能与 base64 一起使用 我只在新页面上测试了base64 img src base6
  • Django:如何在开发模式下 gzip 静态文件?

    我的 django contrib staticfiles 设置似乎没问题 因为所有静态文件都按预期提供 然而 例如 尽管我打开了 GZipMiddleware 但 static css 文件不会被压缩 供参考 我的视图 html 实际上确
  • 如何使用 .htaccess 提供预压缩的 gzip/brotli 文件

    我正在尝试为 html js 和 css 提供预压缩的 gzip brotli 文件 用下面的代码 RewriteEngine on Brotli If the web browser accept brotli encoding Rewr
  • 多个base64文档可以存储在一个文件中吗?

    如果文件转换为base64格式可以将它们放入单个文件中吗 有没有办法可以在文件中添加前缀和后缀以允许提取它们 是的 当然可以 它们只是字符串 并且是字符串的子集 选择任何不属于 Base64 编码的分隔符 例如 并连接到您想要的内容
  • 在R中读写csv.gz文件

    有非常similar https stackoverflow com questions 9548630 read gzipped csv directly from a url in r关于这个主题的问题 但非在 R 下非常精确地处理这个
  • 在 Ruby/Sinatra 中解码 Facebook 的签名请求

    由于 Facebook 不赞成使用新的 FBML 我正在寻找一种新方法来创建 显示 选项卡 向粉丝显示一个版本 向非粉丝显示另一个版本的页面选项卡 Facebook 已将数据添加到signed request 中 当用户在应用程序中选择您的
  • 如何在Android中将位图转换为PNG,然后转换为base64?

    正如标题所暗示的 我试图让我的 Android 应用程序的用户从他的设备中选择一个图像 完成 然后我想缩小图像 完成 将图像压缩 转换为 png 并发送它作为 Base64 字符串发送给 API 所以我目前调整图像大小 如下所示 optio
  • 多部分 gzip 文件随机访问(Java 中)

    这可能属于 不太可行 或 不值得付出努力 的范畴 但事实就是如此 我正在尝试随机访问存储在多部分 gzip 文件中的记录 具体来说 我感兴趣的文件被压缩Heretrix http crawler archive org 弧形文件 如果您不熟
  • PHP - 获取base64图像字符串解码并保存为jpg(生成空图像)

    嗨 我实际上是通过 ajax 发送一个 base64 图像字符串到一个 php 脚本 该脚本只是解码字符串并将内容保存为 jpg 文件 但结果是一张空图像 这怎么可能 PHP脚本 uploadedPhotos array photo 1 p
  • 将 UUID 存储为 base64 字符串

    我一直在尝试使用 UUID 作为数据库键 我希望占用尽可能少的字节数 同时仍然保持 UUID 表示形式的可读性 我认为我已经使用 base64 将其减少到 22 个字节 并删除了一些尾随的 这些 对于我的目的来说似乎没有必要存储 这种方法有

随机推荐