请在这个问题上容忍我。
在设置WinJS.xhr响应的响应时,我可以将其设置为‘ms流’或blob。我希望在下载文件时利用流的概念,这样我就不必将整个响应保存在内存中(视频文件可以是巨大的)。
然而,我对'ms-stream‘对象所能做的就是用一个MSStreamReader读取它。这将是很好的,如果我可以告诉它‘消耗1024字节从流,并’循环‘这个,直到流用尽。但是,从读取文档(还没有尝试过,所以如果我错了就纠正我),我似乎只能从流读取一次(例如readAsBlob方法),并且不能设置开始位置。这意味着我需要将整个响应作为blob读入内存。我可以通过将responseType设置为'blob‘来实现这一点。那么,MSStream到底有什么意义呢?
发布于 2015-01-30 03:04:27
不久前,我写了一篇博文,帮助回答关于MSStream和在WinRT中遇到的其他奇怪对象类型以及JavaScript应用程序的主机的问题。见http://www.kraigbrockschmidt.com/2013/03/22/msstream-blob-objects-html5/。是的,您可以使用MSStreamReader来完成某些工作(这是一个同步API),但是您也可以将一个MSStream传递给URL.createObjectURL,以便将它分配给img.src等等。
关于MSStream,以下是我所写的一些内容:“从技术上讲,MSStream是该HTML5文件API的扩展,它提供了与WinRT的互操作。当您从某些MSStream API获得HTML5 (或Blob)对象时(比如下载文件或视频时使用的带有responseType的XmlHttpRequest,或者从画布的msToBlob方法),您可以将这些结果传递给接受IInputStream或IRandomAccessStream作为输入的各种WinRT API。要使用画布示例,可以将来自msToBlob的blob中的msToBlob输入到Windows.Graphics.Imaging中的API中进行转换或转码。使用Windows.Media.Transcoding中的API也可以类似地处理视频流。您还可能只想将流的内容写入StorageFile (不一定在文件系统上),或者将它们复制到缓冲区进行加密。“
所以MSStreamReader并不是最终的目标.MSStream的真正用途是将对象传递到接受上述接口类型的WinRT API中,这将打开许多可能性。
不可否认,这是一个文档不足的领域,这就是为什么我写了我的系列文章,标题为“文件问答”、“流”、“缓冲区”和“Blobs”(最初的帖子在http://www.kraigbrockschmidt.com/2013/03/18/why-doesnt-storagefile-close-method/上)。
发布于 2015-01-29 12:07:05
实际上,msDetachStream
方法允许访问底层流,并且不会中断下载过程。我最初认为任何未下载的数据在调用时都会丢失,因为文档中提到MSStream
对象是关闭的。
https://stackoverflow.com/questions/26842425
复制相似问题