相关疑难解决方法(0)

从"blob"网址检索下载文件

网站的视频标记元素的结构如下:

<video id="playerVideo" width="450px" autoplay="autoplay" height="338px" style="height:100%;width:100%;" class="mejs-rai-e" src="blob:http%3A//www.example.com/d70a74e1-0324-4b9f-bad4-84e3036ad354"></video>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,src元素的url预先配置为blob.是否有像脚本或视频下载器插件的方法来定位文件并下载它?

video html5

18
推荐指数
1
解决办法
2万
查看次数

如何在没有FileReader的情况下从Blob和File对象创建ArrayBuffer和数据URI?

此问题与旧浏览器中如何更新(与Safari 5.1.4相关)有关并受其启发

给定一个<input type="file">具有元件files包含属性File从继承的对象Blob,是有可能创造一个ArrayBuffer和转换ArrayBuffer到一个data URI从一个BlobFile对象,而无需使用FileReader

到目前为止已尝试过方法

  • WebSocket使用.binaryTypeset 创建一个mock "arraybuffer",创建一个MessageEventwith event.dataset to Fileobject; 结果是处理程序的File对象onmessage

  • 设置原型FileArrayBuffer,Uint8Array; 结果是Uncaught TypeError: Method ArrayBuffer.prototype.byteLength called on incompatible receiver #<ArrayBuffer>(),Uncaught TypeError: Method get TypedArray.prototype.byteLength called on incompatible receiver [object Object]()

  • 设置File在 …

javascript blob fileapi typed-arrays data-uri

12
推荐指数
1
解决办法
2806
查看次数

使用javascript下载大数据流(> 1Gb)

我想知道是否有可能将数据从javascript流式传输到浏览器的下载管理器.

使用webrtc,我将数据(从文件> 1Gb)从浏览器传输到另一个.在接收器端,我将所有这些数据存储到内存中(作为arraybuffer ...所以数据基本上仍然是块),我希望用户能够下载它.

问题: Blob对象的最大大小约为600 Mb(取决于浏览器),因此我无法从块中重新创建文件.有没有办法流式传输这些块,以便浏览器直接下载它们?

javascript blob webrtc

12
推荐指数
2
解决办法
1万
查看次数

Chrome内存问题 - 文件API + AngularJS

我有一个需要将大文件上传到Azure BLOB存储的Web应用程序.我的解决方案使用HTML5 File API切片成块,然后将块作为blob块放置,块的ID存储在数组中,然后块作为blob提交.

该解决方案在IE中运行良好.在64位Chrome上,我已经成功上传了4Gb文件但是看到了非常大的内存使用量(2Gb +).在32位Chrome上,特定的镀铬工艺将达到约500-550Mb然后崩溃.

我看不到任何明显的内存泄漏或我可以改变以帮助垃圾收集的事情.我将块ID存储在一个数组中,所以显然会有一些内存蠕变,但这不应该很大.这几乎就像File API将整个文件保存在内存中一样.

它是作为一个从控制器调用的Angular服务编写的,我认为只是服务代码是相关的:

(function() {
    'use strict';

    angular
    .module('app.core')
    .factory('blobUploadService',
    [
        '$http', 'stringUtilities',
        blobUploadService
    ]);

function blobUploadService($http, stringUtilities) {

    var defaultBlockSize = 1024 * 1024; // Default to 1024KB
    var stopWatch = {};
    var state = {};

    var initializeState = function(config) {
        var blockSize = defaultBlockSize;
        if (config.blockSize) blockSize = config.blockSize;

        var maxBlockSize = blockSize;
        var numberOfBlocks = 1;

        var file = config.file;

        var fileSize = file.size;
        if (fileSize < blockSize) {
            maxBlockSize = …
Run Code Online (Sandbox Code Playgroud)

javascript html5 google-chrome azure fileapi

11
推荐指数
1
解决办法
1030
查看次数

为使用 Blob 的 &lt;embed&gt; 或 &lt;iframe&gt; 设置默认另存为名称

我正在使用 PDFKit(无节点)在浏览器中生成 PDF,并通过 src 属性将其显示为 iframe 或嵌入标签。生成的 blob URL 是某种 UUID。所以整个页面看起来像:

<embed src="blob:http://localhost/eeaabb..."/>
Run Code Online (Sandbox Code Playgroud)

PDF 看起来不错,但是当我在 Chrome 中单击下载链接时,默认文件名是 UUID。在 FireFox 中,它只是“document.pdf”。

如果这是服务器生成的 PDF,我将使用 Content-Disposition 和/或操作 URL,因此它的最后一部分是我想要的名称,但这对于客户端生成的对象似乎是不可能的。

我尝试过的事情:

  • 通过元数据设置 PDF 标题。这有效但不影响文件名。
  • 操作嵌入标签标题属性。好像什么都没做
  • 更改页面标题。不影响文件。
  • 尝试在数据 url 中附加一些内容。只是阻止显示 PDF。
  • 通过 POST 上传 PDF,然后通过我可以控制 URL 的页面下载它。可以工作,但生成客户端 PDF 只需要将其上传到服务器似乎很疯狂。

有没有办法解决这个问题,以便我可以控制默认/建议的文件名?

html javascript pdf node-pdfkit

6
推荐指数
1
解决办法
1万
查看次数

如果 Blob URL 是不可变的,Media Source Extension API 如何使用它们来流式传输视频?

让我们从一个例子开始:

  1. 您访问 youtube.com,该网站在某些设备上使用带有 HTML5 的媒体源扩展 (MSE)。
  2. MSE 使用 blob URL 注入 <video> 标记。它看起来像这样:blob: https: //www.youtube.com/blahblahblah
  3. 在流式传输整个视频的过程中,您的浏览器会进行多次网络调用来下载各个视频块,并将它们附加到 MSE 的 SourceBuffer
  4. 因此,Meda Source 对象作为一个整体在整个视频流中更新
  5. 但是,最初附加到 <video> 元素(假设表示媒体源对象)的 blob URL 保持不变。

对我来说,这似乎没有多大意义。Blob URL 应该代表永远不会改变的不可变数据块。但 MSE 似乎能够使它们代表一个可变的内存缓冲区。

这在幕后是如何工作的?如果我们还想让 blob URL 代表一些可变的内存缓冲区,我们如何使用 javascript 自己做到这一点?

html javascript browser media-source

5
推荐指数
1
解决办法
2345
查看次数