【问题标题】:How to run npm 'filestream' example code?如何运行 npm 'filestream' 示例代码?
【发布时间】:2015-05-05 03:10:27
【问题描述】:

我打算在浏览器中使用文件流 api。通过搜索,我找到了这个文件流模块。

https://github.com/DamonOehlman/filestream

作者写了一个示例使用代码。这里是。 (文件名:drag-n-drop.js)

var crel = require('crel');
var detect = require('feature/detect');
var dnd = require('drag-and-drop-files');
var img = crel('img');
var video = crel('video', { autoplay: true });
var FileReadStream = require('filestream/read');
var FileWriteStream = require('filestream/write');

function upload(files) {
  var queue = [].concat(files);

  function sendNext() {
    var writer = new FileWriteStream();
    var next = queue.shift();

    console.log('sending file');
    new FileReadStream(next).pipe(writer).on('file', function(file) {
      console.log('file created: ', file);
      img.src = detect('URL').createObjectURL(file);
      // video.src = detect('URL').createObjectURL(next);

      if (queue.length > 0) {
        sendNext();
      }
    });
  }

  sendNext();
}

dnd(document.body, upload);

document.body.appendChild(crel('style', 'body, html { margin: 0; width: 100%; height: 100% }'));
document.body.appendChild(img);
document.body.appendChild(video);
    1.

在这段代码中...我非常沮丧。 这段代码适用于哪一边?服务器端?还是客户端代码?

如果是服务器端代码,create-server 方法在哪里以及如何读取 document.body.~ 代码?

如果是客户端代码,如何在浏览器中使用'require'方法?

最重要的是,这是可运行的代码吗?

    2.

抛开前面的问题,我尝试运行这段代码。为此,我安装了 'crel'、'feature'、'drag-and-drop-files' 模块,并给出命令:$node drag-n-drop.js

但是,它不起作用,错误信息是这样的。这也让我很沮丧……

[appPath]/node_modules/crel/crel.js:91
        element = crel[isElementString](element) ? element : d.createElement(e
                                                               ^
TypeError: undefined is not a function
    at crel ([appPath]/node_modules/crel/crel.js:91:64)
    at Object.<anonymous> ([appPath]/node_modules/filestream/examples/drag-n-drop.js:4:11)

救命!

更新。 3.

嘿。我可以再问你一个问题吗?我正在使文件流模块适应我的代码,并参考上面的示例代码。在此过程中,我陷入了detect('URL') 代码中。我阅读了 npm 页面中的“功能”模块并仔细阅读了描述,但我仍然无法理解。参考这个页面链接,我不知道为什么作者使用detect('URL'),而不是window.URL。你能解释一下吗?我真的很感激你。

【问题讨论】:

    标签: javascript node.js npm filestream


    【解决方案1】:

    问题一:

    document.body 通常是window 对象的属性,所以这个例子是针对客户端的。或者你可以使用一些模块,例如:jsdom。然后就可以在node中使用window了。

    requireCommonJS 模块规范中的一个函数。您可以使用browserifywebpack 为客户端编译它。

    问题 2:

    如上,你应该使用CommonJS模块构建工具或使用jsdom作为服务器端。

    createElementwindow.document 上的一个方法。

    更新:

    问题 3:

    require('feature/detect');

    feature npm 模块中需要detect.js

    如您所见,它在窗口上测试msomozwebkit 前缀和目标功能。

    在下面链接的底部,有一个Browser compatibility 表。

    https://developer.mozilla.org/en-US/docs/Web/API/Window/URL

    在 Chrome 8.0 中,Opera 15.0 和 Safari 6.0 URLwebkitURL 存在。

    这就是作者这样做的原因。

    【讨论】:

    • 哇...这就是我真正想要的答案!谢谢!
    • 嘿。我可以再问你一个问题吗?我正在使文件流模块适应我的代码,并参考上面的示例代码。在此过程中,我陷入了detect('URL') 代码中。我阅读了 npm 页面中的“功能”模块并仔细阅读了描述,但我仍然无法理解。参考这个页面link,不知道作者为什么用detect('URL'),而不是window.URL。你能解释一下吗?我真的很感激你......
    • 哇......我真的非常感谢你。我在问你一个新问题之前阅读了那个 detect.js 源代码,但当时无法理解。但是经过你的回答,我终于明白了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 2012-03-24
    • 1970-01-01
    • 2012-09-08
    • 2017-01-26
    • 2015-04-23
    • 1970-01-01
    • 2016-02-06
    相关资源
    最近更新 更多