首页 教程,项目

简介

AList是一款阿里云盘的目录文件列表程序,后端基于golang最好的http框架gin,前端使用vueant design。没有专门学过前端,大佬轻喷?

暂时不会有太大的更新了,等阿里云盘正式发布之后再进行相关优化。更新计划:https://www.notion.so/Todo-3fdc2b0deec340e9aa9d86e6f603df72,有好的建议可以评论或在issue中告诉我。

测试了一下,在html文件头中加入<meta name="referrer" content="never">,目前可以避开防盗链检测,后续未知。来自https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy , 若要使用程序作为图床,需要在img标签中加入referrerPolicy="no-referrer"
由于阿里云盘加入了防盗链机制,目前所有不走服务器的预览均已失效,正在寻求解决办法,参考:https://developer.aliyun.com/article/59499 可能的方案:禁止浏览器的referer头,参考https://browsernative.com/http-referer-control-chrome/

<?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>

本程序仅供学习研究使用!!!发现任何bug请提issue,部署上遇到问题欢迎添加我的qqi@nn.ci
更新的时候后端和前端文件都需要替换!!!!以及补上配置文件新的配置项!!!!
更新的时候后端和前端文件都需要替换!!!!以及补上配置文件新的配置项!!!!
更新的时候后端和前端文件都需要替换!!!!以及补上配置文件新的配置项!!!!

项目地址:

更新

2021.1.22

  • 使用阿里云提供的文档预览服务
  • 解决阿里云盘防盗链问题
  • 修复观看视频时返回播放器不销毁的bug
  • 优化了一些代码

2021.1.12

  • 修复安卓微信端左侧被裁切的问题
  • 更新dplayer至最新版本
  • 优化跨域/信任域名,隐藏了一些配置信息
  • 修改meta信息中的语言为中文(不会弹出翻译)
  • 优化版本号比较

2021.1.6

  • 前端了去除了map文件,减小了打包后的文件体积,仅有原来的1/3
  • 增加了文档文件的预览,使用了kkFileView,部署在比较辣鸡的机器上,有能力可以自行搭建
  • 增加了几乎所有文本文件的预览,可自行修改需要预览的后缀
  • 可自定义视频自动播放
  • 修改了移动端(宽度小于600px)时的视频高度
  • 更换了二维码接口,原来的有时候特别慢

2020.12.31

  • 自定义脚本
  • 移动端文件列表优化
  • 二维码分享(只在宽度小于600px的设备上显示)
  • 去除对文件请求的缓存
  • 更新提醒(可在配置文件中关闭)

2020.12.29

  • 引入缓存,大幅优化了响应速度

2020.12.28

  • 自定义页面底部链接
  • 301跳转文件直链
  • 体验优化
  • 隐藏.password密码文件
  • json绑定出错问题

预览

alist预览

如何部署

