AList 一个列表一个基于go语言开发的阿里网盘(aliyundrive)目录列表程序

关于阿里云盘

阿里云网盘aliyundrive.com阿里云网盘app定位是为C端用户提供存储备份及智能相册等服务的网盘产品。阿里云网盘免费储存空间为1000GB,会员可以享受6T的存储空间以及5G体验。该APP类似百度网盘,给用户提供安全存储和智能相册、文件快速传输等服务。阿里网盘普通用户容量为1TB,会员容量为6TB。在大型文件下载速度上,阿里网盘普通用户的下载速度为10mb/s。

Aliyundrive和Teambition区别

aliyundrive是一款纯粹的网盘程序,偏向于个人存储,目前处于公测中,初始空间1T,一般我们都称为阿里云盘,官方网址:传送门

《AList 一个列表一个基于go语言开发的阿里网盘(aliyundrive)目录列表程序》

Teambition是一款协调办公程序(带云存储),偏向于团队办公,目前处于邀请公测中,初始空间2T,一般我们直接就叫Teambition,官方网址:传送门

《AList 一个列表一个基于go语言开发的阿里网盘(aliyundrive)目录列表程序》

关于AList

阿里云盘的目录文件列表程序,基于最佳golanghttp框架gin,前端使用vueant design

项目地址:https://github.com/Xhofe/alist

前端文件地址:https://github.com/Xhofe/alist-web

项目演示:https://alist.nn.ci/

功能简介

目前支持:

  • 自动刷新tokenrefresh_token自动更新,失效时间未知,本人使用过程中没有失效过。
  • 图片,视频,音频预览
  • 目录加密
  • Readme渲染
  • 自定义根目录
  • 文件直链下载

作者计划开发:

  • 排序
  • 文件预览
    • 图片
    • 视频
    • 音频
    • 文档
  • Readme渲染
  • 密码加密
  • 搜索与翻页
  • 文件直链
  • 路径优化
  • 缓存

搭建教程

以下是官方教程,等我搞到邀请码,我会更新一个自己搭建的过程

1、获取refresh_token

为什么不直接使用access_token,因为有效期只有两小时。我们只需要登陆阿里云盘之后,打开开发者工具,切换到Application选项卡,点开Local storage,会有一个token项,点开就可以看到refresh_token

《AList 一个列表一个基于go语言开发的阿里网盘(aliyundrive)目录列表程序》

