Firefox中文件下载JS

最近在看firefox中关于下载部分的内容,在网上看到这篇文章,虽然现在用不上,但是也觉得很好,分享下。
Firefox插件开发中用JS实现文件下载 进入全屏
line

今天收拾电脑,发现有个以前开发Firefox插件时候写的类库----用Javascript实现文件下载。

放到博客上,给自己沉淀一下,以后还会用得上:

var  Baidufe = window.Baidufe || {};
  
/**
  * 处理网络文件的操作,如下载等
  * @author 赵先烈
  */
Baidufe.FileNetwork =  function (){};
  
/**
  * 获取默认的本地目录
  */
Baidufe.FileNetwork.getDefaultDiretory =  function (){
     var  file = Components.classes[ "@mozilla.org/file/directory_service;1" ]
                 .getService(Components.interfaces.nsIProperties)
                 .get( "Home" ,Components.interfaces.nsIFile);
      
     return  file.path;
};
  
/**
  * 选择一个本地存储的目录
  */
Baidufe.FileNetwork.selectDirectory =  function (){
     const nsIFilePicker = Components.interfaces.nsIFilePicker;
     var  fp = Components.classes[ "@mozilla.org/filepicker;1" ].createInstance(nsIFilePicker);
     fp.init(window, "" ,nsIFilePicker.modeGetFolder);
     var  result = fp.show();
     if (result == nsIFilePicker.returnOK) {
         return  fp.file.path;
     else  {
         return  null ;
     }
};
  
/**
  * 下载文件到本地
  * @param {Object} config   下载参数,格式为:
  * {
  *      uri : "",文件源地址
  *      dir : "" , //本地存储目录
  *      callback : function(file,fileName){}, //下载完成的回调
  *      fileName : ""   //文件名
  * }
  */
Baidufe.FileNetwork.downLoadFile =  function (config){
     var  ios = Components.classes[ "@mozilla.org/network/io-service;1" ].getService(Components.interfaces.nsIIOService);
     var  fileURI = ios.newURI(config.uri,  null null );
     var  channel = ios.newChannelFromURI(fileURI);
     var  observer = {
         onStreamComplete:  function (loader, context, status, length, result){
             var  file = Components.classes[ "@mozilla.org/file/local;1" ].createInstance(Components.interfaces.nsILocalFile);
             file.initWithPath(config.dir);
             if ( !file.exists() || !file.isDirectory() ) {  // if it doesn't exist, create
                 file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0777);
             }
             file.appendRelativePath(config.fileName);
             var  stream = Components.classes[ "@mozilla.org/network/safe-file-output-stream;1" ].createInstance(Components.interfaces.nsIFileOutputStream);
             stream.init(file, -1, -1, 0);
             var  bstream = Components.classes[ "@mozilla.org/binaryoutputstream;1" ].createInstance(Components.interfaces.nsIBinaryOutputStream);
             bstream.setOutputStream(stream);
             bstream.writeByteArray(result, length);
             if  (stream  instanceof  Components.interfaces.nsISafeOutputStream) {
                 stream.finish();
             else  {
                 stream.close();
             }
             if  ( typeof  config.callback ==  "function" ) {
                 config.callback(file, config.fileName);
             }
         }
     };
     var  streamLoader = Components.classes[ "@mozilla.org/network/stream-loader;1" ].createInstance(Components.interfaces.nsIStreamLoader);
     streamLoader.init(observer);
     channel.asyncOpen(streamLoader, channel);
};
原文地址: http://www.baidufe.com/item/05dcff1137bbc053b639.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值