首先第一步,Star本项目AList(bushi

获取refresh_token

为什么不直接使用access_token,因为有效期只有两小时。

Syc大佬的提醒,获取refresh_token其实没这么麻烦,我们只需要登陆阿里云盘之后,打开开发者工具,切换到Application选项卡,点开Local storage,会有一个token项,点开就可以看到refresh_token了,此处感谢一下Syc大佬。

请输入图片描述

# 过时内容
> 刚想起来忘记去掉自己博客的链接了?,下个版本去掉,或者自定义
> 如果启动时遇到`json:cannot unmarshal number into Go...`的问题,请先尝试使用[开发版本][7]

首先第一步需要获取`refresh_token`,这也是部署过程中最麻烦的一步。我尝试过直接通过login_token去登陆获取,但是会得到这个错误:
> User not authorized to operate on the specified APIs you need access by oauth.
知道如何破解的大佬,欢迎发起pr?或者在issues中告诉我。所以,现在还是先获取`refresh_token`吧。
- 进入阿里云盘登录页,打开开发者工具,并开启Preserve log:
![打开控制台][8]
- 选择一种方式登录,我这里选择的是扫码其他的应该也差不多
- 找到`https://auth.aliyundrive.com/v2/oauth/token_login`这个请求并复制请求中的token
![获取login_token][9]
- 这是我们就需要一个模拟请求插件,这里我使用的是[Postwomen][10],用刚刚复制的数据再次请求这个接口
![token_login][11]
- 然后我们就会得到一个goto的链接(在控制台就是看不到,是真滴奇怪,如果可以看到就没这么麻烦了),链接中有个code参数,我们再次复制它,然后用这个code请求`https://websv.aliyundrive.com/token/get`这个接口,注意这个code只能使用一次,所以这里没有打码了?
![token_get][12]
- 大功告成,终于得到这个`refresh_token`了,保存好它,然后就可以开始接下来的步骤了。

部署

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

  • 前往AList Release下载对应系统的程序,解压得到一个运行文件alist
  • 前往AList-web下载打包好的前端,解压得到一个dist目录放到alist同级目录下
  • 在同级目录下新建一个配置文件conf.yml,复制以下内容到该文件中:
info:
  title: AList #网站名称,如果填写,则会替换掉默认的
  logo: #网站logo,如果填写,则会替换掉默认的
  footer_text: "Xhofe's Blog" #网页底部文字
  footer_url: https://www.nn.ci #网页底部文字链接
  music_img: https://img.xhofe.top/2020/12/19/0f8b57866bdb5.gif #预览音乐文件时的图片
  check_update: true #前端是否显示更新
  script: #自定义js脚本,可以是脚本的链接,也可以直接是脚本内容,如document.querySelector('body').style="background-image:url('https://api.mtyqx.cn/api/random.php');background-attachment:fixed"
  autoplay: true #视频是否自动播放
  preview:
    url: https://view.alist.nn.ci/onlinePreview?url= #extensions中包含的后缀名预览的地址,默认使用了kkFileView,可以自行搭建
    pre_process: [base64,encodeURIComponent] #对地址的处理,支持base64,encodeURIComponent,encodeURI
    extensions: [] #使用上面的url预览的文件后缀
    text: [txt,htm,html,xml,java,properties,sql,js,md,json,conf,ini,vue,php,py,bat,gitignore,yml,go,sh,c,cpp,h,hpp] #要预览的文本文件的后缀,可以自行添加
    max_size: 5242880
server:
  port: "5244" #程序监听端口
  search: false
  static: dist
  site_url: '*' #建议直接填*,若有信任域名要求,可填写其他具体域名,逗号分割
cache:
  enable: true #是否开启缓存
  expiration: 60 #缓存失效时间(单位:分钟)
  cleanup_interval: 120 #清理失效缓存间隔
  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进行查看。

自定义静态资源服务器

与使用gin作为静态资源服务器操作步骤差不多,不同的地方在于:

  • 下载AList-web的源码,修改.env.production中的VUE_APP_API_URL为具体部署的后端地址,然后yarn && yarn build自行部署
  • conf.yml中的server.site_url填写前端部署的域名或者默认为'*',需要正确填写,否则会报错。
  • 建议直接使用gin作为静态资源服务器,使用nginx的话因为路由使用了history模式(没有#号好看一点),所以还需要设置一下nginx:
location / {
  try_files $uri $uri/ /index.html;
}

参考:https://router.vuejs.org/zh/guide/essentials/history-mode.html

反向代理

程序默认监听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;
    }

常见问题解答

  • 如何给文件夹设置密码?
    在要加密的目录下新建一个名称为.password-要设置的密码的文件或者文件夹就可以了。
  • 如何设置根目录?
    修改配置文件中的ali_drive.root_folder 为想要设置的文件夹的file_id即可。
  • 如何自定义网页底部链接?
    修改配置文件中的footer_textfooter_url为要设置的内容,或者不填则不会显示。
  • 怎么复制文件直链?
    进入文件预览,可以预览的文件复制按钮在右上角,不可预览的复制按钮在正中间。
  • 修改网站icon?
    替换掉dist目录下的favicon.ico即可。
  • 为什么新上传的文件不显示/删除了的文件还在?
    为了提高响应速度,对文件的列表是有缓存的,默认开启。
  • 如何开关缓存?
    配置文件中的cache.enable设置为truefalse即可,打开会占用更多的内存,但会大幅优化使用体验,默认打开。经测试下载地址是会失效的,所以请自行设置缓存的时间。下个版本将给文件去掉缓存,只缓存文件夹。更新文件的时候可以手动刷新缓存。
  • 如何刷新缓存?
    程序会自动按照配置文件中的cache.cleanup_interval自动清理过期缓存,如需手动刷新,手动访问后端地址/cache/配置文件中设置的刷新密码,如https://alist.nn.ci/cache/alist
  • 如何更新?
    前端:下载新的打包好的文件,删掉原来的dist文件夹,解压新的dist放入原来的位置即可。后端:pkill alist 停掉老的进程,删除旧的alist,下载新的alist,查看配置文件,补上新的配置项,再次运行即可。
  • 要安装Windows版本?
    自行编译,或者在Github Actions可以找到每次提交的build。

Buy me a coffee

If you are using this project and happy with it or just want to encourage me to continue creating stuff,buy me a coffee by click this 。Thanks:

  • zsbai :请一杯奶茶?
  • 白鹭
  • 不知名
  • 永胜



文章评论

    白鹭 访客SafariMac
    2021-02-21 11:17   回复

    视频播放一段时间后会一直卡在加载中,我是前后端分开了所以导致刷新页面就会404...看长视频体验好像蛮糟糕的⌇●﹏●⌇

      Xhofe 站长SafariMac
      2021-02-21 12:19   回复

      看视频一段时间卡住 可能是因为每次获取的预览链接有有效期 ,之后改成动态链接试试。
      前后端分开刷新的问题需要设置伪静态
      location / {
      try_files $uri $uri/ /index.html;
      }

        白鹭 访客SafariMac
        2021-02-21 14:51   回复

        可是前端是放在GitHub上的emmm...

          Xhofe 站长ChromeMac
          2021-02-22 22:23   回复

          那你还以改一下alist-web的路由模式,改成hash重新build一下。

            白鹭 访客SafariMac
            2021-03-5 21:34   回复

            需要在域名后手动加一个 /#/ 就不会404了,但默认链接是没有#的,不把前端放在GitHub上就默认会有#有点奇怪

              白鹭 访客SafariMac
              2021-03-5 21:37   回复

              不把前段放在GitHub也没有#。。。不好意思,发现评论没办法删了,只能再发一遍

                Xhofe 站长ChromeMac
                2021-03-5 21:53   回复

                应该是有的啊,可以发一下你的地址吗?

                  白鹭 访客SafariMac
                  2021-03-7 23:29   回复

                  邮件给你发过去啦

            白鹭 访客SafariMac
            2021-02-23 22:25   回复

            怎么更改路由模式?方便说一下嘛...

                白鹭 访客SafariMac
                2021-03-5 21:30   回复

                改为hash还是会404

                白鹭 访客SafariMac
                2021-02-24 10:05   回复

                感谢!!

    404 访客ChromeWindows
    2021-02-20 10:11   回复

    404页面如何自动跳转到主页

      Xhofe 站长ChromeWindows
      2021-02-20 11:57   回复

      这个。。我好像没有写

        404 访客ChromeWindows
        2021-02-20 13:02   回复

        有人收藏了我的目录链接 那个目录被删了 访问就出错了。。

    小白 访客SafariMac
    2021-02-17 17:58   回复

    小白问下如果添加统计代码应该放到哪里

      Xhofe 站长ChromeWindows
      2021-02-17 18:32   回复

      写进一个js文件,然后在配置文件中info.script填写这个js的地址,或者直接在dist/index.html中插入到body标签中。

        哈哈哈 访客SafariMac
        2021-02-19 21:41   回复

        作者你好我是小白。请问有没有用宝塔部署的教程!

          Xhofe 站长ChromeWindows
          2021-02-20 11:58   回复

          可以Google一下“宝塔部署alist”,有其他的博主写了相关的教程。

    Pain4Din0 访客ChromeAndroid
    2021-02-15 22:56   回复

    大佬您好,宝塔反代配置文件添加后保存时提示

    nginx: [emerg] "location" directive is not allowed here in /www/server/panel/vhost/nginx/example.com.conf:52
    nginx: configuration file /www/server/nginx/conf/nginx.conf test failed

    该怎么办呢,非常感谢!

      Pain4Din0 访客ChromeAndroid
      2021-02-15 23:38   回复

      啊,不用了,自己解决了嘿嘿

        Xhofe 站长ChromeWindows
        2021-02-15 23:51   回复

        good job?

    小周 访客ChromeWindows
    2021-02-7 18:22   回复

    autoplay: true
    preview:

    url: https://view.alist.nn.ci/onlinePreview?url= #extensions中包含的后缀名预览的地址,默认使用了kkFileView,可以自行搭建 pre_process: [base64,encodeURIComponent] #对地址的处理,支持base64,encodeURIComponent,encodeURI extensions: [] #使用上面的url预览的文件后缀 text: [txt,htm,html,xml,java,properties,sql,js,md,json,conf,ini,vue,php,py,bat,gitignore,yml,go,sh,c,cpp,h,hpp] #要预览的文本文件的后缀,可以自行添加 max_size: 5242880

    老板,想问下,我这里无法预览pdf、work,我改了这里就报错了,麻烦帮忙看下哪里改错了。

      Xhofe 站长ChromeWindows
      2021-02-8 0:01   回复

      预览pdf是不需要修改配置文件中preview部分的啊 只要是最新的版本就可以。work文件应该是没有做预览支持的,没有接触过这种文件。

    mosi 访客BrowserSystem
    2021-02-4 20:28   回复

    移动端下载文件失败,不知道是不是个例,电脑端倒是没问题

      Xhofe 站长ChromeWindows
      2021-02-5 8:30   回复

      ios端safari测试没有问题的啊,其他的不太清楚~

        mosi 访客BrowserSystem
        2021-02-5 12:07   回复

        safari是没问题,部分浏览器如:小米自带浏览器,ios Alook等对阿里云盘直链下载失败,用Teambition直链的时候倒没有出现这个问题,有点迷...不过这是云盘本身的事了,使用时偶然发现的问题

    xray 访客ChromeWindows
    2021-02-3 12:12   回复

    大佬能编译个win能用的么

      Xhofe 站长ChromeWindows
      2021-02-3 15:58   回复

      抱歉 好像只有owner可以下载Artifacts,已经在最新版本release中加入了Windows版本:https://github.com/Xhofe/alist/releases/download/v0.1.6/alist_0.1.6_windows_amd64.zip

      Xhofe 站长ChromeWindows
      2021-02-3 14:36   回复

      文档中有写哦 Github Actions中每次commit有编译windows版本,最新的是https://github.com/Xhofe/alist/actions/runs/503003954,下面有alist_windows_amd64就是Windows版本的。

    heimen 访客ChromeWindows
    2021-02-1 20:05   回复

    请教大佬,宝塔面板上弄得,打开网站后不显示文件列表 提示:The origin is not in the site_url list, please configure it correctly

      Xhofe 站长ChromeWindows
      2021-02-1 22:29   回复

      配置文件server.site_url填 '*' 就可以了。

目录