2、使用gin作为静态资源服务器

    • 前往AList Release下载对应系统的程序,解压得到一个运行文件alist

    darwin/386:对应 Mac x86
    darwin/amd64:对应 Mac amd64
    linux/386:对应 Linux x86
    linux/amd64:对应 Linux amd64
    Windows/386:对应 Windows x86
    Windows/amd64:对应 Windows amd64
    • 前往AList-web下载打包好的前端,解压得到一个dist目录放到alist同级目录下

    • 在同级目录下新建一个配置文件conf.yml,复制以下内容到该文件中:

    info:
      title: AList #网站名称,如果填写,则会替换掉默认的
      site_url: https://alist.nn.ci #网站地址,前后端分离时必须正确填写
      backend_url: https://alist.nn.ci #后端地址,用于文件直链复制,必填!!
      logo: #网站logo,如果填写,则会替换掉默认的
      footer_text: "Xhofe's Blog" #网页底部文字
      footer_url: https://www.nn.ci #网页底部文字链接
      music_img: https://img.oez.cc/2020/12/19/0f8b57866bdb5.gif #预览音乐文件时的图片
    server:
      port: "5244" #程序监听端口
      search: false
      static: dist
    cache:
      enable: true #是否开启缓存
      expiration: 120 #缓存失效时间(单位:分钟)
      cleanup_interval: 240 #清理失效缓存间隔
      refresh_password: password #手动清理缓存密码
    ali_drive:
      api_url: https://api.aliyundrive.com/v2
      root_folder: root #根目录
      refresh_token: #必填!!!
      max_files_count: 3000 #一次性最大文件数量
    • 填入最开始获取到的refresh_token,然后自行修改配置文件中默认的值
    • 现在的情况应该是,目录下有两个文件alistconf.yml和一个文件夹dist,在该文件夹下面执行下面的命令(Linux)
    chmod +x alist
    nohup ./alist > log.log 2>&1 &

    ok,程序已经跑起来了。你可以cat log.log看看有没有报错。或者访问http://ip:5244进行查看。

    自定义静态资源服务器

    与前后端不分离操作步骤差不多,不同的地方在于:

    • 下载AList-web的源码,修改.env.production中的VUE_APP_API_URL为具体部署的后端地址(带后面的/api/),然后yarn && yarn build自行部署
    • conf.yml中的info.site_url填写前端部署的域名,一定要正确填写,否则会报跨域的错误。

    反向代理

    程序默认监听5244端口,要实现https访问,需要使用nginx反向代理,在配置文件中加入

    location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_redirect off;
            proxy_pass http://127.0.0.1:5244;
        }

    界面截图

    《AList 一个列表一个基于go语言开发的阿里网盘(aliyundrive)目录列表程序》

    常见问题

    • 如何给文件夹设置密码?
      在要加密的目录下新建一个名称为.password-要设置的密码的文件或者文件夹就可以了。
    • 如何设置根目录?
      修改配置文件中的ali_drive.root_folder 为想要设置的文件夹的file_id即可。
    • 如何自定义网页底部链接?
      修改配置文件中的footer_textfooter_url为要设置的内容,或者不填则不会显示。
    • 怎么复制文件直链?
      进入文件预览,可以预览的文件复制按钮在右上角,不可预览的复制按钮在正中间(backend_url必须设置正确)。
    • 修改网站icon?
      替换掉dist目录下的favicon.ico即可。
    • 如何开关缓存?
      配置文件中的cache.enable设置为truefalse即可,打开会占用更多的内存,但会大幅优化使用体验,默认打开。这种列表程序我建议可以设置长一点,我自己的直接设置了一天,更新文件的时候也可以手动刷新缓存。
    • 如何刷新缓存?
      程序会自动按照配置文件中的cache.cleanup_interval自动清理过期缓存,如需手动刷新,手动访问后端地址/cache/配置文件中设置的刷新密码,如https://alist.nn.ci/cache/alist

    最新更新

    2021年1月18日由于阿里云盘开启了防盗链,所以可能会失效。

    在html文件头中加入<meta name="referrer" content="never">,目前可以避开防盗链检测,后续未知。来自https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy , 也可以在https://github.com/Xhofe/alist-web/actions?query=workflow%3Abuild 先下载开发版使用。若要使用程序作为图床,需要在img标签中加入referrerPolicy="no-referrer"

    <?xml version="1.0" encoding="UTF-8"?>
    <Error>
      <Code>AccessDenied</Code>
      <Message>You are denied by bucket referer policy.</Message>
      <RequestId>5FFE96B83760853537D449EB</RequestId>
      <HostId>bj29.cn-beijing.data.alicloudccp.com</HostId>
      <BucketName>ccp-bj29-bj-1592982087</BucketName>
    </Error>

    加入禁止referer头已基本解决这个问题,但是不能用于嵌入图床了,除非嵌入网站也加入了禁止referer的头。

    本程序仅供学习研究使用!!!发现任何bug请提issue,部署上遇到问题欢迎添加我的qqi@nn.ci
    更新的时候后端和前端文件都需要替换!!!!以及补上配置文件新的配置项!!!!
    更新的时候后端和前端文件都需要替换!!!!以及补上配置文件新的配置项!!!!
    更新的时候后端和前端文件都需要替换!!!!以及补上配置文件新的配置项!!!!
    调用阿里云盘的预览接口时,获取到一个预览链接和一个access_token,但是不知道在打开的iframe src=预览链接中是如何获取到token的,如果有知道的,还望告诉一下。

    1. Evan说道:

      这个文档不错

    发表回复