SaveAs 2.0!

地址:

https://github.com/nighca/saveas

功能:

  1. 当前bucket的list,配置后在popup窗口中直接查看当前bucket中的文件列表(目前最多前100个)
  2. 文件的remove操作,popup窗口中点击文件左侧“x”号即可将该文件从bucket中删除
  3. accessKey与secretKey不会发送给远程服务器,而是一个临时的uploadToken,可以放心使用现有远程服务器 saveas.nighca.me
  4. 添加了对音频、视频、以及链接资源的支持,分别对audio、video、a标签右键即可。(目前在保存链接指向的页面时,若该页面非静态资源,可能会读取不到页面内容)
  5. 添加更多错误/成功的信息反馈

问题:

  1. 为什么需要额外的远程服务器

目前七牛的接口只支持本地资源上传,而chrome的插件,没有读写本地的权限。故无法通过插件直接下载、上传文件,远程服务器拿到资源url后保存到本地临时文件,然后将临时文件上传到七牛服务器。(使用客户端给的uploadToken)

list与remove操作均为插件直接与七牛服务器交互,不经过远程服务器。

笔记:

  1. 如何使用七牛服务

参考 七牛官方文档 及其 nodejs sdk,通过生成token并发送带token的请求实现。

  1. js的base64如何实现

参考网上utf8格式的base64编解码javascript实现,对于中文,将其转为utf8编码字符串后再使用前面的实现即可。utf16转utf8实现:(自互联网)

function utf16to8(str) {
  var out, i, len, c;

  out = "";
  len = str.length;
  for(i = 0; i < len; i++) {     c = str.charCodeAt(i);     if ((c >= 0x0001) && (c  0x07FF) {
      out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
      out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));
      out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
    } else {
      out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));
      out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
    }
  }
  return out;
}

下一步:

  1. 将文件的上传行为移动到插件本地实现,移除对额外服务器的依赖。
  2. 添加更多文件操作
  3. 考虑bucket未发布为静态资源的情况
  4. 添加audio、video、page等资源的缩略图