在 Javascript/jQuery 中解码 base64 文件以供下载

2024-03-22

今天我一直在尝试 SQL 二进制对象。我首先将图像存储在表中,发出 AJAX 请求以对图像进行 Base64 编码,然后使用 来显示它。

<img src="data:image/jpeg;base64,' + base64imageReturnedWithAjax + '">')

图像显示良好。

我正在从事的网络项目也需要文件下载(主要是 PDF) - 太棒了,我想,我也将 PDF 存储为 SQL 二进制对象,以相同的方式从服务器收集它,然后以某种方式神奇地解码它可以在另一端下载。

Help!

我首先尝试使用 jQuery base64 解码器(https://github.com/carlo/jquery-base64)对其进行解码:

$.base64.decode(base64fileReturnedWithAjax)

这会在控制台中生成以下错误:

Uncaught Cannot decode base64
_getbyte64
_decode
$.ajax.success
f.Callbacks.o
f.Callbacks.p.fireWith
w
f.support.ajax.f.ajaxTransport.send.d

因此,我的问题是:这是处理文件下载的可行方法吗?如果是这样,怎么办!如果没有,是否有建议的方法允许从 SQL 表下载文件?

亲切的问候, ATfPT


编辑:如果有帮助,这是从数据库/服务器(在 VB.NET 中)检索和发送文件的 Web 方法。 Fileblob 是数据库中的二进制对象。

    'Having connected to the table
    While lrd.Read()
        Dim fileBytes = CType(lrd("Fileblob"), Byte())
        Dim stream = New MemoryStream(fileBytes, 0, fileBytes.Length)
        Dim base64String = Convert.ToBase64String(stream.ToArray())
        document.Add(base64String)
    End While

    Dim serializer As New JavaScriptSerializer()
    Dim returnVal As String = serializer.Serialize(document)

    Return returnVal

内联 base 64 可以很好地处理图像(只要它们很小),因此您可能走在正确的道路上。但是,我认为您没有为 PDF 或大多数其他 blob 走正确的道路(varbinary(max)在 SQL Server 中)。

我这样做的方法是创建一个 HTTP 处理程序(控制器、ASHX、ASPX 等),它设置正确的 HTTP 标头并将从 SQL Server 检索到的数据传递给Response.BinaryWrite()作为字节数组。这是快速、干净且可靠的。它还需要很少的代码。

相比之下,base 64 编码会增加文件大小,并且我不知道有任何可靠的方法来处理客户端的 base 64 字符串并指示浏览器使用正确的应用程序打开它。另外,编码/解码是完全不必要的开销(这对于大文件可能很重要)。

顺便说一句,您还可以对图像使用 HTTP 处理程序。或者,您可以继续使用 Base 64,但在单个 JSON 对象中提供所有图像,这将减少您的请求计数(以更多客户端处理代码为代价)。

HTTP 处理程序示例

我将一些生产代码精简为仅处理 PDF 的部分。这应该只需进行最少的修改即可工作。

首先将通用处理程序添加到 Visual Studio 中的项目中。它将有一个 ASHX 扩展。

public partial class RequestHandler : IHttpHandler
{
    public void ProcessRequest( HttpContext context ) {
        HttpRequest request = context.Request;
        HttpResponse response = context.Response;

        byte[] bytes = null; // get from your database
        string fileName = null; // get from database or put something generic here like "file.pdf"

        response.ContentType = "application/pdf";
        response.AddHeader( "content-disposition", "inline;filename=" + fileName );
        response.AddHeader( "Content-Length", bytes.Length.ToString() );

        response.Buffer = true;
        response.BinaryWrite( bytes );
        response.Flush();
    }

    public bool IsReusable {
        get {
            return true;
        }
    }
}

要调用此代码,您可以简单地链接到它,例如<a href="RequestHandler.ashx?id=abc">Download</a>。您还可以将此代码放入 ASPX 页面中,并触发它以响应按钮单击、页面事件等。

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

在 Javascript/jQuery 中解码 base64 文件以供下载 的相关文章

  • 如何设置视频文件的预览,从输入类型='文件'中选择

    在我的模块之一中 我需要从 input type file 浏览视频 之后我需要在开始上传之前显示选定的视频 我使用基本的 HTML 标签来显示 但它不起作用 这是代码 document on change file multi video
  • 使用两个日期之间的随机日期时间更新每一行

    我有一个专栏叫date created我希望每一行保存一个随机日期 日期距当前时间为 2 天 我正在运行以下查询 但它会更新具有相同随机日期的所有行 我希望每一行都是随机的并且不相同 update table set date create
  • 查找 PostgreSQL 中所有范围集合的所有交集

    我正在寻找一种有效的方法来查找时间戳范围集之间的所有交集 它需要与 PostgreSQL 9 2 配合使用 假设这些范围代表一个人可以见面的时间 每个人都可以有一个或多个空闲时间范围 我想找到all可以召开会议的时间段 即所有人都有空的时间
  • kaminari ajax 分页不更新分页

    我正在使用 kaminari gem 在 Rails3 中实现分页 我一直在关注github上的这段代码https github com amatsuda kaminari example commits ajax https github
  • 创建动态多维对象/数组

    我正在尝试使用 JS 创建一个多维数组 以便我可以通过 Ajax 调用 PHP 来发布一些数据 这可能很简单 但我对 JS 的了解很少关于这个具体的事情 这是带有代码的 JSFiddle http jsfiddle net k5Q3p 我想
  • `attr('checked', false)` 不适用于 IE6

    正如标题所说 我无法获取 attr checked false 在 IE6 上工作 我正在克隆一些 HTML 然后在将新克隆的 HTML 分配给元素之前 我会运行它并取消选中新克隆部分中的所有复选框 这在除 IE 6 之外的所有浏览器中都可
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • 单击导航项锚链接时如何关闭切换菜单

    请看我的FIDDLE http jsfiddle net ayhpp8ax 我有一个带有 响应式 导航菜单 带有指向页面上元素的锚链接 的 1 页网站 当浏览器视口小于特定宽度 在我的情况下为 767px 时 使用此 javascript
  • jQuery,使用 ~ 作为 id 的一部分 - 如何?

    在我的应用程序中 我有一个表单 其中的元素使用特定的约定命名 即它们是路径 其各部分使用 sign 现在我需要通过 id 在 jQuery 中访问其中之一 但失败了 显然 jQuery 将其视为 prev sibling thing 有什么
  • defaultDate 选项与 setDate 方法之间的差异

    我正在尝试使用jQueryUI DatePicker 我必须了解的主要事情之一是在页面加载时设置日期的方式 经过一些研究后 我发现有两种不同的方法可以做到这一点 using defaultDate option using setDate
  • jQuery mobile 中的文本区域高度和宽度?

    我修复了 jQuery mobile 中文本区域元素的高度 并且在纵向中得到了完美的高度和宽度 但在横向中宽度没有放大 谁能帮我 提前致谢 HTML
  • 将 UUID 存储为 base64 字符串

    我一直在尝试使用 UUID 作为数据库键 我希望占用尽可能少的字节数 同时仍然保持 UUID 表示形式的可读性 我认为我已经使用 base64 将其减少到 22 个字节 并删除了一些尾随的 这些 对于我的目的来说似乎没有必要存储 这种方法有
  • 过滤自定义选择器是否大于 jQuery 中的数字[重复]

    这个问题在这里已经有答案了 快给你一份 我查看了 jQuery com 中的选择器 但找不到按大于数字的选择器进行过滤的方法 我想做这个 level gt 4 hide 我的 html 看起来像这样 div Test div 如何使用该语法
  • SQL 删除表并重新创建并保留数据

    在我们最初的设计中 我们搞砸了表中的外键约束 现在表已充满数据 我们无法在不删除表中所有记录的情况下更改它 我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里 然后删除所有记录 更改表并开始将它们添加回来 还有其他 更好 的想法吗
  • 自动建议 php 的 ajax

    我有一个 html 表单 php 脚本和 jquery 我需要一个 ajax 代码来从我的 php 脚本中进行自动建议 以下是代码 表单 html
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 如何在 PostgreSQL 中使用具有多个值的 SQL LIKE 条件?

    有没有更短的方法来查找多个匹配项 SELECT from table WHERE column LIKE AAA OR column LIKE BBB OR column LIKE CCC 这个问题适用于 PostgreSQL 9 1 但如
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • 滚动顶部不符合预期

    Note 由于上次忘记奖励而重新开放赏金 A Woff 大师已经给出答案 我想在用户展开某一行时到达该行 这样当最后一个可见行展开时 用户不必向下滚动即可查看内容 I used example tbody on click td green
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011

随机推荐

  • 在 ruby​​ 进程之间处理大数据对象

    如果使用 Marshal dump 写入文件 我的 Ruby 哈希值将达到大约 10 MB gzip 压缩后大约为 500 KB 在 ruby 中迭代和更改这个哈希值非常快 不到一毫秒 即使复制它也非常快 问题是我需要在 Ruby on R
  • C# 序列化对象并获取字节流

    我有一个对象 一个实例Serializable班级 我想知道如何以字节流的形式获取这个对象 我知道我可以使用BinaryFormatter http msdn microsoft com en us library c5sbs8z9 asp
  • 提高 pandas groupby 的性能

    我有一个用 Python 编写的机器学习应用程序 其中包括数据处理步骤 当我编写它时 我最初在 Pandas DataFrames 上进行数据处理 但是当这导致性能糟糕时 我最终使用普通 Python 重写了它 用 for 循环代替矢量化操
  • 获取错误的毫秒延迟值

    我试图获得 1 毫秒的延迟 但延迟增加了 15 倍 我也尝试过使用 WindowsSleep 1 函数也给了我相同的结果 为什么我没有得到精确的毫秒延迟 它的工作延迟为 1 秒 include
  • 表行的 jQuery 条件选择器

    我有一个表 其中包含数据 td item td td order code td td price td 我正在使用 jQuery 处理该表 它需要查找订单代码 each productList tbody tr function var
  • #pragma 末尾的隐式屏障

    朋友们 我正在尝试学习 openMP 范例 我使用以下代码来理解 omp for pragma int main void int tid int i omp set num threads 5 pragma omp parallel pr
  • SceneKit 在与 Swift 接触后获取纹理坐标

    我想在 3D SceneKit 场景中操作 2D 纹理 因此我使用此代码来获取本地坐标 IBAction func tap sender UITapGestureRecognizer var arr NSArray my3dView hit
  • Javascript - 获取两个日期之间的日期数组

    var range getDates new Date new Date addDays 7 我希望 范围 是一组日期对象 一个代表两个日期之间的每一天 诀窍在于它还应该处理月份和年份的边界 Date prototype addDays f
  • .Net core DI 范围验证,范围与瞬态?

    正在阅读docs https learn microsoft com en us aspnet core fundamentals dependency injection view aspnetcore 2 2 scope validat
  • Mongoose 中的“__v”字段是什么

    我在用着Mongoose版本 3 与MongoDB2 2 版 我注意到一个 v字段已开始出现在我的MongoDB文件 这与版本控制有关吗 它是如何使用的 From here http mongoosejs com docs guide ht
  • 如何将字符串解析为 Haskell 中的函数?

    我想要一个看起来像这样的函数 readFunc String gt Float gt Float 它的操作是这样的 gt readFunc sin pi 2 gt 1 0 gt readFunc 2 3 0 gt 5 0 gt readFu
  • IE 地址栏和源代码中出现奇怪的字符串

    这可能是也可能不是编程问题 但我网站的一两个用户的地址栏中插入了一些奇怪的字符串 地址应该是 http URL 情侣 http URL Couple文件夹 page aspx 但有时同样的事情会变成 http 网址 http URL X 1
  • Python 模块类型输入

    我正在使用动态加载Python模块importlib import module如下 def load module mod name str gt return importlib import module mod name 有人可以告
  • 比较 MAC OSX 中 Bash 中的两个日期

    我是 Bash 新手 提前道歉 Set up 我有一个特定的结束日期end这取决于特定的开始日期s和周期长度p这样 end s p Problem 当且仅当今天的日期早于或等于结束日期时 我想执行命令 即 执行命令iffdate end C
  • 将自定义字符串转换为日期时间格式

    我有一个日期时间数据字符串列表 如下所示 list 2016 08 02T09 20 32 456Z 2016 07 03T09 22 35 129Z 我想将其转换为示例格式 对于第一项 8 2 2016 9 20 32 AM 我试过这个
  • 以编程方式格式化谷歌图表

    使用以下代码如何设置格式以便CurrencyValue1和CurrencyValue2在图表中显示为美元 作为货币值 function drawChart var data new google visualization DataTabl
  • 在 PictureBox 上绘制折线

    我想在以下位置绘制折线 由一条或多条线段组成的连续线 PictureBox 在这里 我们可以通过指定每个线段的端点来创建多条线 并计算每个线段的距离 即每条线的距离 如果您想在图片框上执行此操作 最简单的方法是从PictureBox并提供当
  • 以编程方式从我的 java webapp 读取静态资源 [重复]

    这个问题在这里已经有答案了 目前 我的 war 文件中有一堆图像 如下所示 WAR ROOT WEB INF IMAGES image1 jpg image2 jpg index html 当我通过 servlet jsp etc 生成 h
  • Firebase-perf 与 let 插件冲突

    最近 我们被要求在 Android 应用程序上实现 Firebase 性能监控 但它给我们带来了许多不同的问题 该应用程序曾经工作得很好 但是在添加 firebase perf 后 它可以编译 但在运行时我们发现让插件 https gith
  • 在 Javascript/jQuery 中解码 base64 文件以供下载

    今天我一直在尝试 SQL 二进制对象 我首先将图像存储在表中 发出 AJAX 请求以对图像进行 Base64 编码 然后使用 来显示它 img src 图像显示良好 我正在从事的网络项目也需要文件下载 主要是 PDF 太棒了 我想 我也将