稳定
使用 Laravel 框架开发,庞大的生态系统和用户群体,为程序提供了健壮稳固的底层基础。
diff --git a/404.html b/404.html new file mode 100644 index 00000000..5ec9516e --- /dev/null +++ b/404.html @@ -0,0 +1,22 @@ + + +
+ + +合理的增加缓存可以极大的提高程序访问速度,提高程序运行效率,兰空图床使用 Laravel 框架开发,它提供了一些很方便的缓存命令。
注意,所有缓存命令都必须在程序安装完成且是生产环境下运行。
后台管理使用了 Filament,而 Filament 使用了 Blade Icons 包,它在缓存时有更好的性能。
php artisan icons:cache
php artisan optimize
注意
.env
文件将不会被加载,所有对 .env
变量的 env 函数调用都将返回 nullphp artisan optimize:clear
清除缓存合理的增加缓存可以极大的提高程序访问速度,提高程序运行效率,兰空图床使用 Laravel 框架开发,它提供了一些很方便的缓存命令。
注意,所有缓存命令都必须在程序安装完成且是生产环境下运行。
后台管理使用了 Filament,而 Filament 使用了 Blade Icons 包,它在缓存时有更好的性能。
php artisan icons:cache
php artisan optimize
注意
.env
文件将不会被加载,所有对 .env
变量的 env 函数调用都将返回 nullphp artisan optimize:clear
清除缓存兰空图床为了实现最小化安装,简化安装步骤,默认是使用混合部署的方式,即前后端分离架构,前端使用 laravel 的模板引擎渲染前端。具体解释请查阅主题章节。
如果您希望将前后端分开独立部署,操作起来非常简单。
打开 web/package.json
文件,修改构建脚本:
...
+
+"scripts": {
+ "dev": "vite",
+ "build": "run-p type-check \\"build-only {@}\\" -- && run-s pre-build post-build",
+ "build": "run-p type-check \\"build-only {@}\\"",
+ "preview": "vite preview",
+ "build-only": "vite build",
+ "type-check": "vue-tsc --build --force",
+ "pre-build": "shx rm -rf ../public/themes/default",
+ "post-build": "shx mv dist/index.html ../resources/views/themes/default/index.blade.php && shx mv dist/config.json ../resources/views/themes/default/config.json && shx cp -r dist/* ../public/ && shx rm -rf dist",
+ "openapi-ts": "openapi-ts"
+},
+
+...
修改环境变量 web/.env.production
文件:
VITE_APP_TITLE=Lsky Pro+ # 站点标题
+VITE_APP_API_URL=http://127.0.0.1:8000/api/v2 # 接口地址
然后执行构建命令:
yarn build
打包后的静态文件默认在 web/dist
目录,我们只需要在目标服务器创建一个站点,将此目录中的所有文件上传至站点中即可。
INFO
如果您希望原站点中的前端禁止访问,您可以注释掉目标文件 routes/web.php
的第 12 行。
<?php
+
+// ...
+
+Route::any('/{any}', SendThemeController::class)->where('any', '.*');
+// Route::any('/{any}', SendThemeController::class)->where('any', '.*');
注释以后访问站点域名,将显示 404 状态。届时需要使用独立部署的前端站点域名您的图床网站首页。
兰空图床为了实现最小化安装,简化安装步骤,默认是使用混合部署的方式,即前后端分离架构,前端使用 laravel 的模板引擎渲染前端。具体解释请查阅主题章节。
如果您希望将前后端分开独立部署,操作起来非常简单。
打开 web/package.json
文件,修改构建脚本:
...
+
+"scripts": {
+ "dev": "vite",
+ "build": "run-p type-check \\"build-only {@}\\" -- && run-s pre-build post-build",
+ "build": "run-p type-check \\"build-only {@}\\"",
+ "preview": "vite preview",
+ "build-only": "vite build",
+ "type-check": "vue-tsc --build --force",
+ "pre-build": "shx rm -rf ../public/themes/default",
+ "post-build": "shx mv dist/index.html ../resources/views/themes/default/index.blade.php && shx mv dist/config.json ../resources/views/themes/default/config.json && shx cp -r dist/* ../public/ && shx rm -rf dist",
+ "openapi-ts": "openapi-ts"
+},
+
+...
修改环境变量 web/.env.production
文件:
VITE_APP_TITLE=Lsky Pro+ # 站点标题
+VITE_APP_API_URL=http://127.0.0.1:8000/api/v2 # 接口地址
然后执行构建命令:
yarn build
打包后的静态文件默认在 web/dist
目录,我们只需要在目标服务器创建一个站点,将此目录中的所有文件上传至站点中即可。
INFO
如果您希望原站点中的前端禁止访问,您可以注释掉目标文件 routes/web.php
的第 12 行。
<?php
+
+// ...
+
+Route::any('/{any}', SendThemeController::class)->where('any', '.*');
+// Route::any('/{any}', SendThemeController::class)->where('any', '.*');
注释以后访问站点域名,将显示 404 状态。届时需要使用独立部署的前端站点域名您的图床网站首页。
兰空图床 2.x 是一个全新的前后端分离架构,后端使用 Laravel,前端使用 Vue3、Pinia、Native UI。
相较于以前的版本,现在的版本使用了 Native UI 作为前端框架,使得样式一致、更统一。除了后台管理,我们可以自定义前端的样式,甚至可以直接替换整个前端。
若想要修改前端样式,您需要熟悉以下前端技术:
在我们的程序根目录,存在一个 web
文件夹,此文件夹是完整的前端工程文件,在执行构建后会触发打包脚本。
脚本的主要目的是(您也可以不使用脚本,全程手动按以下步骤操作):
index.html
移动至根目录 resources/views/themes/default
文件夹中,并重命名为 index.blade.php
。public/themes/default
文件夹。(注意,前端工程请求静态资源的路径需要修改,例如 vite 中可以配置 build.assetsDir
来修改静态资源目录)resources/views/themes/default
创建主题配置文件 config.json
,文件内容类似:{
+ "name": "默认主题",
+ "version": "2.0",
+ "author": "Wisp X",
+ "url": "https://github.com/0xxb"
+}
完成上述操作后,主题会以模板引擎渲染的方式实现混合部署,首次加载通过 laravel 的 Blade 模板 渲染页面,然后后续请求都由前端工程以 SPA 单页应用 的方式显示页面交互。
其中 default
文件夹表示的是默认主题的唯一标识,如果您想开发自己的主题,您也需要为您的主题设置一个唯一标识。
要切换主题,可以前往后台管理->系统设置->网站设置中切换。
要修改主题,您需要在您的电脑上安装 Nodejs。
使用终端进入根目录中的 web
文件夹,运行调试命令启动开发服务器:
yarn dev
npm run dev
然后就可以愉快的修改样式了。
您还可以修改环境变量文件 web/.env
中的 VITE_APP_API_URL
参数值来调整接口地址。
默认主题内置了打包脚本,在您执行 build
命令后脚本会自动处理需要移动、重命名的文件,不需要额外操作。
只需在您修改了前端工程文件后,执行构建命令:
yarn build
npm run build
构建后不要忘记将以下目录重新上传到您的服务器站点中:
public/themes
resources/views/themes
同样的,无论您是使用 React 或 Vue,只需理解 主题是如何运作的,按步骤将打包后的静态文件、文件夹复制到指定位置即可。
`,25)]))}const u=a(l,[["render",r]]);export{k as __pageData,u as default}; diff --git a/assets/advanced_theme.md.BadxmqDY.lean.js b/assets/advanced_theme.md.BadxmqDY.lean.js new file mode 100644 index 00000000..65f7f138 --- /dev/null +++ b/assets/advanced_theme.md.BadxmqDY.lean.js @@ -0,0 +1,6 @@ +import{_ as a,c as s,a2 as i,o as t}from"./chunks/framework.DPuwY6B9.js";const k=JSON.parse('{"title":"主题","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/theme.md","filePath":"zh/advanced/theme.md","lastUpdated":1734677202000}'),l={name:"advanced/theme.md"};function r(n,e,p,h,o,d){return t(),s("div",null,e[0]||(e[0]=[i(`兰空图床 2.x 是一个全新的前后端分离架构,后端使用 Laravel,前端使用 Vue3、Pinia、Native UI。
相较于以前的版本,现在的版本使用了 Native UI 作为前端框架,使得样式一致、更统一。除了后台管理,我们可以自定义前端的样式,甚至可以直接替换整个前端。
若想要修改前端样式,您需要熟悉以下前端技术:
在我们的程序根目录,存在一个 web
文件夹,此文件夹是完整的前端工程文件,在执行构建后会触发打包脚本。
脚本的主要目的是(您也可以不使用脚本,全程手动按以下步骤操作):
index.html
移动至根目录 resources/views/themes/default
文件夹中,并重命名为 index.blade.php
。public/themes/default
文件夹。(注意,前端工程请求静态资源的路径需要修改,例如 vite 中可以配置 build.assetsDir
来修改静态资源目录)resources/views/themes/default
创建主题配置文件 config.json
,文件内容类似:{
+ "name": "默认主题",
+ "version": "2.0",
+ "author": "Wisp X",
+ "url": "https://github.com/0xxb"
+}
完成上述操作后,主题会以模板引擎渲染的方式实现混合部署,首次加载通过 laravel 的 Blade 模板 渲染页面,然后后续请求都由前端工程以 SPA 单页应用 的方式显示页面交互。
其中 default
文件夹表示的是默认主题的唯一标识,如果您想开发自己的主题,您也需要为您的主题设置一个唯一标识。
要切换主题,可以前往后台管理->系统设置->网站设置中切换。
要修改主题,您需要在您的电脑上安装 Nodejs。
使用终端进入根目录中的 web
文件夹,运行调试命令启动开发服务器:
yarn dev
npm run dev
然后就可以愉快的修改样式了。
您还可以修改环境变量文件 web/.env
中的 VITE_APP_API_URL
参数值来调整接口地址。
默认主题内置了打包脚本,在您执行 build
命令后脚本会自动处理需要移动、重命名的文件,不需要额外操作。
只需在您修改了前端工程文件后,执行构建命令:
yarn build
npm run build
构建后不要忘记将以下目录重新上传到您的服务器站点中:
public/themes
resources/views/themes
同样的,无论您是使用 React 或 Vue,只需理解 主题是如何运作的,按步骤将打包后的静态文件、文件夹复制到指定位置即可。
`,25)]))}const u=a(l,[["render",r]]);export{k as __pageData,u as default}; diff --git a/assets/app.DFRJYoVQ.js b/assets/app.DFRJYoVQ.js new file mode 100644 index 00000000..b85f31c4 --- /dev/null +++ b/assets/app.DFRJYoVQ.js @@ -0,0 +1 @@ +import{R as i}from"./chunks/theme.Db2-LkiB.js";import{R as o,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,ac as v,d as P,u as R,v as w,s as y,ad as C,ae as b,af as E,ag as S}from"./chunks/framework.DPuwY6B9.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=v(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; diff --git a/assets/archive_enterprise_v1_features_basic_coupon.md.CWRqEvZv.js b/assets/archive_enterprise_v1_features_basic_coupon.md.CWRqEvZv.js new file mode 100644 index 00000000..7c1b0325 --- /dev/null +++ b/assets/archive_enterprise_v1_features_basic_coupon.md.CWRqEvZv.js @@ -0,0 +1 @@ +import{_ as s,c as a,j as e,o as r}from"./chunks/framework.DPuwY6B9.js";const f=JSON.parse('{"title":"优惠券管理","description":"企业版优惠券功能介绍","frontmatter":{"title":"优惠券管理","description":"企业版优惠券功能介绍"},"headers":[],"relativePath":"archive/enterprise/v1/features/basic/coupon.md","filePath":"zh/archive/enterprise/v1/features/basic/coupon.md","lastUpdated":1731937013000}'),l={name:"archive/enterprise/v1/features/basic/coupon.md"};function o(n,t,c,i,p,u){return r(),a("div",null,t[0]||(t[0]=[e("div",{class:"tip custom-block"},[e("p",{class:"custom-block-title"},"提示"),e("p",null,"如果订单金额为 0 时,点击支付则会直接支付成功,也就是说您可以批量生成单次劵以后,可以利用第三方发卡平台发放优惠券的方式实现套餐售卖。")],-1),e("p",null,"「优惠券」功能在兰空图床中被分为单次劵和多次劵,单次劵只能使用一次,多次劵可以被重复使用。并且提供了复制功能,即复制当前劵除了劵码的数据,批量创建,做到类似于发卡的功能。",-1),e("p",null,"每个劵均可以设置类型:直接抵扣或百分比抵扣。",-1),e("ul",null,[e("li",null,"「直接抵扣」(假设抵扣金额设置为 10 元,订单应付金额为 100 元,使用此劵后支付金额为 100-10=90 元)"),e("li",null,"「百分比抵扣」(假设折扣率为 90,表示打九折,订单应付金额为 100 元,使用此劵后支付金额为 100*90/100=90 元)")],-1)]))}const m=s(l,[["render",o]]);export{f as __pageData,m as default}; diff --git a/assets/archive_enterprise_v1_features_basic_coupon.md.CWRqEvZv.lean.js b/assets/archive_enterprise_v1_features_basic_coupon.md.CWRqEvZv.lean.js new file mode 100644 index 00000000..7c1b0325 --- /dev/null +++ b/assets/archive_enterprise_v1_features_basic_coupon.md.CWRqEvZv.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,j as e,o as r}from"./chunks/framework.DPuwY6B9.js";const f=JSON.parse('{"title":"优惠券管理","description":"企业版优惠券功能介绍","frontmatter":{"title":"优惠券管理","description":"企业版优惠券功能介绍"},"headers":[],"relativePath":"archive/enterprise/v1/features/basic/coupon.md","filePath":"zh/archive/enterprise/v1/features/basic/coupon.md","lastUpdated":1731937013000}'),l={name:"archive/enterprise/v1/features/basic/coupon.md"};function o(n,t,c,i,p,u){return r(),a("div",null,t[0]||(t[0]=[e("div",{class:"tip custom-block"},[e("p",{class:"custom-block-title"},"提示"),e("p",null,"如果订单金额为 0 时,点击支付则会直接支付成功,也就是说您可以批量生成单次劵以后,可以利用第三方发卡平台发放优惠券的方式实现套餐售卖。")],-1),e("p",null,"「优惠券」功能在兰空图床中被分为单次劵和多次劵,单次劵只能使用一次,多次劵可以被重复使用。并且提供了复制功能,即复制当前劵除了劵码的数据,批量创建,做到类似于发卡的功能。",-1),e("p",null,"每个劵均可以设置类型:直接抵扣或百分比抵扣。",-1),e("ul",null,[e("li",null,"「直接抵扣」(假设抵扣金额设置为 10 元,订单应付金额为 100 元,使用此劵后支付金额为 100-10=90 元)"),e("li",null,"「百分比抵扣」(假设折扣率为 90,表示打九折,订单应付金额为 100 元,使用此劵后支付金额为 100*90/100=90 元)")],-1)]))}const m=s(l,[["render",o]]);export{f as __pageData,m as default}; diff --git a/assets/archive_enterprise_v1_features_basic_page.md.vFB4gCb0.js b/assets/archive_enterprise_v1_features_basic_page.md.vFB4gCb0.js new file mode 100644 index 00000000..dcdffb6a --- /dev/null +++ b/assets/archive_enterprise_v1_features_basic_page.md.vFB4gCb0.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as l,o as r}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"页面管理","description":"企业版自定义页面功能介绍","frontmatter":{"title":"页面管理","description":"企业版自定义页面功能介绍"},"headers":[],"relativePath":"archive/enterprise/v1/features/basic/page.md","filePath":"zh/archive/enterprise/v1/features/basic/page.md","lastUpdated":1731937013000}'),c={name:"archive/enterprise/v1/features/basic/page.md"};function s(i,e,o,p,d,n){return r(),t("div",null,e[0]||(e[0]=[l('TIP
程序安装完成后会自带两个默认页面,分别为 page/api-docs.html
、page/contact.html
。
WARNING
/resources/views/pages
, 创建好页面后你可以直接找到该文件夹中的文件直接进行编辑。npm run watch
开发模式,实时编译npm run prod
编译并压缩TIP
程序安装完成后会自带两个默认页面,分别为 page/api-docs.html
、page/contact.html
。
WARNING
/resources/views/pages
, 创建好页面后你可以直接找到该文件夹中的文件直接进行编辑。npm run watch
开发模式,实时编译npm run prod
编译并压缩注意
兰空图床仅支持官方支付方式,支付宝需要提供资质申请「电脑网站支付」能力,不支持当面付。
前往开发者中心,点击 https://open.alipay.com/develop/pm/create 创建网页移动应用。
创建好应用后进入应用,点击「产品绑定」,选择「支付」-> 「电脑网站支付」
绑定完成后,如果显示「产品开通状态」显示为「未开通」则需要根据支付宝的指引去开通,否则支付功能无法使用。
加签方式选择第二项「证书」
上传成功后,将证书全部下载。
打开兰空图床后台,进入「系统设置」->「支付配置」,选择支付宝,复制支付异步回调地址。
然后将其填入支付宝的授权回调地址中。
将刚刚下载的三份证书文件上传至兰空图床程序中的 storage/app/certs
目录下,然后打开刚刚由证书生成软件生成的证书目录,复制 应用私钥RSA2048-敏感数据,请妥善保管.txt
文件内容,将其填写到兰空图床后台配置中。
至此支付宝电脑网站支付则配置完成了。
',29)]))}const $=e(g,[["render",u]]);export{P as __pageData,$ as default}; diff --git a/assets/archive_enterprise_v1_features_basic_payment_alipay.md.CG9Os7RV.lean.js b/assets/archive_enterprise_v1_features_basic_payment_alipay.md.CG9Os7RV.lean.js new file mode 100644 index 00000000..504358d6 --- /dev/null +++ b/assets/archive_enterprise_v1_features_basic_payment_alipay.md.CG9Os7RV.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as r,o as p}from"./chunks/framework.DPuwY6B9.js";const i="/archive/payment/alipay/1.png",o="/archive/payment/alipay/2.png",n="/archive/payment/alipay/3.png",s="/archive/payment/alipay/4.png",c="/archive/payment/alipay/5.png",l="/archive/payment/alipay/6.png",h="/archive/payment/alipay/7.png",m="/archive/payment/alipay/8.png",d="/archive/payment/alipay/9.png",_="/archive/payment/alipay/10.png",y="/archive/payment/alipay/11.png",P=JSON.parse('{"title":"支付宝","description":"支付宝网站支付功能","frontmatter":{"title":"支付宝","description":"支付宝网站支付功能"},"headers":[],"relativePath":"archive/enterprise/v1/features/basic/payment/alipay.md","filePath":"zh/archive/enterprise/v1/features/basic/payment/alipay.md","lastUpdated":1731937690000}'),g={name:"archive/enterprise/v1/features/basic/payment/alipay.md"};function u(b,a,v,f,q,k){return p(),t("div",null,a[0]||(a[0]=[r('注意
兰空图床仅支持官方支付方式,支付宝需要提供资质申请「电脑网站支付」能力,不支持当面付。
前往开发者中心,点击 https://open.alipay.com/develop/pm/create 创建网页移动应用。
创建好应用后进入应用,点击「产品绑定」,选择「支付」-> 「电脑网站支付」
绑定完成后,如果显示「产品开通状态」显示为「未开通」则需要根据支付宝的指引去开通,否则支付功能无法使用。
加签方式选择第二项「证书」
上传成功后,将证书全部下载。
打开兰空图床后台,进入「系统设置」->「支付配置」,选择支付宝,复制支付异步回调地址。
然后将其填入支付宝的授权回调地址中。
将刚刚下载的三份证书文件上传至兰空图床程序中的 storage/app/certs
目录下,然后打开刚刚由证书生成软件生成的证书目录,复制 应用私钥RSA2048-敏感数据,请妥善保管.txt
文件内容,将其填写到兰空图床后台配置中。
至此支付宝电脑网站支付则配置完成了。
',29)]))}const $=e(g,[["render",u]]);export{P as __pageData,$ as default}; diff --git a/assets/archive_enterprise_v1_features_basic_payment_paypal.md.CBpbT5Q0.js b/assets/archive_enterprise_v1_features_basic_payment_paypal.md.CBpbT5Q0.js new file mode 100644 index 00000000..4e1d8562 --- /dev/null +++ b/assets/archive_enterprise_v1_features_basic_payment_paypal.md.CBpbT5Q0.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as p,o as r}from"./chunks/framework.DPuwY6B9.js";const i="/archive/payment/paypal/1.png",s="/archive/payment/paypal/2.png",n="/archive/payment/paypal/3.png",f=JSON.parse('{"title":"PayPal","description":"PayPal 支付功能","frontmatter":{"title":"PayPal","description":"PayPal 支付功能"},"headers":[],"relativePath":"archive/enterprise/v1/features/basic/payment/paypal.md","filePath":"zh/archive/enterprise/v1/features/basic/payment/paypal.md","lastUpdated":1731937013000}'),c={name:"archive/enterprise/v1/features/basic/payment/paypal.md"};function l(o,a,m,d,h,y){return r(),t("div",null,a[0]||(a[0]=[p('进入开发者中心,点击 Create App 来创建一个应用,注意,文档图片中处于沙盒环境。
Type 选择 Merchant
点击 Create App 确认创建。
将应用的 Client ID 和 Secret key 填入兰空图片后台支付配置中既可。
',9)]))}const u=e(c,[["render",l]]);export{f as __pageData,u as default}; diff --git a/assets/archive_enterprise_v1_features_basic_payment_paypal.md.CBpbT5Q0.lean.js b/assets/archive_enterprise_v1_features_basic_payment_paypal.md.CBpbT5Q0.lean.js new file mode 100644 index 00000000..4e1d8562 --- /dev/null +++ b/assets/archive_enterprise_v1_features_basic_payment_paypal.md.CBpbT5Q0.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as p,o as r}from"./chunks/framework.DPuwY6B9.js";const i="/archive/payment/paypal/1.png",s="/archive/payment/paypal/2.png",n="/archive/payment/paypal/3.png",f=JSON.parse('{"title":"PayPal","description":"PayPal 支付功能","frontmatter":{"title":"PayPal","description":"PayPal 支付功能"},"headers":[],"relativePath":"archive/enterprise/v1/features/basic/payment/paypal.md","filePath":"zh/archive/enterprise/v1/features/basic/payment/paypal.md","lastUpdated":1731937013000}'),c={name:"archive/enterprise/v1/features/basic/payment/paypal.md"};function l(o,a,m,d,h,y){return r(),t("div",null,a[0]||(a[0]=[p('进入开发者中心,点击 Create App 来创建一个应用,注意,文档图片中处于沙盒环境。
Type 选择 Merchant
点击 Create App 确认创建。
将应用的 Client ID 和 Secret key 填入兰空图片后台支付配置中既可。
',9)]))}const u=e(c,[["render",l]]);export{f as __pageData,u as default}; diff --git a/assets/archive_enterprise_v1_features_basic_payment_wechat.md.Bnf-Nihb.js b/assets/archive_enterprise_v1_features_basic_payment_wechat.md.Bnf-Nihb.js new file mode 100644 index 00000000..9ee5b33f --- /dev/null +++ b/assets/archive_enterprise_v1_features_basic_payment_wechat.md.Bnf-Nihb.js @@ -0,0 +1 @@ +import{_ as a,c as s,j as e,o as r}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"微信","description":"微信支付功能","frontmatter":{"title":"微信","description":"微信支付功能"},"headers":[],"relativePath":"archive/enterprise/v1/features/basic/payment/wechat.md","filePath":"zh/archive/enterprise/v1/features/basic/payment/wechat.md","lastUpdated":1731937013000}'),c={name:"archive/enterprise/v1/features/basic/payment/wechat.md"};function n(i,t,o,p,l,d){return r(),s("div",null,t[0]||(t[0]=[e("div",{class:"warning custom-block"},[e("p",{class:"custom-block-title"},"注意"),e("p",null,"需要开通 Native 支付功能。")],-1),e("p",null,"待完善...",-1)]))}const f=a(c,[["render",n]]);export{u as __pageData,f as default}; diff --git a/assets/archive_enterprise_v1_features_basic_payment_wechat.md.Bnf-Nihb.lean.js b/assets/archive_enterprise_v1_features_basic_payment_wechat.md.Bnf-Nihb.lean.js new file mode 100644 index 00000000..9ee5b33f --- /dev/null +++ b/assets/archive_enterprise_v1_features_basic_payment_wechat.md.Bnf-Nihb.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,j as e,o as r}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"微信","description":"微信支付功能","frontmatter":{"title":"微信","description":"微信支付功能"},"headers":[],"relativePath":"archive/enterprise/v1/features/basic/payment/wechat.md","filePath":"zh/archive/enterprise/v1/features/basic/payment/wechat.md","lastUpdated":1731937013000}'),c={name:"archive/enterprise/v1/features/basic/payment/wechat.md"};function n(i,t,o,p,l,d){return r(),s("div",null,t[0]||(t[0]=[e("div",{class:"warning custom-block"},[e("p",{class:"custom-block-title"},"注意"),e("p",null,"需要开通 Native 支付功能。")],-1),e("p",null,"待完善...",-1)]))}const f=a(c,[["render",n]]);export{u as __pageData,f as default}; diff --git a/assets/archive_enterprise_v1_features_basic_plan.md.DIjpZms2.js b/assets/archive_enterprise_v1_features_basic_plan.md.DIjpZms2.js new file mode 100644 index 00000000..41f401c4 --- /dev/null +++ b/assets/archive_enterprise_v1_features_basic_plan.md.DIjpZms2.js @@ -0,0 +1 @@ +import{_ as d,c as a,a2 as e,o as l}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"套餐管理","description":"企业版套餐功能介绍","frontmatter":{"title":"套餐管理","description":"企业版套餐功能介绍"},"headers":[],"relativePath":"archive/enterprise/v1/features/basic/plan.md","filePath":"zh/archive/enterprise/v1/features/basic/plan.md","lastUpdated":1731937013000}'),i={name:"archive/enterprise/v1/features/basic/plan.md"};function r(s,t,o,c,n,p){return l(),a("div",null,t[0]||(t[0]=[e('TIP
套餐权益可以设置多个,建议 6 - 8 行为佳,主要为介绍购买该套餐后可以享受哪些权利。鼠标按住后拖动可以切换位置。
一个套餐可以设置多个具体的"子套餐",也就是阶梯价格,通常是用来指定该套餐中,不同购买不同的价格可以享受权利的时间。
单个阶梯价格,可以设置关联组、赠送容量、有效时间。
WARNING
下面是一个经典的阶梯价格示例:
名称 | 有效时长(秒) | 价格(CNY) | 赠送容量(KB) | 关联组 |
---|---|---|---|---|
体验卡 | 3600 | 1.00 | 102400 | 不关联任何组 |
月卡 | 2592000 | 20.00 | 1048576 | 本地组 |
季卡 | 7776000 | 50.00 | 1048576 | VIP |
年卡 | 31536000 | 199.00 | 2097152 | SVIP |
TIP
套餐权益可以设置多个,建议 6 - 8 行为佳,主要为介绍购买该套餐后可以享受哪些权利。鼠标按住后拖动可以切换位置。
一个套餐可以设置多个具体的"子套餐",也就是阶梯价格,通常是用来指定该套餐中,不同购买不同的价格可以享受权利的时间。
单个阶梯价格,可以设置关联组、赠送容量、有效时间。
WARNING
下面是一个经典的阶梯价格示例:
名称 | 有效时长(秒) | 价格(CNY) | 赠送容量(KB) | 关联组 |
---|---|---|---|---|
体验卡 | 3600 | 1.00 | 102400 | 不关联任何组 |
月卡 | 2592000 | 20.00 | 1048576 | 本地组 |
季卡 | 7776000 | 50.00 | 1048576 | VIP |
年卡 | 31536000 | 199.00 | 2097152 | SVIP |
提示
兰空图床中的角色组是整个系统的核心部分之一,无论是已注册用户、游客、管理员都受角色组控制。系统安装完成以后会默认创建一个默认的角色组,同时也是游客默认组,设置为游客组的角色组会控制游客上传。并且系统只能设置一个游客组。 设置为默认组的角色组,新用户将会默认归属该角色组。
在创建、编辑角色组时,「常规配置」中可以看到六个名称为限制结尾的输入框,配置及作用:
注意
上传数量限制,是代表当前时间往前推这段时间内所上传的图片数量限制。例如每周上传限制,是指七天之前到当前时间的这个范围内,而不是指本周内。
角色组可以对上传后的图片按照命名规则表中的规则对图片的物理储存路径、文件名称进行重写,并且相同、不同的规则可以组合使用。
提示
原图保护的作用是隐藏图片的真实 url 路径,未开启前图片是通过运行环境输出并缓存的,开启后请求该图片会通过 PHP 接管,由 PHP 处理图片的输出。
警告
原图保护功能对服务器配置要求较高,虽然有缓存驱动,原理还是从内存中读取二进制内容,且每次都将图片内容读取到内存中,对服务器内存有着比较高的要求。 这种负载压力在图片请求量(除了缩略图)过多的时候尤为明显。
申请地址:https://cloud.tencent.com/product/ims
固定为 ims.tencentcloudapi.com 即可。
WARNING
如果使用子用户,请授予该账户 QcloudIMSFullAccess、QcloudIMSReadOnlyAccess 权限
申请地址:https://www.aliyun.com/product/lvwang
业务场景对应内容安全控制台中的 -> 设置 -> 机器审核 -> 业务场景
地域目前阿里云支持:
WARNING
如果你使用的「子用户 AccessKey」,即 RAM 账户,请授予该账户 AliyunYundunGreenWebFullAccess 权限。
TIP
此图片审核驱动需要自建,该项目地址:https://github.com/infinitered/nsfwjs
你自建的审核接口地址
你需要使用 node 环境启动一个服务器,并适配 nsfwjs。然后上传接口必须返回以下结构:
{
+ "porn": 0,
+ "sexy": 0,
+ "hentai": 0,
+ "neutral": 0,
+ "drawing": 0
+}
请注意,以上所有属性值,都应该是使用 0-1 之间的数值来表示百分比。
接口的文件属性名称,例如 image
警告
兰空图床并不推荐使用你使用水印功能,这将可能占用大量的内存使用。如果使用了 cdn 或第三方储存,推荐使用第三方的图片处理规则来实现水印功能(或在水印功能中选择「覆盖原图」选项,选择后会直接在上传的原始图片上加上水印)。
why?
一个 3MB 的 jpeg 图片,在处理中可能会占用到 60 MB甚至更高,这是理想的状态下,但通常情况下,甚至会有可能达到 30MB 的图片。 这种图片一旦通过合成水印,加上合成水印时所使用的字体文件或图片,这将会占用大量内存,而 PHP 的默认内存限制在 128MB,会很容易导致内存溢出。
jpeg
、jpg
、png
、psd
、tif
、bmp
、webp
不支持 gif 格式的图片增加水印。psd、tif、bmp 格式的图片将会以 png 的格式输出
水印除了支持九种固定位置外,有一个平铺的选项,会将文字、图片水印以平铺的方式合成到图片中,并且可以通过 x/y 来调整水印距离、位置、旋转角度。
`,42)]))}const b=e(l,[["render",o]]);export{u as __pageData,b as default}; diff --git a/assets/archive_enterprise_v1_features_core_group.md.BWDPANLf.lean.js b/assets/archive_enterprise_v1_features_core_group.md.BWDPANLf.lean.js new file mode 100644 index 00000000..e96330ed --- /dev/null +++ b/assets/archive_enterprise_v1_features_core_group.md.BWDPANLf.lean.js @@ -0,0 +1,7 @@ +import{_ as e,c as t,a2 as s,o as i}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"角色组","description":"企业版角色组功能介绍","frontmatter":{"title":"角色组","description":"企业版角色组功能介绍"},"headers":[],"relativePath":"archive/enterprise/v1/features/core/group.md","filePath":"zh/archive/enterprise/v1/features/core/group.md","lastUpdated":1731937013000}'),l={name:"archive/enterprise/v1/features/core/group.md"};function o(n,a,c,r,p,d){return i(),t("div",null,a[0]||(a[0]=[s(`提示
兰空图床中的角色组是整个系统的核心部分之一,无论是已注册用户、游客、管理员都受角色组控制。系统安装完成以后会默认创建一个默认的角色组,同时也是游客默认组,设置为游客组的角色组会控制游客上传。并且系统只能设置一个游客组。 设置为默认组的角色组,新用户将会默认归属该角色组。
在创建、编辑角色组时,「常规配置」中可以看到六个名称为限制结尾的输入框,配置及作用:
注意
上传数量限制,是代表当前时间往前推这段时间内所上传的图片数量限制。例如每周上传限制,是指七天之前到当前时间的这个范围内,而不是指本周内。
角色组可以对上传后的图片按照命名规则表中的规则对图片的物理储存路径、文件名称进行重写,并且相同、不同的规则可以组合使用。
提示
原图保护的作用是隐藏图片的真实 url 路径,未开启前图片是通过运行环境输出并缓存的,开启后请求该图片会通过 PHP 接管,由 PHP 处理图片的输出。
警告
原图保护功能对服务器配置要求较高,虽然有缓存驱动,原理还是从内存中读取二进制内容,且每次都将图片内容读取到内存中,对服务器内存有着比较高的要求。 这种负载压力在图片请求量(除了缩略图)过多的时候尤为明显。
申请地址:https://cloud.tencent.com/product/ims
固定为 ims.tencentcloudapi.com 即可。
WARNING
如果使用子用户,请授予该账户 QcloudIMSFullAccess、QcloudIMSReadOnlyAccess 权限
申请地址:https://www.aliyun.com/product/lvwang
业务场景对应内容安全控制台中的 -> 设置 -> 机器审核 -> 业务场景
地域目前阿里云支持:
WARNING
如果你使用的「子用户 AccessKey」,即 RAM 账户,请授予该账户 AliyunYundunGreenWebFullAccess 权限。
TIP
此图片审核驱动需要自建,该项目地址:https://github.com/infinitered/nsfwjs
你自建的审核接口地址
你需要使用 node 环境启动一个服务器,并适配 nsfwjs。然后上传接口必须返回以下结构:
{
+ "porn": 0,
+ "sexy": 0,
+ "hentai": 0,
+ "neutral": 0,
+ "drawing": 0
+}
请注意,以上所有属性值,都应该是使用 0-1 之间的数值来表示百分比。
接口的文件属性名称,例如 image
警告
兰空图床并不推荐使用你使用水印功能,这将可能占用大量的内存使用。如果使用了 cdn 或第三方储存,推荐使用第三方的图片处理规则来实现水印功能(或在水印功能中选择「覆盖原图」选项,选择后会直接在上传的原始图片上加上水印)。
why?
一个 3MB 的 jpeg 图片,在处理中可能会占用到 60 MB甚至更高,这是理想的状态下,但通常情况下,甚至会有可能达到 30MB 的图片。 这种图片一旦通过合成水印,加上合成水印时所使用的字体文件或图片,这将会占用大量内存,而 PHP 的默认内存限制在 128MB,会很容易导致内存溢出。
jpeg
、jpg
、png
、psd
、tif
、bmp
、webp
不支持 gif 格式的图片增加水印。psd、tif、bmp 格式的图片将会以 png 的格式输出
水印除了支持九种固定位置外,有一个平铺的选项,会将文字、图片水印以平铺的方式合成到图片中,并且可以通过 x/y 来调整水印距离、位置、旋转角度。
`,42)]))}const b=e(l,[["render",o]]);export{u as __pageData,b as default}; diff --git a/assets/archive_enterprise_v1_features_core_strategy.md.BmzyF3eY.js b/assets/archive_enterprise_v1_features_core_strategy.md.BmzyF3eY.js new file mode 100644 index 00000000..045371e5 --- /dev/null +++ b/assets/archive_enterprise_v1_features_core_strategy.md.BmzyF3eY.js @@ -0,0 +1,51 @@ +import{_ as i,c as a,a2 as n,o as l}from"./chunks/framework.DPuwY6B9.js";const c=JSON.parse('{"title":"储存策略","description":"企业版储存策略功能介绍","frontmatter":{"title":"储存策略","description":"企业版储存策略功能介绍"},"headers":[],"relativePath":"archive/enterprise/v1/features/core/strategy.md","filePath":"zh/archive/enterprise/v1/features/core/strategy.md","lastUpdated":1734677202000}'),t={name:"archive/enterprise/v1/features/core/strategy.md"};function p(e,s,h,k,r,d){return l(),a("div",null,s[0]||(s[0]=[n(`提示
兰空图床中的储存策略是整个系统的核心部分之一,目前支持本地
、AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云
、又拍云
、SFTP
、FTP
、WebDav
、Minio
。 一个储存策略可以归属于多个角色组,同时某个角色组也可以设置多个储存策略。
在创建、编辑储存策略时,第一栏的角色组输入框会展示全部已存在的角色组,鼠标单击可直接选择,mac 按住 command
加鼠标左键可以多选、取消选择,windows 上为 ctrl
或 alt
键。
WARNING
储存驱动适配好以后,接下来要做的就是集成到兰空图床当中。
composer
安装你的驱动器。现在我们假设你的驱动器名称为 flysystem-custom
。composer install xxx/flysystem-custom
在 app/Enums/Strategy
文件夹中新增一个文件 CustomOption
,内容如下
<?php
+
+namespace App\\Enums\\Strategy;
+
+final class CustomOption
+{
+ /** @var string 访问地址 */
+ const Url = 'url';
+
+ /** @var string 用户名 */
+ const Username = 'username';
+
+ /** @var string 密码 */
+ const Password = 'password';
+
+ /** @var string 储存名称 */
+ const Bucket = 'bucket';
+}
该枚举由你的储存需要的配置而定,其中
url
不管是什么储存都是必须的
打开 app/Enums/StrategyKey.php
文件追加一行
// ...
+/** @var int Custom */
+const Custom = 11;
+// ...
此常量值可以自定义,但不要和其他常量值重复。
getAdapter
方法打开 app/Services/ImageService.php
文件定位到 getAdapter
方法,你可以看到所有储存策略都是通过这个方法进行实例化的。 我们来增加一个 adapter,在 match 表达式中追加内容:
+// ...
+
+use App\\Enums\\Strategy\\CustomOption;
+
+// ....
+
+StrategyKey::Custom => new CustomAdapter(
+ username: $configs->get(CustomOption::Username),
+ password: $configs->get(CustomOption::Password),
+ bucket: $configs->get(CustomOption::Bucket),
+),
+
+// ...
打开 app/Models/Strategy.php
文件,在 DRIVERS 常量中追加一行
// ...
+const DRIVERS = [
+ // ...
+ StrategyKey::Custom => '自定义储存',
+];
+// ...
打开 app/Http/Requests/Admin/StrategyRequest.php
文件, 在 rules
方法里追加验证内容
+// ...
+
+return array_merge($array, match((int)$this->input('key')) {
+ // ...
+ StrategyKey::Custom => [
+ 'configs.username' => 'required',
+ 'configs.password' => 'required',
+ 'configs.bucket' => 'required',
+ ],
+});
+
+// ...
验证规则请参考 Laravel 官方文档
打开 resources/views/admin/strategy/add.blade.php
和 resources/views/admin/strategy/edit.blade.php
参考其他的储存策略表单,例如 minio:
添加页面:add.blade.php
编辑页面:edit.blade.php
至此,一个新的储存就适配完成了,这时候就可以在储存策略添加表单中,选择你的自定义储存策略进行配置、测试上传、管理等。
为了实现本地储存可以更改储存位置,所以本地储存必须有一个域名后缀,例如 http://domain.com/**uploads**/123.png 中的 uploads。后缀对应的是 public 目录下的符号连接。
如果使用 RAM 账户,请授予该账户以下权限:
如果使用子账户,请授予该账户以下权限
腾讯云的储存桶名称由 名称+appid 组合,在兰空图床后台的储存策略表单中请分开填写。
提示
兰空图床中的储存策略是整个系统的核心部分之一,目前支持本地
、AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云
、又拍云
、SFTP
、FTP
、WebDav
、Minio
。 一个储存策略可以归属于多个角色组,同时某个角色组也可以设置多个储存策略。
在创建、编辑储存策略时,第一栏的角色组输入框会展示全部已存在的角色组,鼠标单击可直接选择,mac 按住 command
加鼠标左键可以多选、取消选择,windows 上为 ctrl
或 alt
键。
WARNING
储存驱动适配好以后,接下来要做的就是集成到兰空图床当中。
composer
安装你的驱动器。现在我们假设你的驱动器名称为 flysystem-custom
。composer install xxx/flysystem-custom
在 app/Enums/Strategy
文件夹中新增一个文件 CustomOption
,内容如下
<?php
+
+namespace App\\Enums\\Strategy;
+
+final class CustomOption
+{
+ /** @var string 访问地址 */
+ const Url = 'url';
+
+ /** @var string 用户名 */
+ const Username = 'username';
+
+ /** @var string 密码 */
+ const Password = 'password';
+
+ /** @var string 储存名称 */
+ const Bucket = 'bucket';
+}
该枚举由你的储存需要的配置而定,其中
url
不管是什么储存都是必须的
打开 app/Enums/StrategyKey.php
文件追加一行
// ...
+/** @var int Custom */
+const Custom = 11;
+// ...
此常量值可以自定义,但不要和其他常量值重复。
getAdapter
方法打开 app/Services/ImageService.php
文件定位到 getAdapter
方法,你可以看到所有储存策略都是通过这个方法进行实例化的。 我们来增加一个 adapter,在 match 表达式中追加内容:
+// ...
+
+use App\\Enums\\Strategy\\CustomOption;
+
+// ....
+
+StrategyKey::Custom => new CustomAdapter(
+ username: $configs->get(CustomOption::Username),
+ password: $configs->get(CustomOption::Password),
+ bucket: $configs->get(CustomOption::Bucket),
+),
+
+// ...
打开 app/Models/Strategy.php
文件,在 DRIVERS 常量中追加一行
// ...
+const DRIVERS = [
+ // ...
+ StrategyKey::Custom => '自定义储存',
+];
+// ...
打开 app/Http/Requests/Admin/StrategyRequest.php
文件, 在 rules
方法里追加验证内容
+// ...
+
+return array_merge($array, match((int)$this->input('key')) {
+ // ...
+ StrategyKey::Custom => [
+ 'configs.username' => 'required',
+ 'configs.password' => 'required',
+ 'configs.bucket' => 'required',
+ ],
+});
+
+// ...
验证规则请参考 Laravel 官方文档
打开 resources/views/admin/strategy/add.blade.php
和 resources/views/admin/strategy/edit.blade.php
参考其他的储存策略表单,例如 minio:
添加页面:add.blade.php
编辑页面:edit.blade.php
至此,一个新的储存就适配完成了,这时候就可以在储存策略添加表单中,选择你的自定义储存策略进行配置、测试上传、管理等。
为了实现本地储存可以更改储存位置,所以本地储存必须有一个域名后缀,例如 http://domain.com/**uploads**/123.png 中的 uploads。后缀对应的是 public 目录下的符号连接。
如果使用 RAM 账户,请授予该账户以下权限:
如果使用子账户,请授予该账户以下权限
腾讯云的储存桶名称由 名称+appid 组合,在兰空图床后台的储存策略表单中请分开填写。
欢迎使用兰空图床企业版本,企业版和开源的 V 2.x 版本是相同的架构,但在功能和定位上是完全不同的,企业版本除了在功能上做了进一步加强,还对性能以及产品健壮性做了针对优化,使其可以商业化。
本地
等多种第三方云储存 AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云
、又拍云
、SFTP
、FTP
、WebDav
、Minio
MySQL 5.7+
、PostgreSQL 9.6+
、SQLite 3.8.8+
、SQL Server 2017+
WARNING
欢迎使用兰空图床企业版本,企业版和开源的 V 2.x 版本是相同的架构,但在功能和定位上是完全不同的,企业版本除了在功能上做了进一步加强,还对性能以及产品健壮性做了针对优化,使其可以商业化。
本地
等多种第三方云储存 AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云
、又拍云
、SFTP
、FTP
、WebDav
、Minio
MySQL 5.7+
、PostgreSQL 9.6+
、SQLite 3.8.8+
、SQL Server 2017+
WARNING
php artisan lsky:thumbnails
php artisan lsky:symlinks
php artisan db:seed --class=CorrectStatSeeder
php artisan lsky:thumbnails
php artisan lsky:symlinks
php artisan db:seed --class=CorrectStatSeeder
public/thumbnails
目录复制至企业版本 storage/app
文件夹中storage/app/uploads
和 storage/app/public
目录复制至企业版本 storage/app
文件夹中installed.lock
文件复制至企业版本的根目录中操作后,新版本的目录结构应该是这样的:
www 站点根目录
+├─ ... ...
+├─public 静态资源文件夹
+│ ├─css 层叠式样式表文件夹
+│ ├─fonts 样式所需的字体文件文件夹
+│ ├─img 系统所需要的图片文件夹
+│ └─js javascript 文件夹
+├─ ... ...
+├─storage 储存文件夹
+│ ├─app 应用储存文件夹
+│ │ ├─certs 支付功能证书文件夹
+│ │ ├─public 程序上传文件的文件夹
+│ │ ├─thumbnails 图片缩略图文件夹
+│ │ └─uploads 本地策略上传文件的文件夹
+│ ├─debugbar Debug 缓存
+│ ├─framework 核心框架缓存文件夹
+│ └─logs 日志记录文件夹
+├─ ... ...
+├─installed.lock 检测程序是否安装的文件
+├─ ... ...
注意
如果你是直接覆盖旧版本,请删除 public 目录中的所有符号连接以及 thumbnails 文件夹
在企业版本根目录,将 .env.example
复制一份并重命名为 .env
,然后编辑这个文件,下列内容都是必填项:
APP_URL
=站点域名(需要 http(s): //,例如 https://pic.iqy.ink)APP_SERIAL_NO
=购买后得到的序列号APP_SECRET
=许可证的密钥DB_CONNECTION
=(数据库驱动名称 mysql、sqlite、pgsql、sqlsrv)DB_HOST
=数据库连接地址(默认为 127.0.0.1)DB_PORT
=数据库连接端口(默认为 3306)DB_DATABASE
=数据库名称DB_USERNAME
=数据库连接账号DB_PASSWORD
=数据库连接密码REDIS_HOST
=Redis 连接地址(默认为 127.0.0.1)REDIS_PASSWORD
=Redis 连接密码(默认为 null,表示没有密码)REDIS_PORT
=Redis 连接端口(默认为 6379)提示
.env
配置文件中的数据库配置表示的是开源版本正在使用的数据库,不需要重新创建.env
文件中复制过来替换编辑完成后保存,即可将旧版本整站点文件夹以及文件删除,然后使用新版本替换。
注意替换后,站点中的文件夹和文件权限和所有者可能会变,需要设置为 0755/www
确保上述配置填写无误后,在企业版本的根目录下依次执行下面的命令进行升级。
php artisan key:generate
php artisan migrate --seed
php artisan db:seed --class=UpgradeFromFreeSeeder
php artisan lsky:symlinks
注意
如果您使用了本地储存,需要登录兰空图床后台,重新保存策略,以此生成本地符号连接,没有符号连接将会无法访问本地所上传的图片。
php artisan optimize:clear
此时还差最后一步,配置命令行,此步骤与安装教程中一致。参考安装教程中的最后一步,命令行配置。
此时站点正常情况下已经可以访问了,注意需要清除浏览器缓存,否则样式可能会变得奇怪。
提示
数据无价,请在升级前做好备份。
public/thumbnails
目录复制至企业版本 storage/app
文件夹中storage/app/uploads
和 storage/app/public
目录复制至企业版本 storage/app
文件夹中installed.lock
文件复制至企业版本的根目录中操作后,新版本的目录结构应该是这样的:
www 站点根目录
+├─ ... ...
+├─public 静态资源文件夹
+│ ├─css 层叠式样式表文件夹
+│ ├─fonts 样式所需的字体文件文件夹
+│ ├─img 系统所需要的图片文件夹
+│ └─js javascript 文件夹
+├─ ... ...
+├─storage 储存文件夹
+│ ├─app 应用储存文件夹
+│ │ ├─certs 支付功能证书文件夹
+│ │ ├─public 程序上传文件的文件夹
+│ │ ├─thumbnails 图片缩略图文件夹
+│ │ └─uploads 本地策略上传文件的文件夹
+│ ├─debugbar Debug 缓存
+│ ├─framework 核心框架缓存文件夹
+│ └─logs 日志记录文件夹
+├─ ... ...
+├─installed.lock 检测程序是否安装的文件
+├─ ... ...
注意
如果你是直接覆盖旧版本,请删除 public 目录中的所有符号连接以及 thumbnails 文件夹
在企业版本根目录,将 .env.example
复制一份并重命名为 .env
,然后编辑这个文件,下列内容都是必填项:
APP_URL
=站点域名(需要 http(s): //,例如 https://pic.iqy.ink)APP_SERIAL_NO
=购买后得到的序列号APP_SECRET
=许可证的密钥DB_CONNECTION
=(数据库驱动名称 mysql、sqlite、pgsql、sqlsrv)DB_HOST
=数据库连接地址(默认为 127.0.0.1)DB_PORT
=数据库连接端口(默认为 3306)DB_DATABASE
=数据库名称DB_USERNAME
=数据库连接账号DB_PASSWORD
=数据库连接密码REDIS_HOST
=Redis 连接地址(默认为 127.0.0.1)REDIS_PASSWORD
=Redis 连接密码(默认为 null,表示没有密码)REDIS_PORT
=Redis 连接端口(默认为 6379)提示
.env
配置文件中的数据库配置表示的是开源版本正在使用的数据库,不需要重新创建.env
文件中复制过来替换编辑完成后保存,即可将旧版本整站点文件夹以及文件删除,然后使用新版本替换。
注意替换后,站点中的文件夹和文件权限和所有者可能会变,需要设置为 0755/www
确保上述配置填写无误后,在企业版本的根目录下依次执行下面的命令进行升级。
php artisan key:generate
php artisan migrate --seed
php artisan db:seed --class=UpgradeFromFreeSeeder
php artisan lsky:symlinks
注意
如果您使用了本地储存,需要登录兰空图床后台,重新保存策略,以此生成本地符号连接,没有符号连接将会无法访问本地所上传的图片。
php artisan optimize:clear
此时还差最后一步,配置命令行,此步骤与安装教程中一致。参考安装教程中的最后一步,命令行配置。
此时站点正常情况下已经可以访问了,注意需要清除浏览器缓存,否则样式可能会变得奇怪。
提示
数据无价,请在升级前做好备份。
TIP
兰空图床使用 Imagick 拓展 对图片进行处理,它并非 PHP 预装,而是需要自己手动安装的。
imagick 分为两个部分,第一个是 ImageImagick,然后才是 PHP Imagick,PHP Imagick 支持哪些图片取决于 ImageImagick 库,如果您安装完程序后,发现个别拓展名(例如webp)无法上传,很有可能是因为 imagick 安装时未支持 webp,需要重新编译安装。
wget https://github.com/ImageMagick/ImageMagick/archive/refs/heads/main.zip -O ImageMagick.zip
+unzip ImageMagick.zip
+cd ImageMagick-main/
注意
libwebp
库的支持,且需要达到指定版本要求identify -list format
命令查看所有支持的图片格式identify -list format | grep webp
命令查看指定的图片格式是否支持./configure
make && make install
注意
请先使用 php -v
命令输出并确认当前使用的 cli php 版本,避免将拓展安装到了其他的 php 版本上。
wget https://github.com/Imagick/imagick/archive/refs/heads/master.zip -O php-imagick.zip
+unzip php-imagick.zip && cd imagick-master/
phpize && ./configure
+make && make install
安装完成后,执行命令 php --ri imagick
,会出现下图中的信息,即为安装完成。
TIP
兰空图床使用 Imagick 拓展 对图片进行处理,它并非 PHP 预装,而是需要自己手动安装的。
imagick 分为两个部分,第一个是 ImageImagick,然后才是 PHP Imagick,PHP Imagick 支持哪些图片取决于 ImageImagick 库,如果您安装完程序后,发现个别拓展名(例如webp)无法上传,很有可能是因为 imagick 安装时未支持 webp,需要重新编译安装。
wget https://github.com/ImageMagick/ImageMagick/archive/refs/heads/main.zip -O ImageMagick.zip
+unzip ImageMagick.zip
+cd ImageMagick-main/
注意
libwebp
库的支持,且需要达到指定版本要求identify -list format
命令查看所有支持的图片格式identify -list format | grep webp
命令查看指定的图片格式是否支持./configure
make && make install
注意
请先使用 php -v
命令输出并确认当前使用的 cli php 版本,避免将拓展安装到了其他的 php 版本上。
wget https://github.com/Imagick/imagick/archive/refs/heads/master.zip -O php-imagick.zip
+unzip php-imagick.zip && cd imagick-master/
phpize && ./configure
+make && make install
安装完成后,执行命令 php --ri imagick
,会出现下图中的信息,即为安装完成。
提示
注意
此教程只针对程序方面的优化,不包含服务器网络带宽方面。
php artisan config:cache
php artisan route:cache
php artisan view:cache
提示
注意
此教程只针对程序方面的优化,不包含服务器网络带宽方面。
php artisan config:cache
php artisan route:cache
php artisan view:cache
TIP
兰空图床开发初期,出于性能考虑,将数据量可能较大的地方的分页页码功能取消,只保留了上下页按钮。如果你希望有页码,可以自行修改,在程序代码中找到 simplePaginate
,将其修改为 paginate
即可。
但是请注意,如果您的数据量较大,这可能会使数据查询变慢,通常情况下单表数据超过 20w 后较为明显。
shift
按键,点击图片右上角的选择框进行多选。command
+a
(windows: alt
+ a
) 进行全选。兰空图床的高级搜索功能,灵感来自于 Github
默认的搜索输入框中,输入普通的关键字、词可以进行数据模糊匹配,通常用于快速查找数据。你也可以通过点击输入框右下角的「高级搜索」查看搜索语法。
除此之外,高级搜索不仅可以筛选数据,还可以对数据进行排序。假设有一个限定符为:order:created_at
,默认该限定符会以降序(从大到小)的方式对数据进行排序,我们还可以直接指定排序方式:order:created_at-asc
,升序(从小到大)。
如果存在多个限定符,以空格隔开即可,数据会以并且的关系匹配数据。
注意
如果您的单表数据量非常大(大于 30w),请谨慎使用模糊匹配筛选数据。模糊匹配是通过 SQL 通配符实现的,通配符会在搜索时全表扫描,会造成 SQL 查询时间急剧上升。
TIP
兰空图床开发初期,出于性能考虑,将数据量可能较大的地方的分页页码功能取消,只保留了上下页按钮。如果你希望有页码,可以自行修改,在程序代码中找到 simplePaginate
,将其修改为 paginate
即可。
但是请注意,如果您的数据量较大,这可能会使数据查询变慢,通常情况下单表数据超过 20w 后较为明显。
shift
按键,点击图片右上角的选择框进行多选。command
+a
(windows: alt
+ a
) 进行全选。兰空图床的高级搜索功能,灵感来自于 Github
默认的搜索输入框中,输入普通的关键字、词可以进行数据模糊匹配,通常用于快速查找数据。你也可以通过点击输入框右下角的「高级搜索」查看搜索语法。
除此之外,高级搜索不仅可以筛选数据,还可以对数据进行排序。假设有一个限定符为:order:created_at
,默认该限定符会以降序(从大到小)的方式对数据进行排序,我们还可以直接指定排序方式:order:created_at-asc
,升序(从小到大)。
如果存在多个限定符,以空格隔开即可,数据会以并且的关系匹配数据。
注意
如果您的单表数据量非常大(大于 30w),请谨慎使用模糊匹配筛选数据。模糊匹配是通过 SQL 通配符实现的,通配符会在搜索时全表扫描,会造成 SQL 查询时间急剧上升。
请注意
兰空图床不支持共享型虚拟主机(不支持安装拓展、修改 php.ini 等操作)安装
php -v
命令查看并确认 cli php 命令行版本是否符合要求,最低需要 8.1。php -m | grep -E 'fileinfo|mysqli|curl|mbstring|imagick|openssl|PDO|redis|session'
然后打开 php.ini
文件,搜索查找 disable_functions
,将该值清空,例如:
...
+; This directive allows you to disable certain functions.
+; It receives a comma-delimited list of function names.
+; https://php.net/disable-functions
+disable_functions =
+...
清空后重启 PHP 服务。
提示
curl
、fileinfo
、ftp
、imagick
、PDO
、openssl
、pcntl
、redis
、zip
pgsql
、pdo_pgsql
、sqlite3
、pdo_sqlite
location / {
+ try_files $uri $uri/ /index.php?$query_string;
+}
WARNING
请正确配置伪静态,否则可能会导致邮件验证等功能失效。
public
,如何设置?。通常情况下,Web 站点目录的所有者和用户组为 www:www
php artisan key:generate
.env
文件,如果没有该文件可以将 .env.example
复制一份并重命名为 .env
,然后修改对应的配置值: APP_URL
=站点域名(需要 http(s): //,例如 https://pic.iqy.ink)APP_SERIAL_NO
=购买后得到的序列号APP_SECRET
=许可证的密钥REDIS_HOST
=Redis 连接地址(默认为 127.0.0.1)REDIS_PASSWORD
=Redis 连接密码(默认为 null,表示没有密码)REDIS_PORT
=Redis 连接端口(默认为 6379)上述步骤完成以后,即可访问站点首页,程序会自动跳转至图形化安装页面,根据指引完成数据库配置、管理员账号配置等。
兰空图床企业版需要通过 php cli 的方式启动队列、计划任务处理进程,此操作需要登录 SSH。
命令行:
php artisan queue:work --queue=emails,images,thumbnails
在站点根目录下执行命令 php artisan queue:work
来启动队列处理进程,但是注意,手动停止或关闭终端后此命令会停止,所以我们需要通过其他命令(nohup、screen)来使该命令在后台运行。
注意
由于兰空图床会在每次升级后安全退出队列进程,如果您使用上述的方式运行队列,请不要忘了在程序更新后手动重启队列。
除了上述命令的方式,我们更推荐使用 Supervisor 来保持进程持续运行。服务器安装 Supervisor 的步骤请自行搜索相关文档,此处不再赘述。
假设我们的项目绝对路径为 /www/wwwroot/lsky-pro
,以下是 supervisor 子配置文件。
[program:lsky-pro-worker]
+process_name=%(program_name)s_%(process_num)02d
+command=php artisan queue:work --queue=emails,images,thumbnails
+directory=/www/wwwroot/lsky-pro/
+user=root
+numprocs=1
+autorestart=true
+startsecs=3
+startretries=3
+stdout_logfile=/www/wwwroot/lsky-pro/storage/logs/supervisor.out.log
+stderr_logfile=/www/wwwroot/lsky-pro/storage/logs/supervisor.err.log
+stdout_logfile_maxbytes=2MB
+stderr_logfile_maxbytes=2MB
创建配置文件后,您可以使用以下命令更新 Supervisor 配置并启动进程:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start lsky-pro-worker:*
TIP
宝塔面板集成了 Supervisor 软件,安装后可以直接使用,无需配置,如下图所示:
注意
如果进程无法启动,请尝试解禁 PHP 的 pcntl_signal
、pcntl_alarm
函数。
计划任务需要用到 linux 中的 Crontab,我们还是假设项目绝对路径为 /www/wwwroot/lsky-pro
,登录 SSH 后,执行以下命令:
crontab -e
执行后会进入 vim 编辑页面,按 i
键进入编辑模式,输入以下内容:
* * * * * cd /www/wwwroot/lsky-pro && php artisan schedule:run >> /dev/null 2>&1
然后(或按住 shift
+ :
),输入 eq
后回车保存。
重启 crontab 服务
service crond restart
TIP
宝塔面板集成了可视化计划任务配置页面,可以直接使用,无需配置,如下图所示:
至此,完成安装。
提示
请注意
兰空图床不支持共享型虚拟主机(不支持安装拓展、修改 php.ini 等操作)安装
php -v
命令查看并确认 cli php 命令行版本是否符合要求,最低需要 8.1。php -m | grep -E 'fileinfo|mysqli|curl|mbstring|imagick|openssl|PDO|redis|session'
然后打开 php.ini
文件,搜索查找 disable_functions
,将该值清空,例如:
...
+; This directive allows you to disable certain functions.
+; It receives a comma-delimited list of function names.
+; https://php.net/disable-functions
+disable_functions =
+...
清空后重启 PHP 服务。
提示
curl
、fileinfo
、ftp
、imagick
、PDO
、openssl
、pcntl
、redis
、zip
pgsql
、pdo_pgsql
、sqlite3
、pdo_sqlite
location / {
+ try_files $uri $uri/ /index.php?$query_string;
+}
WARNING
请正确配置伪静态,否则可能会导致邮件验证等功能失效。
public
,如何设置?。通常情况下,Web 站点目录的所有者和用户组为 www:www
php artisan key:generate
.env
文件,如果没有该文件可以将 .env.example
复制一份并重命名为 .env
,然后修改对应的配置值: APP_URL
=站点域名(需要 http(s): //,例如 https://pic.iqy.ink)APP_SERIAL_NO
=购买后得到的序列号APP_SECRET
=许可证的密钥REDIS_HOST
=Redis 连接地址(默认为 127.0.0.1)REDIS_PASSWORD
=Redis 连接密码(默认为 null,表示没有密码)REDIS_PORT
=Redis 连接端口(默认为 6379)上述步骤完成以后,即可访问站点首页,程序会自动跳转至图形化安装页面,根据指引完成数据库配置、管理员账号配置等。
兰空图床企业版需要通过 php cli 的方式启动队列、计划任务处理进程,此操作需要登录 SSH。
命令行:
php artisan queue:work --queue=emails,images,thumbnails
在站点根目录下执行命令 php artisan queue:work
来启动队列处理进程,但是注意,手动停止或关闭终端后此命令会停止,所以我们需要通过其他命令(nohup、screen)来使该命令在后台运行。
注意
由于兰空图床会在每次升级后安全退出队列进程,如果您使用上述的方式运行队列,请不要忘了在程序更新后手动重启队列。
除了上述命令的方式,我们更推荐使用 Supervisor 来保持进程持续运行。服务器安装 Supervisor 的步骤请自行搜索相关文档,此处不再赘述。
假设我们的项目绝对路径为 /www/wwwroot/lsky-pro
,以下是 supervisor 子配置文件。
[program:lsky-pro-worker]
+process_name=%(program_name)s_%(process_num)02d
+command=php artisan queue:work --queue=emails,images,thumbnails
+directory=/www/wwwroot/lsky-pro/
+user=root
+numprocs=1
+autorestart=true
+startsecs=3
+startretries=3
+stdout_logfile=/www/wwwroot/lsky-pro/storage/logs/supervisor.out.log
+stderr_logfile=/www/wwwroot/lsky-pro/storage/logs/supervisor.err.log
+stdout_logfile_maxbytes=2MB
+stderr_logfile_maxbytes=2MB
创建配置文件后,您可以使用以下命令更新 Supervisor 配置并启动进程:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start lsky-pro-worker:*
TIP
宝塔面板集成了 Supervisor 软件,安装后可以直接使用,无需配置,如下图所示:
注意
如果进程无法启动,请尝试解禁 PHP 的 pcntl_signal
、pcntl_alarm
函数。
计划任务需要用到 linux 中的 Crontab,我们还是假设项目绝对路径为 /www/wwwroot/lsky-pro
,登录 SSH 后,执行以下命令:
crontab -e
执行后会进入 vim 编辑页面,按 i
键进入编辑模式,输入以下内容:
* * * * * cd /www/wwwroot/lsky-pro && php artisan schedule:run >> /dev/null 2>&1
然后(或按住 shift
+ :
),输入 eq
后回车保存。
重启 crontab 服务
service crond restart
TIP
宝塔面板集成了可视化计划任务配置页面,可以直接使用,无需配置,如下图所示:
至此,完成安装。
提示
注意
由于程序使用了符号连接的方式实现其图片可以存在磁盘的任意位置,因此迁移兰空图床需要进行一些额外的操作。符号链接百度百科,可以简单理解为 Windows 系统中的快捷方式。
一般情况下,程序的 public
目录中会存在多个个系统保留目录名,目录结构如下:
└─ public
+ ├─ css 系统层叠式样式表
+ ├─ fonts 系统字体文件
+ ├─ i 程序默认本地储存的符号链接(可能不存在)
+ ├─ img 系统图片文件
+ ├─ js 系统 javascript 文件
+ ├─ thumbnails 程序图片缩略图的符号链接
+ ├─ uploads 系统图片上传的符号链接(例如相册封面、背景图等)
+ └─ ...
符号链接映射关系:
public/thumbnails
-> storage/app/thumbnails
public/uploads
-> storage/app/public
public/i
-> storage/app/uploads
迁移前,我们先将 public
中的 thumbnails
、uploads
、i
等所有符号链接删除。然后备份数据库,打包程序目录。
为什么要删除符号链接?
如果不删除符号链接,打包压缩程序目录时,会将符号链接所指向的文件也打包进去,导致迁移后符号链接失效,无法找到对应的文件。
注意
打包时请注意程序中 .
符号开头的文件,这些可能在某些文件管理程序中被隐藏,请不要忽略了这些文件。
首先需要打开新服务器的 SSH 终端,使用命令查看 PHP 版本是否正确:
php -v
然后确认该 PHP 版本的拓展是否都已经安装了:
php -m | grep -E 'fileinfo|mysqli|curl|mbstring|imagick|openssl|PDO|redis|session'
然后打开 php.ini
文件,搜索查找 disable_functions
,将该值清空,例如:
...
+; This directive allows you to disable certain functions.
+; It receives a comma-delimited list of function names.
+; https://php.net/disable-functions
+disable_functions =
+...
修改后重启 PHP 服务。 然后确保新服务器已安装 PHP 5.7+ 以及 Redis 7.0+。
将打包后的代码和数据库文件,上传到新服务器站点目录解压,并导入数据库。
打开根目录 .env
文件,修改数据库连接信息:
APP_DEBUG=true 开启调试模式
+DB_CONNECTION=mysql 数据库类型
+DB_HOST=127.0.0.1 数据库连接地址
+DB_PORT=3306 数据库连接端口
+DB_DATABASE=lsky_pro 数据库名称
+DB_USERNAME=root 数据库用户名
+DB_PASSWORD=root 数据库密码
+
+REDIS_HOST=127.0.0.1 Redis 连接地址,一般默认就好
+REDIS_PASSWORD=null Redis 连接密码,一般默认就好
+REDIS_PORT=6379 Redis 连接端口,一般默认就好
将以上配置修改为你的环境对应配置值,然后配置站点伪静态、运行目录、设置站点文件权限。具体操作可参考安装章节第二步-准备运行环境
进入 SSH 终端,进入站点目录,然后执行重新生成符号链接命令:
php artisan lsky:symlinks
注意
如果你使用了本地的储存策略,需要进入后台编辑该策略,重新保存一下以生成对应储存的符号连接。
参考安装文档中的最后一步-命令行配置-重要,配置配置异步队列和计划任务 (重要)
`,29)]))}const k=a(p,[["render",t]]);export{u as __pageData,k as default}; diff --git a/assets/archive_enterprise_v1_quick-start_migration.md.JGrdg6xm.lean.js b/assets/archive_enterprise_v1_quick-start_migration.md.JGrdg6xm.lean.js new file mode 100644 index 00000000..194ea40a --- /dev/null +++ b/assets/archive_enterprise_v1_quick-start_migration.md.JGrdg6xm.lean.js @@ -0,0 +1,24 @@ +import{_ as a,c as n,a2 as i,o as e}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"迁移","description":"迁移兰空图床企业版","frontmatter":{"title":"迁移","description":"迁移兰空图床企业版"},"headers":[],"relativePath":"archive/enterprise/v1/quick-start/migration.md","filePath":"zh/archive/enterprise/v1/quick-start/migration.md","lastUpdated":1731937013000}'),p={name:"archive/enterprise/v1/quick-start/migration.md"};function t(l,s,c,o,d,h){return e(),n("div",null,s[0]||(s[0]=[i(`注意
由于程序使用了符号连接的方式实现其图片可以存在磁盘的任意位置,因此迁移兰空图床需要进行一些额外的操作。符号链接百度百科,可以简单理解为 Windows 系统中的快捷方式。
一般情况下,程序的 public
目录中会存在多个个系统保留目录名,目录结构如下:
└─ public
+ ├─ css 系统层叠式样式表
+ ├─ fonts 系统字体文件
+ ├─ i 程序默认本地储存的符号链接(可能不存在)
+ ├─ img 系统图片文件
+ ├─ js 系统 javascript 文件
+ ├─ thumbnails 程序图片缩略图的符号链接
+ ├─ uploads 系统图片上传的符号链接(例如相册封面、背景图等)
+ └─ ...
符号链接映射关系:
public/thumbnails
-> storage/app/thumbnails
public/uploads
-> storage/app/public
public/i
-> storage/app/uploads
迁移前,我们先将 public
中的 thumbnails
、uploads
、i
等所有符号链接删除。然后备份数据库,打包程序目录。
为什么要删除符号链接?
如果不删除符号链接,打包压缩程序目录时,会将符号链接所指向的文件也打包进去,导致迁移后符号链接失效,无法找到对应的文件。
注意
打包时请注意程序中 .
符号开头的文件,这些可能在某些文件管理程序中被隐藏,请不要忽略了这些文件。
首先需要打开新服务器的 SSH 终端,使用命令查看 PHP 版本是否正确:
php -v
然后确认该 PHP 版本的拓展是否都已经安装了:
php -m | grep -E 'fileinfo|mysqli|curl|mbstring|imagick|openssl|PDO|redis|session'
然后打开 php.ini
文件,搜索查找 disable_functions
,将该值清空,例如:
...
+; This directive allows you to disable certain functions.
+; It receives a comma-delimited list of function names.
+; https://php.net/disable-functions
+disable_functions =
+...
修改后重启 PHP 服务。 然后确保新服务器已安装 PHP 5.7+ 以及 Redis 7.0+。
将打包后的代码和数据库文件,上传到新服务器站点目录解压,并导入数据库。
打开根目录 .env
文件,修改数据库连接信息:
APP_DEBUG=true 开启调试模式
+DB_CONNECTION=mysql 数据库类型
+DB_HOST=127.0.0.1 数据库连接地址
+DB_PORT=3306 数据库连接端口
+DB_DATABASE=lsky_pro 数据库名称
+DB_USERNAME=root 数据库用户名
+DB_PASSWORD=root 数据库密码
+
+REDIS_HOST=127.0.0.1 Redis 连接地址,一般默认就好
+REDIS_PASSWORD=null Redis 连接密码,一般默认就好
+REDIS_PORT=6379 Redis 连接端口,一般默认就好
将以上配置修改为你的环境对应配置值,然后配置站点伪静态、运行目录、设置站点文件权限。具体操作可参考安装章节第二步-准备运行环境
进入 SSH 终端,进入站点目录,然后执行重新生成符号链接命令:
php artisan lsky:symlinks
注意
如果你使用了本地的储存策略,需要进入后台编辑该策略,重新保存一下以生成对应储存的符号连接。
参考安装文档中的最后一步-命令行配置-重要,配置配置异步队列和计划任务 (重要)
`,29)]))}const k=a(p,[["render",t]]);export{u as __pageData,k as default}; diff --git a/assets/archive_enterprise_v1_quick-start_questions.md.Chg6jsgY.js b/assets/archive_enterprise_v1_quick-start_questions.md.Chg6jsgY.js new file mode 100644 index 00000000..4f5d135d --- /dev/null +++ b/assets/archive_enterprise_v1_quick-start_questions.md.Chg6jsgY.js @@ -0,0 +1,10 @@ +import{_ as e,c as s,a2 as t,o as r}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"常见问题","description":"常见的问题以及解决方法","frontmatter":{"title":"常见问题","description":"常见的问题以及解决方法"},"headers":[],"relativePath":"archive/enterprise/v1/quick-start/questions.md","filePath":"zh/archive/enterprise/v1/quick-start/questions.md","lastUpdated":1731937690000}'),o={name:"archive/enterprise/v1/quick-start/questions.md"};function n(i,a,l,p,d,c){return r(),s("div",null,a[0]||(a[0]=[t(`不支持的数据库版本,请参阅 支持的数据库 章节
请检查伪静态、站点运行目录是否设置正确,如果确认正确请尝试重启。
严格来说,svg 不是图片,是通过 xml 标记语言实现的矢量图形,也就是说 svg 不支持加水印、生成缩略图、获取宽高能一系列操作,这破坏了系统中很多业务流程。
不可以,程序定位就是管理图片,未做任何图片以外格式的文件支持。
其一,由于第三方储存的多样性,有些第三方储存通过客户端直传后程序拿不到需要的数据,其二,太麻烦了。
是 feature,在同一个储存策略下,上传相同的图片,程序不会重复的写入文件,但会创建文件记录,多条记录指向同一个物理文件。
这与浏览器限制有关,站点必须以 https 的方式访问。了解更多 https://w3c.github.io/clipboard-apis/#dom-navigator-clipboard
原图保护功能指的是开启后,上传后图片返回的 url 中不是图片的真实路径,而是一串随机字符串。开启后将会消耗更多的内存。
这种情况是因为运行环境接管图片资源导致的,请更改 nginx 或 apache 的配置,例如 nginx:
# ...
+
+location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
+{
+ expires 30d;
+ error_log /dev/null;
+ access_log /dev/null;
+}
+
+# ...
将这段代码注释掉即可。
如果你使用了 cdn,请检查是否未刷新 cdn 的缓存。
上传失败有很多原因,比如配置错误、文件较大返回 423 Request Entity Too Large、生成缩略图时图片较大导致超时被强行断开连接等等,出现错误通常情况下可以在storage/logs
文件夹下找到错误日志,如果没有则表示错误并不是发生在程序中,而是外在原因。
这种情况通常是因为你的程序正在从 80 端口进行转发流量,详细解释和解决方法:https://laravel.com/docs/9.x/requests#configuring-trusted-proxies 请尝试增加反向代理配置:
proxy_set_header X-Forwarded-Proto $scheme;
市面上各种厂家的产品层出不穷,兰空图床只会对主流的、具备相应接口的产品作适配,兰空图床的储存是由 flysystem 实现,欢迎你提交 PR!
可以,编辑 .env
文件,增加一项配置:THUMBNAIL_PATH=your folder
然后删除 public
目录下的缩略图符号连接,然后执行 php artisan lsky:symlinks
但是请注意,此操作影响所以图片的缩略图地址,包括已上传的图片。
可以,编辑 .env
文件,增加一项配置: ENABLE_THUMBNAIL=false
你可以通过执行命令 php artisan lsky:thumbnails
来重新生成所有图片的缩略图,但是注意,这个操作等待时间可能会比较漫长,取决于图片数量。
在 public/js
目录下新建 custom.js
文件,程序会自动加载该 js 文件,如果单个js文件不满足需求,还可以在 resources/views/layouts
目录新建 custom.blade.php
文件,在里面可以添加任何代码。
你可以通过在 .env
文件中增加配置 REDIS_DB=0
和 REDIS_CACHE_DB=1
来指定库。
不支持的数据库版本,请参阅 支持的数据库 章节
请检查伪静态、站点运行目录是否设置正确,如果确认正确请尝试重启。
严格来说,svg 不是图片,是通过 xml 标记语言实现的矢量图形,也就是说 svg 不支持加水印、生成缩略图、获取宽高能一系列操作,这破坏了系统中很多业务流程。
不可以,程序定位就是管理图片,未做任何图片以外格式的文件支持。
其一,由于第三方储存的多样性,有些第三方储存通过客户端直传后程序拿不到需要的数据,其二,太麻烦了。
是 feature,在同一个储存策略下,上传相同的图片,程序不会重复的写入文件,但会创建文件记录,多条记录指向同一个物理文件。
这与浏览器限制有关,站点必须以 https 的方式访问。了解更多 https://w3c.github.io/clipboard-apis/#dom-navigator-clipboard
原图保护功能指的是开启后,上传后图片返回的 url 中不是图片的真实路径,而是一串随机字符串。开启后将会消耗更多的内存。
这种情况是因为运行环境接管图片资源导致的,请更改 nginx 或 apache 的配置,例如 nginx:
# ...
+
+location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
+{
+ expires 30d;
+ error_log /dev/null;
+ access_log /dev/null;
+}
+
+# ...
将这段代码注释掉即可。
如果你使用了 cdn,请检查是否未刷新 cdn 的缓存。
上传失败有很多原因,比如配置错误、文件较大返回 423 Request Entity Too Large、生成缩略图时图片较大导致超时被强行断开连接等等,出现错误通常情况下可以在storage/logs
文件夹下找到错误日志,如果没有则表示错误并不是发生在程序中,而是外在原因。
这种情况通常是因为你的程序正在从 80 端口进行转发流量,详细解释和解决方法:https://laravel.com/docs/9.x/requests#configuring-trusted-proxies 请尝试增加反向代理配置:
proxy_set_header X-Forwarded-Proto $scheme;
市面上各种厂家的产品层出不穷,兰空图床只会对主流的、具备相应接口的产品作适配,兰空图床的储存是由 flysystem 实现,欢迎你提交 PR!
可以,编辑 .env
文件,增加一项配置:THUMBNAIL_PATH=your folder
然后删除 public
目录下的缩略图符号连接,然后执行 php artisan lsky:symlinks
但是请注意,此操作影响所以图片的缩略图地址,包括已上传的图片。
可以,编辑 .env
文件,增加一项配置: ENABLE_THUMBNAIL=false
你可以通过执行命令 php artisan lsky:thumbnails
来重新生成所有图片的缩略图,但是注意,这个操作等待时间可能会比较漫长,取决于图片数量。
在 public/js
目录下新建 custom.js
文件,程序会自动加载该 js 文件,如果单个js文件不满足需求,还可以在 resources/views/layouts
目录新建 custom.blade.php
文件,在里面可以添加任何代码。
你可以通过在 .env
文件中增加配置 REDIS_DB=0
和 REDIS_CACHE_DB=1
来指定库。
注意
APP_URL
、APP_SERIAL_NO
、APP_SECRET
生成签名,如果配置错误,您将会在这个页面收到错误通知: No permission
。兰空图床支持从 web 端直接升级版本,但不会提醒有新版本发布。
由于网络原因,您的服务器可能无法从兰空图床的服务接口中下载补丁包, 但是在升级页面监测到新版本后,会同时显示一个补丁包的下载链接,下载该补丁包后,将补丁包重命名为 upgrade.zip
并放到站点的根目录中(与 .env
文件同级),这时候在去 web 端点击安装后,程序会跳过下载补丁包的步骤,直接进行安装。
注意
APP_URL
、APP_SERIAL_NO
、APP_SECRET
生成签名,如果配置错误,您将会在这个页面收到错误通知: No permission
。兰空图床支持从 web 端直接升级版本,但不会提醒有新版本发布。
由于网络原因,您的服务器可能无法从兰空图床的服务接口中下载补丁包, 但是在升级页面监测到新版本后,会同时显示一个补丁包的下载链接,下载该补丁包后,将补丁包重命名为 upgrade.zip
并放到站点的根目录中(与 .env
文件同级),这时候在去 web 端点击安装后,程序会跳过下载补丁包的步骤,直接进行安装。
请检查新环境中 PHP
是否安装了 fileinfo
拓展,PHP
版本是否大于 5.6
,小于 7.4
请仔细按照文档中描述的进行配置,通常是因为配置错误,或第三方储存账号没有权限所导致
指的是某用户组使用该储存策略后上传成功得到的链接域名,如果域名不加 http://
,系统则会在上传后自动追加 http://
,想要得到 https://
的链接,直接在域名前加上 https://
即可,不填则会默认使用站点域名
upload File size exceeds the maximum value
? 请修改 PHP 的最大上传文件大小限制,如何修改请问度娘
这是由于服务器开启了防火墙(参数过滤)功能,导致了自定义 css、js (或在系统公告中使用了 html 标签)被拦截造成的错误,要么关闭防火墙,要么清空自定义 css 和 js 后保存
这是因为图片鉴黄接口的服务器在国外,图片是优先上传到你的服务器,然后鉴黄服务器通过你的图片链接进行抓取图片,你的服务器如果是在中国大陆,就会造成上传很慢的现象。事实上只要开启了鉴黄就会多出一个两个服务器进行通信的步骤,会增加图片上传的时间。
第一步请先确定 PHP
是否开启了 FTP
拓展,然后确保你的 FTP
是能通过外网连接的,可以先使用 FTP
软件进行测试是否连接成功。
重新安装的时候, 站点开启了单用户模式, 会造成重定向冲突, 解决方法是暂时关闭单用户模式
在线功能可能因为你的服务器无法请求 https://api.lsky.pro 或 Github 导致无法获取最新版本信息或安装包下载失败。若在线更新失败,请参考 系统升级
章节处理。
请检查新环境中 PHP
是否安装了 fileinfo
拓展,PHP
版本是否大于 5.6
,小于 7.4
请仔细按照文档中描述的进行配置,通常是因为配置错误,或第三方储存账号没有权限所导致
指的是某用户组使用该储存策略后上传成功得到的链接域名,如果域名不加 http://
,系统则会在上传后自动追加 http://
,想要得到 https://
的链接,直接在域名前加上 https://
即可,不填则会默认使用站点域名
upload File size exceeds the maximum value
? 请修改 PHP 的最大上传文件大小限制,如何修改请问度娘
这是由于服务器开启了防火墙(参数过滤)功能,导致了自定义 css、js (或在系统公告中使用了 html 标签)被拦截造成的错误,要么关闭防火墙,要么清空自定义 css 和 js 后保存
这是因为图片鉴黄接口的服务器在国外,图片是优先上传到你的服务器,然后鉴黄服务器通过你的图片链接进行抓取图片,你的服务器如果是在中国大陆,就会造成上传很慢的现象。事实上只要开启了鉴黄就会多出一个两个服务器进行通信的步骤,会增加图片上传的时间。
第一步请先确定 PHP
是否开启了 FTP
拓展,然后确保你的 FTP
是能通过外网连接的,可以先使用 FTP
软件进行测试是否连接成功。
重新安装的时候, 站点开启了单用户模式, 会造成重定向冲突, 解决方法是暂时关闭单用户模式
在线功能可能因为你的服务器无法请求 https://api.lsky.pro 或 Github 导致无法获取最新版本信息或安装包下载失败。若在线更新失败,请参考 系统升级
章节处理。
因 Lsky Pro 需要使用 rewrite 重写 url,所以不支持虚拟主机安装。
Lsky Pro 安装全程可视化页面,只需要下载程序解压到 web 站点目录,访问首页会自动跳转到安装页面,根据提示操作即可,具体步骤:
下载兰空,上传至 web 运行环境,解压。
设置运行目录为 public。
配置 Rewrite 规则:
location / {
+ if (!-e $request_filename) {
+ rewrite ^(.*)$ /index.php?s=$1 last; break;
+ }
+}
.htaccess
即可。访问首页,未安装自动跳转至安装页面,根据页面提示安装即可。
安装完成以后请设置runtime目录 0755
权限,如果你使用本地存储,public
目录也需要设置为 0755
权限。
注意
1.6.0 版本开始, 不再支持修改网站运行目录
因 Lsky Pro 需要使用 rewrite 重写 url,所以不支持虚拟主机安装。
Lsky Pro 安装全程可视化页面,只需要下载程序解压到 web 站点目录,访问首页会自动跳转到安装页面,根据提示操作即可,具体步骤:
下载兰空,上传至 web 运行环境,解压。
设置运行目录为 public。
配置 Rewrite 规则:
location / {
+ if (!-e $request_filename) {
+ rewrite ^(.*)$ /index.php?s=$1 last; break;
+ }
+}
.htaccess
即可。访问首页,未安装自动跳转至安装页面,根据页面提示安装即可。
安装完成以后请设置runtime目录 0755
权限,如果你使用本地存储,public
目录也需要设置为 0755
权限。
注意
1.6.0 版本开始, 不再支持修改网站运行目录
此功能默认关闭,开启后即关闭注册,注册按钮会呈现不可点击的状态。
网站的标题。
网站关键字,利于搜索引擎关键字索引,多个请使用英文逗号分隔。
使用自定义 css 可以做到覆盖整站的任何标签样式,保存前建议先压缩 css
可自定义第三方统计代码
域名备案号,填写后会显示在网站底部。
将会在首页显示的公告内容,为空则不显示,支持使用 html 标签
',14)]))}const u=e(i,[["render",s]]);export{f as __pageData,u as default}; diff --git a/assets/archive_free_v1_SP_BasicConf.md.B-EXp6mo.lean.js b/assets/archive_free_v1_SP_BasicConf.md.B-EXp6mo.lean.js new file mode 100644 index 00000000..aa6d5410 --- /dev/null +++ b/assets/archive_free_v1_SP_BasicConf.md.B-EXp6mo.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as r,o}from"./chunks/framework.DPuwY6B9.js";const f=JSON.parse('{"title":"基础配置","description":"","frontmatter":{"title":"基础配置"},"headers":[],"relativePath":"archive/free/v1/SP/BasicConf.md","filePath":"zh/archive/free/v1/SP/BasicConf.md","lastUpdated":1731937013000}'),i={name:"archive/free/v1/SP/BasicConf.md"};function s(h,a,n,l,c,d){return o(),t("div",null,a[0]||(a[0]=[r('此功能默认关闭,开启后即关闭注册,注册按钮会呈现不可点击的状态。
网站的标题。
网站关键字,利于搜索引擎关键字索引,多个请使用英文逗号分隔。
使用自定义 css 可以做到覆盖整站的任何标签样式,保存前建议先压缩 css
可自定义第三方统计代码
域名备案号,填写后会显示在网站底部。
将会在首页显示的公告内容,为空则不显示,支持使用 html 标签
',14)]))}const u=e(i,[["render",s]]);export{f as __pageData,u as default}; diff --git a/assets/archive_free_v1_SP_ImgSex.md.DWUG-prJ.js b/assets/archive_free_v1_SP_ImgSex.md.DWUG-prJ.js new file mode 100644 index 00000000..f4c09c76 --- /dev/null +++ b/assets/archive_free_v1_SP_ImgSex.md.DWUG-prJ.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as r,o}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"图片鉴黄","description":"","frontmatter":{"title":"图片鉴黄"},"headers":[],"relativePath":"archive/free/v1/SP/ImgSex.md","filePath":"zh/archive/free/v1/SP/ImgSex.md","lastUpdated":1731937013000}'),i={name:"archive/free/v1/SP/ImgSex.md"};function c(l,e,n,d,s,h){return o(),t("div",null,e[0]||(e[0]=[r('图片鉴黄申请地址:https://www.moderatecontent.com
此选项默认关闭,开启后,上传图片会通过鉴黄接口处理,发现黄图将会上传失败。 注意:开启图片鉴黄后会拖慢上传图片速度,接口在墙外的原因,也可能会导致上传失败。
你申请的图片鉴黄接口Key。
图片鉴黄分为三个级别,分别为:所有人、少年、成人,默认为成人。
从 V1.5.3版本开始,程序 config 文件夹下新增了一个 site.php
配置文件,该文件下有个配置项名为 intercept_salacity
,将该配置值修改为 true
,上传的图片若被判断为可疑图片则会直接拦截。默认为 false
(上传后在可疑图片里)
该配置已经移动至环境变量,请参考环境变量章节
',11)]))}const f=a(i,[["render",c]]);export{m as __pageData,f as default}; diff --git a/assets/archive_free_v1_SP_ImgSex.md.DWUG-prJ.lean.js b/assets/archive_free_v1_SP_ImgSex.md.DWUG-prJ.lean.js new file mode 100644 index 00000000..f4c09c76 --- /dev/null +++ b/assets/archive_free_v1_SP_ImgSex.md.DWUG-prJ.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as r,o}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"图片鉴黄","description":"","frontmatter":{"title":"图片鉴黄"},"headers":[],"relativePath":"archive/free/v1/SP/ImgSex.md","filePath":"zh/archive/free/v1/SP/ImgSex.md","lastUpdated":1731937013000}'),i={name:"archive/free/v1/SP/ImgSex.md"};function c(l,e,n,d,s,h){return o(),t("div",null,e[0]||(e[0]=[r('图片鉴黄申请地址:https://www.moderatecontent.com
此选项默认关闭,开启后,上传图片会通过鉴黄接口处理,发现黄图将会上传失败。 注意:开启图片鉴黄后会拖慢上传图片速度,接口在墙外的原因,也可能会导致上传失败。
你申请的图片鉴黄接口Key。
图片鉴黄分为三个级别,分别为:所有人、少年、成人,默认为成人。
从 V1.5.3版本开始,程序 config 文件夹下新增了一个 site.php
配置文件,该文件下有个配置项名为 intercept_salacity
,将该配置值修改为 true
,上传的图片若被判断为可疑图片则会直接拦截。默认为 false
(上传后在可疑图片里)
该配置已经移动至环境变量,请参考环境变量章节
',11)]))}const f=a(i,[["render",c]]);export{m as __pageData,f as default}; diff --git a/assets/archive_free_v1_SP_MailConf.md.I801Np22.js b/assets/archive_free_v1_SP_MailConf.md.I801Np22.js new file mode 100644 index 00000000..0ca8dcdc --- /dev/null +++ b/assets/archive_free_v1_SP_MailConf.md.I801Np22.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as r,o}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"邮件配置","description":"","frontmatter":{"title":"邮件配置"},"headers":[],"relativePath":"archive/free/v1/SP/MailConf.md","filePath":"zh/archive/free/v1/SP/MailConf.md","lastUpdated":1731937013000}'),i={name:"archive/free/v1/SP/MailConf.md"};function s(l,a,n,h,p,d){return o(),t("div",null,a[0]||(a[0]=[r('默认SMTP,暂时只支持SMTP方式发送邮件。
可选值:NONE/TLS/SSL,选择了None表示不验证。
SMTP主机地址,例如126邮箱的smtp服务地址为 smtp.126.com
SMTP登录用户名。
SMTP登录密码。
SMTP连接端口。
发件人邮箱,填写SMTP登录邮箱。
',14)]))}const P=e(i,[["render",s]]);export{m as __pageData,P as default}; diff --git a/assets/archive_free_v1_SP_MailConf.md.I801Np22.lean.js b/assets/archive_free_v1_SP_MailConf.md.I801Np22.lean.js new file mode 100644 index 00000000..0ca8dcdc --- /dev/null +++ b/assets/archive_free_v1_SP_MailConf.md.I801Np22.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as r,o}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"邮件配置","description":"","frontmatter":{"title":"邮件配置"},"headers":[],"relativePath":"archive/free/v1/SP/MailConf.md","filePath":"zh/archive/free/v1/SP/MailConf.md","lastUpdated":1731937013000}'),i={name:"archive/free/v1/SP/MailConf.md"};function s(l,a,n,h,p,d){return o(),t("div",null,a[0]||(a[0]=[r('默认SMTP,暂时只支持SMTP方式发送邮件。
可选值:NONE/TLS/SSL,选择了None表示不验证。
SMTP主机地址,例如126邮箱的smtp服务地址为 smtp.126.com
SMTP登录用户名。
SMTP登录密码。
SMTP连接端口。
发件人邮箱,填写SMTP登录邮箱。
',14)]))}const P=e(i,[["render",s]]);export{m as __pageData,P as default}; diff --git a/assets/archive_free_v1_SP_OtherConf.md.sPYqLsdp.js b/assets/archive_free_v1_SP_OtherConf.md.sPYqLsdp.js new file mode 100644 index 00000000..3569cad4 --- /dev/null +++ b/assets/archive_free_v1_SP_OtherConf.md.sPYqLsdp.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as r,o}from"./chunks/framework.DPuwY6B9.js";const f=JSON.parse('{"title":"其他配置","description":"","frontmatter":{"title":"其他配置"},"headers":[],"relativePath":"archive/free/v1/SP/OtherConf.md","filePath":"zh/archive/free/v1/SP/OtherConf.md","lastUpdated":1731937013000}'),i={name:"archive/free/v1/SP/OtherConf.md"};function c(n,e,d,s,l,p){return o(),t("div",null,e[0]||(e[0]=[r('此选项默认关闭,开启后,删除图片只删除记录,不删除图片文件。
此选项默认关闭,开启后将会开放站点的API接口,左侧导航栏会出现“接口”入口。
封禁IP功能, 多个IP使用英文逗号隔开, 被封禁的IP访问网站会抛出403异常. 支持通配符匹配, 像这样: 127.0.0.*
或者 127.0.*.1
, 甚至可以这样: 127.*
注意!
请不要视图 ban 掉自己的 IP, 这样会导致你无法访问网站。
此选项默认关闭,开启后,删除图片只删除记录,不删除图片文件。
此选项默认关闭,开启后将会开放站点的API接口,左侧导航栏会出现“接口”入口。
封禁IP功能, 多个IP使用英文逗号隔开, 被封禁的IP访问网站会抛出403异常. 支持通配符匹配, 像这样: 127.0.0.*
或者 127.0.*.1
, 甚至可以这样: 127.*
注意!
请不要视图 ban 掉自己的 IP, 这样会导致你无法访问网站。
是否开启游客上传,此选项默认开启,打开后访客无需登录也可以上传图片。
限制单张上传图片大小,默认5242880
(5M),单位:b
上传每次可选择图片数量
允许可上传的图片后缀名,逗号隔开,默认为 jpg,jpeg,gif,png,ico
(结尾不需要逗号)
默认为 {Y}/{m}/{d}
,生成的路径类似:2018/01/04
默认为 {uniqid}
,生成的名称类似:5bb2f89a38935.jpg
是否开启游客上传,此选项默认开启,打开后访客无需登录也可以上传图片。
限制单张上传图片大小,默认5242880
(5M),单位:b
上传每次可选择图片数量
允许可上传的图片后缀名,逗号隔开,默认为 jpg,jpeg,gif,png,ico
(结尾不需要逗号)
默认为 {Y}/{m}/{d}
,生成的路径类似:2018/01/04
默认为 {uniqid}
,生成的名称类似:5bb2f89a38935.jpg
阿里云对象储存OSS开通地址:https://www.aliyun.com/product/oss OSS对象储存控制台:https://oss.console.aliyun.com/overview
如图:
填写你的Bucket名称,如下图
Bucket地域可根据你的服务器地域来决定,注意读写权限要设置为公共读,填好后点击确定创建Bucket。
创建成功后自动跳转到控制台。
使用OSS对象储存需要用到阿里云账号的accesskeys,我们首先获取accesskeys。
点击进去后会有一个安全提示,请选择“继续使用AccessKey”
然后点击显示你的 AccessKeySecret
现在已经获取到阿里云OSS储存策略需要的全部配置了
点击OSS控制台的概览
可以看到对象储存的外网访问域名。
我们打开Lsky Pro管理后台,点击储存策略,选择阿里云OSS,填写如下图:
此处填写的Bucket域名填写的是对象储存默认的CDN域名,如果你的对象储存OSS绑定了自定义CDN域名,请填写你所绑定的域名,如果不加访问协议,默认使用的是http,你也可以在域名前加上协议,例如:https://域名。(https前提条件是你的域名正确的配置了SSL证书)
填写好以后点击保存即可。
',22)]))}const u=t(r,[["render",s]]);export{h as __pageData,u as default}; diff --git a/assets/archive_free_v1_SS_AliyunOSS.md.ZLNmd8FV.lean.js b/assets/archive_free_v1_SS_AliyunOSS.md.ZLNmd8FV.lean.js new file mode 100644 index 00000000..d79c9e15 --- /dev/null +++ b/assets/archive_free_v1_SS_AliyunOSS.md.ZLNmd8FV.lean.js @@ -0,0 +1 @@ +import{_ as t,c as a,a2 as c,o as p}from"./chunks/framework.DPuwY6B9.js";const h=JSON.parse('{"title":"阿里云OSS","description":"","frontmatter":{"title":"阿里云OSS"},"headers":[],"relativePath":"archive/free/v1/SS/AliyunOSS.md","filePath":"zh/archive/free/v1/SS/AliyunOSS.md","lastUpdated":1731937013000}'),r={name:"archive/free/v1/SS/AliyunOSS.md"};function s(o,e,n,S,l,d){return p(),a("div",null,e[0]||(e[0]=[c('阿里云对象储存OSS开通地址:https://www.aliyun.com/product/oss OSS对象储存控制台:https://oss.console.aliyun.com/overview
如图:
填写你的Bucket名称,如下图
Bucket地域可根据你的服务器地域来决定,注意读写权限要设置为公共读,填好后点击确定创建Bucket。
创建成功后自动跳转到控制台。
使用OSS对象储存需要用到阿里云账号的accesskeys,我们首先获取accesskeys。
点击进去后会有一个安全提示,请选择“继续使用AccessKey”
然后点击显示你的 AccessKeySecret
现在已经获取到阿里云OSS储存策略需要的全部配置了
点击OSS控制台的概览
可以看到对象储存的外网访问域名。
我们打开Lsky Pro管理后台,点击储存策略,选择阿里云OSS,填写如下图:
此处填写的Bucket域名填写的是对象储存默认的CDN域名,如果你的对象储存OSS绑定了自定义CDN域名,请填写你所绑定的域名,如果不加访问协议,默认使用的是http,你也可以在域名前加上协议,例如:https://域名。(https前提条件是你的域名正确的配置了SSL证书)
填写好以后点击保存即可。
',22)]))}const u=t(r,[["render",s]]);export{h as __pageData,u as default}; diff --git a/assets/archive_free_v1_SS_FTP.md.5KBcR0WR.js b/assets/archive_free_v1_SS_FTP.md.5KBcR0WR.js new file mode 100644 index 00000000..96e116dc --- /dev/null +++ b/assets/archive_free_v1_SS_FTP.md.5KBcR0WR.js @@ -0,0 +1 @@ +import{_ as a,c,j as e,a as r,o as s}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"FTP","description":"","frontmatter":{"title":"FTP"},"headers":[],"relativePath":"archive/free/v1/SS/FTP.md","filePath":"zh/archive/free/v1/SS/FTP.md","lastUpdated":1731937013000}'),l={name:"archive/free/v1/SS/FTP.md"};function o(n,t,i,d,p,f){return s(),c("div",null,t[0]||(t[0]=[e("div",{class:"warning custom-block"},[e("p",{class:"custom-block-title"},"注意!"),e("p",null,"使用 FTP 功能,需要 PHP 的 FTP 函数支持!")],-1),e("p",null,[r("配置预览: "),e("img",{src:"https://img.kancloud.cn/8f/6e/8f6e21f9e2bc7ca545c1adee975bd393_1118x710.png",alt:"FTP-img"})],-1),e("blockquote",null,[e("p",null,"1.6.0 版本后增加了被动模式")],-1)]))}const P=a(l,[["render",o]]);export{u as __pageData,P as default}; diff --git a/assets/archive_free_v1_SS_FTP.md.5KBcR0WR.lean.js b/assets/archive_free_v1_SS_FTP.md.5KBcR0WR.lean.js new file mode 100644 index 00000000..96e116dc --- /dev/null +++ b/assets/archive_free_v1_SS_FTP.md.5KBcR0WR.lean.js @@ -0,0 +1 @@ +import{_ as a,c,j as e,a as r,o as s}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"FTP","description":"","frontmatter":{"title":"FTP"},"headers":[],"relativePath":"archive/free/v1/SS/FTP.md","filePath":"zh/archive/free/v1/SS/FTP.md","lastUpdated":1731937013000}'),l={name:"archive/free/v1/SS/FTP.md"};function o(n,t,i,d,p,f){return s(),c("div",null,t[0]||(t[0]=[e("div",{class:"warning custom-block"},[e("p",{class:"custom-block-title"},"注意!"),e("p",null,"使用 FTP 功能,需要 PHP 的 FTP 函数支持!")],-1),e("p",null,[r("配置预览: "),e("img",{src:"https://img.kancloud.cn/8f/6e/8f6e21f9e2bc7ca545c1adee975bd393_1118x710.png",alt:"FTP-img"})],-1),e("blockquote",null,[e("p",null,"1.6.0 版本后增加了被动模式")],-1)]))}const P=a(l,[["render",o]]);export{u as __pageData,P as default}; diff --git a/assets/archive_free_v1_SS_KODO.md.CvkTjOeq.js b/assets/archive_free_v1_SS_KODO.md.CvkTjOeq.js new file mode 100644 index 00000000..12b89dbf --- /dev/null +++ b/assets/archive_free_v1_SS_KODO.md.CvkTjOeq.js @@ -0,0 +1 @@ +import{_ as e,c as p,a2 as a,o as c}from"./chunks/framework.DPuwY6B9.js";const O=JSON.parse('{"title":"七牛云KODO","description":"","frontmatter":{"title":"七牛云KODO"},"headers":[],"relativePath":"archive/free/v1/SS/KODO.md","filePath":"zh/archive/free/v1/SS/KODO.md","lastUpdated":1731937013000}'),r={name:"archive/free/v1/SS/KODO.md"};function o(n,t,s,d,l,i){return c(),p("div",null,t[0]||(t[0]=[a('七牛云对象储存申请地址:https://www.qiniu.com/products/kodo
申请后进入对象储存控制台,点击“新建储存空间”。
注意访问控制选项选择公开空间,然后点击确定创建。
创建后我们先待定,鼠标点击右上角“个人面板”,然后点击“密钥管理”。
然后获取到你的AK(AccessKey)和SK(SecretKey)并保存下来,如果没有请创建密钥。
保存后我们回到对象储存,点击你刚刚创建的储存空间。
然后在右侧你可以看到储存空间默认的测试域名,该域名仅用于测试,从创建空间起开始,30天
后自动回收,墙裂建议你绑定自定义域名。
让我们在回到Lsky Pro后台管理->储存策略->七牛云,填写相应的配置信息,如下图
加速域名如果不加访问协议,默认使用的是http,你也可以在域名前加上协议,例如:https://域名。(https前提条件是你的域名正确的配置了SSL证书)
填写完毕后点击保存即可。
',16)]))}const h=e(r,[["render",o]]);export{O as __pageData,h as default}; diff --git a/assets/archive_free_v1_SS_KODO.md.CvkTjOeq.lean.js b/assets/archive_free_v1_SS_KODO.md.CvkTjOeq.lean.js new file mode 100644 index 00000000..12b89dbf --- /dev/null +++ b/assets/archive_free_v1_SS_KODO.md.CvkTjOeq.lean.js @@ -0,0 +1 @@ +import{_ as e,c as p,a2 as a,o as c}from"./chunks/framework.DPuwY6B9.js";const O=JSON.parse('{"title":"七牛云KODO","description":"","frontmatter":{"title":"七牛云KODO"},"headers":[],"relativePath":"archive/free/v1/SS/KODO.md","filePath":"zh/archive/free/v1/SS/KODO.md","lastUpdated":1731937013000}'),r={name:"archive/free/v1/SS/KODO.md"};function o(n,t,s,d,l,i){return c(),p("div",null,t[0]||(t[0]=[a('七牛云对象储存申请地址:https://www.qiniu.com/products/kodo
申请后进入对象储存控制台,点击“新建储存空间”。
注意访问控制选项选择公开空间,然后点击确定创建。
创建后我们先待定,鼠标点击右上角“个人面板”,然后点击“密钥管理”。
然后获取到你的AK(AccessKey)和SK(SecretKey)并保存下来,如果没有请创建密钥。
保存后我们回到对象储存,点击你刚刚创建的储存空间。
然后在右侧你可以看到储存空间默认的测试域名,该域名仅用于测试,从创建空间起开始,30天
后自动回收,墙裂建议你绑定自定义域名。
让我们在回到Lsky Pro后台管理->储存策略->七牛云,填写相应的配置信息,如下图
加速域名如果不加访问协议,默认使用的是http,你也可以在域名前加上协议,例如:https://域名。(https前提条件是你的域名正确的配置了SSL证书)
填写完毕后点击保存即可。
',16)]))}const h=e(r,[["render",o]]);export{O as __pageData,h as default}; diff --git a/assets/archive_free_v1_SS_Local.md.BhIy2R0r.js b/assets/archive_free_v1_SS_Local.md.BhIy2R0r.js new file mode 100644 index 00000000..5e67ef77 --- /dev/null +++ b/assets/archive_free_v1_SS_Local.md.BhIy2R0r.js @@ -0,0 +1 @@ +import{_ as a,c as r,j as e,o}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"本地","description":"","frontmatter":{"title":"本地"},"headers":[],"relativePath":"archive/free/v1/SS/Local.md","filePath":"zh/archive/free/v1/SS/Local.md","lastUpdated":1731937013000}'),n={name:"archive/free/v1/SS/Local.md"};function c(l,t,s,d,i,p){return o(),r("div",null,t[0]||(t[0]=[e("p",null,[e("strong",null,"本地储存策略,指的是所有用户上传的图片都存在本地服务器,此方式会占用服务器资源、带宽,不建议使用该方式。")],-1),e("p",null,"使用本地策略默认无需配置任何参数,如果你的站点绑定了另一个域名(例如cdn域名),可绑定这个域名,上传后的文件则使用的是绑定的cdn域名。",-1)]))}const _=a(n,[["render",c]]);export{m as __pageData,_ as default}; diff --git a/assets/archive_free_v1_SS_Local.md.BhIy2R0r.lean.js b/assets/archive_free_v1_SS_Local.md.BhIy2R0r.lean.js new file mode 100644 index 00000000..5e67ef77 --- /dev/null +++ b/assets/archive_free_v1_SS_Local.md.BhIy2R0r.lean.js @@ -0,0 +1 @@ +import{_ as a,c as r,j as e,o}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"本地","description":"","frontmatter":{"title":"本地"},"headers":[],"relativePath":"archive/free/v1/SS/Local.md","filePath":"zh/archive/free/v1/SS/Local.md","lastUpdated":1731937013000}'),n={name:"archive/free/v1/SS/Local.md"};function c(l,t,s,d,i,p){return o(),r("div",null,t[0]||(t[0]=[e("p",null,[e("strong",null,"本地储存策略,指的是所有用户上传的图片都存在本地服务器,此方式会占用服务器资源、带宽,不建议使用该方式。")],-1),e("p",null,"使用本地策略默认无需配置任何参数,如果你的站点绑定了另一个域名(例如cdn域名),可绑定这个域名,上传后的文件则使用的是绑定的cdn域名。",-1)]))}const _=a(n,[["render",c]]);export{m as __pageData,_ as default}; diff --git a/assets/archive_free_v1_SS_TencentCloudCOS.md.CYQZ-dwZ.js b/assets/archive_free_v1_SS_TencentCloudCOS.md.CYQZ-dwZ.js new file mode 100644 index 00000000..fcdf0414 --- /dev/null +++ b/assets/archive_free_v1_SS_TencentCloudCOS.md.CYQZ-dwZ.js @@ -0,0 +1 @@ +import{_ as e,c as p,a2 as c,o as a}from"./chunks/framework.DPuwY6B9.js";const i=JSON.parse('{"title":"腾讯云COS","description":"","frontmatter":{"title":"腾讯云COS"},"headers":[],"relativePath":"archive/free/v1/SS/TencentCloudCOS.md","filePath":"zh/archive/free/v1/SS/TencentCloudCOS.md","lastUpdated":1731937013000}'),n={name:"archive/free/v1/SS/TencentCloudCOS.md"};function r(o,t,s,d,l,S){return a(),p("div",null,t[0]||(t[0]=[c('腾讯云对象储存COS申请地址:https://cloud.tencent.com/product/cos
申请了腾讯云对象储存COS以后,进入对象储存控制台,然后点击储存桶列表,如下图:
然后点击创建储存桶
注意访问权限需要选择公有读私有写
创建成功后我们先暂放,鼠标悬浮右上角的昵称,点击访问管理。
然后会在左侧导航栏看到“云API密钥” -> “API密钥管理”,点击进去。
进去后会有一个高风险提示,请选择继续使用,然后你会看到你的API密钥(如果没有请新建),点击显示获取SecretKey,如下图:
获取到后请复制保存下来。
然后我们在回到储存桶列表,点击进入你刚刚创建的储存桶,再点击“域名管理”,如下图:
这张图片是后补的,因为原作者并没有在此处附图
这时候我们在打开Lsky Pro后台管理->储存策略->腾讯云COS
填写配置如图:
如果你绑定了自定义域名,这里的CDN加速域名请填写你绑定的域名,如果不加访问协议,默认使用的是http,你也可以在域名前加上协议,例如:https://域名。(https前提条件是你的域名正确的配置了SSL证书)
填写完毕后点击保存即可。
',20)]))}const g=e(n,[["render",r]]);export{i as __pageData,g as default}; diff --git a/assets/archive_free_v1_SS_TencentCloudCOS.md.CYQZ-dwZ.lean.js b/assets/archive_free_v1_SS_TencentCloudCOS.md.CYQZ-dwZ.lean.js new file mode 100644 index 00000000..fcdf0414 --- /dev/null +++ b/assets/archive_free_v1_SS_TencentCloudCOS.md.CYQZ-dwZ.lean.js @@ -0,0 +1 @@ +import{_ as e,c as p,a2 as c,o as a}from"./chunks/framework.DPuwY6B9.js";const i=JSON.parse('{"title":"腾讯云COS","description":"","frontmatter":{"title":"腾讯云COS"},"headers":[],"relativePath":"archive/free/v1/SS/TencentCloudCOS.md","filePath":"zh/archive/free/v1/SS/TencentCloudCOS.md","lastUpdated":1731937013000}'),n={name:"archive/free/v1/SS/TencentCloudCOS.md"};function r(o,t,s,d,l,S){return a(),p("div",null,t[0]||(t[0]=[c('腾讯云对象储存COS申请地址:https://cloud.tencent.com/product/cos
申请了腾讯云对象储存COS以后,进入对象储存控制台,然后点击储存桶列表,如下图:
然后点击创建储存桶
注意访问权限需要选择公有读私有写
创建成功后我们先暂放,鼠标悬浮右上角的昵称,点击访问管理。
然后会在左侧导航栏看到“云API密钥” -> “API密钥管理”,点击进去。
进去后会有一个高风险提示,请选择继续使用,然后你会看到你的API密钥(如果没有请新建),点击显示获取SecretKey,如下图:
获取到后请复制保存下来。
然后我们在回到储存桶列表,点击进入你刚刚创建的储存桶,再点击“域名管理”,如下图:
这张图片是后补的,因为原作者并没有在此处附图
这时候我们在打开Lsky Pro后台管理->储存策略->腾讯云COS
填写配置如图:
如果你绑定了自定义域名,这里的CDN加速域名请填写你绑定的域名,如果不加访问协议,默认使用的是http,你也可以在域名前加上协议,例如:https://域名。(https前提条件是你的域名正确的配置了SSL证书)
填写完毕后点击保存即可。
',20)]))}const g=e(n,[["render",r]]);export{i as __pageData,g as default}; diff --git a/assets/archive_free_v1_SS_UpyunUSS.md.D5qaJg_L.js b/assets/archive_free_v1_SS_UpyunUSS.md.D5qaJg_L.js new file mode 100644 index 00000000..4cd4b1f9 --- /dev/null +++ b/assets/archive_free_v1_SS_UpyunUSS.md.D5qaJg_L.js @@ -0,0 +1 @@ +import{_ as e,c as p,a2 as a,o as r}from"./chunks/framework.DPuwY6B9.js";const i=JSON.parse('{"title":"又拍云USS","description":"","frontmatter":{"title":"又拍云USS"},"headers":[],"relativePath":"archive/free/v1/SS/UpyunUSS.md","filePath":"zh/archive/free/v1/SS/UpyunUSS.md","lastUpdated":1731937013000}'),c={name:"archive/free/v1/SS/UpyunUSS.md"};function n(s,t,o,S,d,l){return r(),p("div",null,t[0]||(t[0]=[a('又拍云对象储存USS申请地址:https://www.upyun.com/products/file-storage
登录又拍云后,鼠标点击导航栏“云产品”,点击“云储存”。
然后点击“创建服务”,填写相应配置。
注意:服务授权你若有新建了的操作员,并且该操作员有读写删的权限,那么可选择“授权已有操作员”,红框内的三项需全部选择。
创建成功后类似如下提示:
这时候已经创建完毕了,我们在回到Lsky Pro管理后台->储存策略->又拍云,填写相应配置。
如果你绑定了自定义域名,这里的CDN加速域名请填写你绑定的域名,如果不加访问协议,默认使用的是http,你也可以在域名前加上协议,例如:https://域名。(https前提条件是你的域名正确的配置了SSL证书)
然后点击保存即可。
',12)]))}const u=e(c,[["render",n]]);export{i as __pageData,u as default}; diff --git a/assets/archive_free_v1_SS_UpyunUSS.md.D5qaJg_L.lean.js b/assets/archive_free_v1_SS_UpyunUSS.md.D5qaJg_L.lean.js new file mode 100644 index 00000000..4cd4b1f9 --- /dev/null +++ b/assets/archive_free_v1_SS_UpyunUSS.md.D5qaJg_L.lean.js @@ -0,0 +1 @@ +import{_ as e,c as p,a2 as a,o as r}from"./chunks/framework.DPuwY6B9.js";const i=JSON.parse('{"title":"又拍云USS","description":"","frontmatter":{"title":"又拍云USS"},"headers":[],"relativePath":"archive/free/v1/SS/UpyunUSS.md","filePath":"zh/archive/free/v1/SS/UpyunUSS.md","lastUpdated":1731937013000}'),c={name:"archive/free/v1/SS/UpyunUSS.md"};function n(s,t,o,S,d,l){return r(),p("div",null,t[0]||(t[0]=[a('又拍云对象储存USS申请地址:https://www.upyun.com/products/file-storage
登录又拍云后,鼠标点击导航栏“云产品”,点击“云储存”。
然后点击“创建服务”,填写相应配置。
注意:服务授权你若有新建了的操作员,并且该操作员有读写删的权限,那么可选择“授权已有操作员”,红框内的三项需全部选择。
创建成功后类似如下提示:
这时候已经创建完毕了,我们在回到Lsky Pro管理后台->储存策略->又拍云,填写相应配置。
如果你绑定了自定义域名,这里的CDN加速域名请填写你绑定的域名,如果不加访问协议,默认使用的是http,你也可以在域名前加上协议,例如:https://域名。(https前提条件是你的域名正确的配置了SSL证书)
然后点击保存即可。
',12)]))}const u=e(c,[["render",n]]);export{i as __pageData,u as default}; diff --git a/assets/archive_free_v1_StorageStrategy.md.B0b6DV_j.js b/assets/archive_free_v1_StorageStrategy.md.B0b6DV_j.js new file mode 100644 index 00000000..6b58747c --- /dev/null +++ b/assets/archive_free_v1_StorageStrategy.md.B0b6DV_j.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as r,o as S}from"./chunks/framework.DPuwY6B9.js";const d=JSON.parse('{"title":"存储策略","description":"","frontmatter":{"title":"存储策略"},"headers":[],"relativePath":"archive/free/v1/StorageStrategy.md","filePath":"zh/archive/free/v1/StorageStrategy.md","lastUpdated":1731937013000}'),i={name:"archive/free/v1/StorageStrategy.md"};function l(o,e,n,c,s,f){return S(),t("div",null,e[0]||(e[0]=[r('兰空图床v1.x支持以下六种存储策略:
',2)]))}const h=a(i,[["render",l]]);export{d as __pageData,h as default}; diff --git a/assets/archive_free_v1_StorageStrategy.md.B0b6DV_j.lean.js b/assets/archive_free_v1_StorageStrategy.md.B0b6DV_j.lean.js new file mode 100644 index 00000000..6b58747c --- /dev/null +++ b/assets/archive_free_v1_StorageStrategy.md.B0b6DV_j.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as r,o as S}from"./chunks/framework.DPuwY6B9.js";const d=JSON.parse('{"title":"存储策略","description":"","frontmatter":{"title":"存储策略"},"headers":[],"relativePath":"archive/free/v1/StorageStrategy.md","filePath":"zh/archive/free/v1/StorageStrategy.md","lastUpdated":1731937013000}'),i={name:"archive/free/v1/StorageStrategy.md"};function l(o,e,n,c,s,f){return S(),t("div",null,e[0]||(e[0]=[r('兰空图床v1.x支持以下六种存储策略:
',2)]))}const h=a(i,[["render",l]]);export{d as __pageData,h as default}; diff --git a/assets/archive_free_v1_SystemParameters.md.Cd2-U_Xr.js b/assets/archive_free_v1_SystemParameters.md.Cd2-U_Xr.js new file mode 100644 index 00000000..d8fda173 --- /dev/null +++ b/assets/archive_free_v1_SystemParameters.md.Cd2-U_Xr.js @@ -0,0 +1 @@ +import{_ as a,c as r,a2 as t,o as i}from"./chunks/framework.DPuwY6B9.js";const d=JSON.parse('{"title":"系统参数设置","description":"","frontmatter":{"title":"系统参数设置"},"headers":[],"relativePath":"archive/free/v1/SystemParameters.md","filePath":"zh/archive/free/v1/SystemParameters.md","lastUpdated":1731937013000}'),s={name:"archive/free/v1/SystemParameters.md"};function l(o,e,f,n,m,c){return i(),r("div",null,e[0]||(e[0]=[t('兰空图床有以下六大系统参数可以配置:
',2)]))}const h=a(s,[["render",l]]);export{d as __pageData,h as default}; diff --git a/assets/archive_free_v1_SystemParameters.md.Cd2-U_Xr.lean.js b/assets/archive_free_v1_SystemParameters.md.Cd2-U_Xr.lean.js new file mode 100644 index 00000000..d8fda173 --- /dev/null +++ b/assets/archive_free_v1_SystemParameters.md.Cd2-U_Xr.lean.js @@ -0,0 +1 @@ +import{_ as a,c as r,a2 as t,o as i}from"./chunks/framework.DPuwY6B9.js";const d=JSON.parse('{"title":"系统参数设置","description":"","frontmatter":{"title":"系统参数设置"},"headers":[],"relativePath":"archive/free/v1/SystemParameters.md","filePath":"zh/archive/free/v1/SystemParameters.md","lastUpdated":1731937013000}'),s={name:"archive/free/v1/SystemParameters.md"};function l(o,e,f,n,m,c){return i(),r("div",null,e[0]||(e[0]=[t('兰空图床有以下六大系统参数可以配置:
',2)]))}const h=a(s,[["render",l]]);export{d as __pageData,h as default}; diff --git a/assets/archive_free_v1_SystemUpdate.md.BsS9WCL5.js b/assets/archive_free_v1_SystemUpdate.md.BsS9WCL5.js new file mode 100644 index 00000000..0ac424ae --- /dev/null +++ b/assets/archive_free_v1_SystemUpdate.md.BsS9WCL5.js @@ -0,0 +1 @@ +import{_ as o,c,a2 as d,o as t}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"系统升级","description":"","frontmatter":{"title":"系统升级"},"headers":[],"relativePath":"archive/free/v1/SystemUpdate.md","filePath":"zh/archive/free/v1/SystemUpdate.md","lastUpdated":1734677202000}'),p={name:"archive/free/v1/SystemUpdate.md"};function i(a,e,l,r,s,n){return t(),c("div",null,e[0]||(e[0]=[d("1.6.0 版本开始, 支持在线升级功能, 1.6.0 以前的版本升级指导请参考该版本根目录下的 README.md 文件.
新版本使用在线升级的方式更新系统, 为了保证跨版本升级的兼容, 每次更新都需要下载完整的安装包.
由于 WEB 服务器环境限制, 脚本执行长时间的任务, 浏览器等待服务器返回数据的时间过长可能会遭到运行环境(Apache 和 Nginx 等)的终止, 不同的运行环境会有不同的差异, 基本都是在 30 秒.
兰空图床更新时会将 PHP
的脚本最大执行时间改为 0
, 即永不超时, 但是同样可能会遭到环境的强制终止.
如果在检测更新时出现 更新服务器异常, 请稍后重试!
,说明你的服务器无法访问到更新服务器。请尝试离线覆盖安装。方法如下:
.env
文件复制到新版本的根目录 public
目录中的文件移动的新版本的 public
目录下application
目录下新建 install.lock
文件application/sql/update.sql
导入到数据库,或直接复制文件内容执行如果在更新时出现 更新失败, 请稍后重试
的提示, 大概率是因为超时被中断, 如果出现这样的情况, 请手动通过 https://github.com/0xxb/lsky-pro/releases
下载 zip 格式的完整包, 并重命名为 upgrade.zip
移动至系统 runtime
目录中, 然后在执行更新, 这时候兰空图床会跳过下载安装包的步骤, 直接通过解压 upgrade.zip
的方式进行安装.
宝塔php7.3版本默认没有开启 ZipArchive
,更新时会出现错误,切换其他版本即可。
1.6.0 版本开始, 支持在线升级功能, 1.6.0 以前的版本升级指导请参考该版本根目录下的 README.md 文件.
新版本使用在线升级的方式更新系统, 为了保证跨版本升级的兼容, 每次更新都需要下载完整的安装包.
由于 WEB 服务器环境限制, 脚本执行长时间的任务, 浏览器等待服务器返回数据的时间过长可能会遭到运行环境(Apache 和 Nginx 等)的终止, 不同的运行环境会有不同的差异, 基本都是在 30 秒.
兰空图床更新时会将 PHP
的脚本最大执行时间改为 0
, 即永不超时, 但是同样可能会遭到环境的强制终止.
如果在检测更新时出现 更新服务器异常, 请稍后重试!
,说明你的服务器无法访问到更新服务器。请尝试离线覆盖安装。方法如下:
.env
文件复制到新版本的根目录 public
目录中的文件移动的新版本的 public
目录下application
目录下新建 install.lock
文件application/sql/update.sql
导入到数据库,或直接复制文件内容执行如果在更新时出现 更新失败, 请稍后重试
的提示, 大概率是因为超时被中断, 如果出现这样的情况, 请手动通过 https://github.com/0xxb/lsky-pro/releases
下载 zip 格式的完整包, 并重命名为 upgrade.zip
移动至系统 runtime
目录中, 然后在执行更新, 这时候兰空图床会跳过下载安装包的步骤, 直接通过解压 upgrade.zip
的方式进行安装.
宝塔php7.3版本默认没有开启 ZipArchive
,更新时会出现错误,切换其他版本即可。
手册上的更新日志从 1.5.2 版本开始记录。更多旧版本日志请参阅仓库的 releases
⚠️ 本次更新包含一个安全质量修复,该问题可能会导致站点图片被恶意跨用户删除,建议所有人更新至此版本!
FAQ:如果更新出现错误,请尝试手动访问 http://域名/install/update.html
进行更新,若还是无法更新请尝试手动导入根目录 update.sql
文件到数据库
手册上的更新日志从 1.5.2 版本开始记录。更多旧版本日志请参阅仓库的 releases
⚠️ 本次更新包含一个安全质量修复,该问题可能会导致站点图片被恶意跨用户删除,建议所有人更新至此版本!
FAQ:如果更新出现错误,请尝试手动访问 http://域名/install/update.html
进行更新,若还是无法更新请尝试手动导入根目录 update.sql
文件到数据库
1.6.3 版本以后添加了水印功能,默认不开启,需要更改环境变量文件开启,具体参考环境变量章节。
自动水印配置文件:config/watermark.php
,文件中有详细的注释说明。
每个储存策略都可以设置独立的水印配置,分为文字水印和图片水印两种类型。
enable
: 是否启用水印功能
type
: 类型[1=文字水印,2=图片水印]
text
: 水印文字
font
: 字体文件绝对路径
size
: 文件大小
color
: 颜色
locate
: 水印位置[1=左上角,2=上居中,3=右上角,4=左居中,5=居中,6=右居中,7=左下角,8=下居中,9=右下角]
offset
: 文字相对当前位置的偏移量,默认0
angle
: 文字倾斜角度,默认0
enable
: 是否启用水印功能
type
: 类型[1=文字水印,2=图片水印]
source
: 水印图片文件绝对路径
locate
: 水印位置[1=左上角,2=上居中,3=右上角,4=左居中,5=居中,6=右居中,7=左下角,8=下居中,9=右下角]
alpha
: 透明度
字体、水印图片如何配置?
$root
则是项目根目录,即 public
上层目录test.ttf
字体文件,将它放置到 public
目录下,那么路径则是 $root . 'public/test.ttf'文字偏移量(offset)和倾斜角度(angle)支持负数
每个策略的水印配置,只能同时存在一种类型,不可以同时配置文字水印和图片水印
启用水印功能后,系统不会保存原图!
1.6.3 版本以后添加了水印功能,默认不开启,需要更改环境变量文件开启,具体参考环境变量章节。
自动水印配置文件:config/watermark.php
,文件中有详细的注释说明。
每个储存策略都可以设置独立的水印配置,分为文字水印和图片水印两种类型。
enable
: 是否启用水印功能
type
: 类型[1=文字水印,2=图片水印]
text
: 水印文字
font
: 字体文件绝对路径
size
: 文件大小
color
: 颜色
locate
: 水印位置[1=左上角,2=上居中,3=右上角,4=左居中,5=居中,6=右居中,7=左下角,8=下居中,9=右下角]
offset
: 文字相对当前位置的偏移量,默认0
angle
: 文字倾斜角度,默认0
enable
: 是否启用水印功能
type
: 类型[1=文字水印,2=图片水印]
source
: 水印图片文件绝对路径
locate
: 水印位置[1=左上角,2=上居中,3=右上角,4=左居中,5=居中,6=右居中,7=左下角,8=下居中,9=右下角]
alpha
: 透明度
字体、水印图片如何配置?
$root
则是项目根目录,即 public
上层目录test.ttf
字体文件,将它放置到 public
目录下,那么路径则是 $root . 'public/test.ttf'文字偏移量(offset)和倾斜角度(angle)支持负数
每个策略的水印配置,只能同时存在一种类型,不可以同时配置文字水印和图片水印
启用水印功能后,系统不会保存原图!
1.6.0 版本以后, 程序根目录新增了一个环节变量文件: .env, 该文件里保存了系统的一些配置, 像下面这样:
[app]
+debug = false
+trace = false
+
+[database]
+hostname = 127.0.0.1
+database = lsky
+username = root
+password = root
+hostport = 3306
+charset = utf8mb4
+prefix = lsky_
+
+[system]
+single_user_mode = false
+intercept_salacity = false
+url_query = ''
是否开启 debug 模式, 生产环境请务必关闭
是否开启性能分析 Console 插件, 生产环境请务必关闭
数据库连接地址
数据库名称
数据库密码
数据库连接端口
数据库编码
数据库表前缀
是否开启单用户站点模式, 开启后未登录情况下除了接口只能首页可以访问, 页面展示的是全屏背景图加一个登录按钮, 该背景图可以通过替换public/static/app/images/bg.jpg文件进行修改
开启鉴黄后, 上传时检测到违规的图片是否直接拦截
图片链接额外参数(例: ?test=123)
是否开启自动水印功能
`,27)]))}const u=e(p,[["render",r]]);export{b as __pageData,u as default}; diff --git a/assets/archive_free_v1_env.md.T-11hhVP.lean.js b/assets/archive_free_v1_env.md.T-11hhVP.lean.js new file mode 100644 index 00000000..bf0784f9 --- /dev/null +++ b/assets/archive_free_v1_env.md.T-11hhVP.lean.js @@ -0,0 +1,17 @@ +import{_ as e,c as s,a2 as t,o as n}from"./chunks/framework.DPuwY6B9.js";const b=JSON.parse('{"title":"环境变量","description":"","frontmatter":{"title":"环境变量"},"headers":[],"relativePath":"archive/free/v1/env.md","filePath":"zh/archive/free/v1/env.md","lastUpdated":1731937013000}'),p={name:"archive/free/v1/env.md"};function r(l,a,i,o,d,h){return n(),s("div",null,a[0]||(a[0]=[t(`1.6.0 版本以后, 程序根目录新增了一个环节变量文件: .env, 该文件里保存了系统的一些配置, 像下面这样:
[app]
+debug = false
+trace = false
+
+[database]
+hostname = 127.0.0.1
+database = lsky
+username = root
+password = root
+hostport = 3306
+charset = utf8mb4
+prefix = lsky_
+
+[system]
+single_user_mode = false
+intercept_salacity = false
+url_query = ''
是否开启 debug 模式, 生产环境请务必关闭
是否开启性能分析 Console 插件, 生产环境请务必关闭
数据库连接地址
数据库名称
数据库密码
数据库连接端口
数据库编码
数据库表前缀
是否开启单用户站点模式, 开启后未登录情况下除了接口只能首页可以访问, 页面展示的是全屏背景图加一个登录按钮, 该背景图可以通过替换public/static/app/images/bg.jpg文件进行修改
开启鉴黄后, 上传时检测到违规的图片是否直接拦截
图片链接额外参数(例: ?test=123)
是否开启自动水印功能
`,27)]))}const u=e(p,[["render",r]]);export{b as __pageData,u as default}; diff --git a/assets/archive_free_v1_index.md.Try7hslW.js b/assets/archive_free_v1_index.md.Try7hslW.js new file mode 100644 index 00000000..93eec22b --- /dev/null +++ b/assets/archive_free_v1_index.md.Try7hslW.js @@ -0,0 +1 @@ +import{_ as e,c as a,a2 as r,o as l}from"./chunks/framework.DPuwY6B9.js";const b=JSON.parse('{"title":"Lsky Pro v1.x","description":"","frontmatter":{},"headers":[],"relativePath":"archive/free/v1/index.md","filePath":"zh/archive/free/v1/index.md","lastUpdated":1734677202000}'),p={name:"archive/free/v1/index.md"};function o(i,t,s,n,h,c){return l(),a("div",null,t[0]||(t[0]=[r('项目主页:https://www.lsky.pro
项目仓库地址:https://github.com/0xxb/lsky-pro
✅ 支持第三方云储存,本地、阿里云 OSS、腾讯云 COS、七牛云、又拍云、FTP
✅多图上传、拖拽上传、粘贴上传、上传预览、全屏预览、页面响应式布局
✅简洁的图片管理功能,支持鼠标右键、单选多选、重命名等操作
✅全局配置用户初始剩余储存空间、设置指定用户剩余储存空间
✅一键复制图片外链、二维码扫描链接、图片鉴黄功能
✅设置上传文件、文件夹路径命名规则、文件夹分类功能
✅接口上传、图片软删除
✅OTA 平滑升级系统
✅(Dark)暗黑主题
✅IP 封禁功能
✅自定义链接参数
✅单用户模式
注:如果使用 FTP 功能,需要开启 PHP 的 FTP 拓展
详见 https://github.com/0xxb/lsky-pro/blob/master/LICENSE
Lsky Pro的开发和更新等,都是作者在空余时间独立开发,并免费开源使用,如果您认可我的作品,并且觉得对你有所帮助我愿意接受来自各方面的捐赠😃。 扫码捐赠任意金额
支付宝 | 微信 |
---|---|
项目主页:https://www.lsky.pro
项目仓库地址:https://github.com/0xxb/lsky-pro
✅ 支持第三方云储存,本地、阿里云 OSS、腾讯云 COS、七牛云、又拍云、FTP
✅多图上传、拖拽上传、粘贴上传、上传预览、全屏预览、页面响应式布局
✅简洁的图片管理功能,支持鼠标右键、单选多选、重命名等操作
✅全局配置用户初始剩余储存空间、设置指定用户剩余储存空间
✅一键复制图片外链、二维码扫描链接、图片鉴黄功能
✅设置上传文件、文件夹路径命名规则、文件夹分类功能
✅接口上传、图片软删除
✅OTA 平滑升级系统
✅(Dark)暗黑主题
✅IP 封禁功能
✅自定义链接参数
✅单用户模式
注:如果使用 FTP 功能,需要开启 PHP 的 FTP 拓展
详见 https://github.com/0xxb/lsky-pro/blob/master/LICENSE
Lsky Pro的开发和更新等,都是作者在空余时间独立开发,并免费开源使用,如果您认可我的作品,并且觉得对你有所帮助我愿意接受来自各方面的捐赠😃。 扫码捐赠任意金额
支付宝 | 微信 |
---|---|
TIP
兰空图床支持 redis 或 memcached 作为缓存驱动,通常情况下默认的文件储存已经足够用,但是如果你的图床开启了原图保护功能,强烈更换为下面的任意缓存驱动。
更换驱动非常简单,只需要改变程序中的环境变量文件 .env
即可
缓存驱动名称
redis 连接地址(可选)
redis 连接密码(可选)
redis 连接端口(可选)
缓存驱动名称
memcached 连接地址(可选)
memcached 连接端口(可选)
连接用户名(可选)
连接密码(可选)
TIP
兰空图床支持 redis 或 memcached 作为缓存驱动,通常情况下默认的文件储存已经足够用,但是如果你的图床开启了原图保护功能,强烈更换为下面的任意缓存驱动。
更换驱动非常简单,只需要改变程序中的环境变量文件 .env
即可
缓存驱动名称
redis 连接地址(可选)
redis 连接密码(可选)
redis 连接端口(可选)
缓存驱动名称
memcached 连接地址(可选)
memcached 连接端口(可选)
连接用户名(可选)
连接密码(可选)
TIP
Laravel Octane 通过使用高性能应用程序服务器为您的应用程序提供服务来增强您的应用程序的性能,包括 Open Swoole,Swoole,和 RoadRunner。Octane 启动您的应用程序一次,将其保存在内存中,然后以极快的速度向它提供请求。
注意
执行命令 php artisan octane:start
执行命令 php artisan octane:reload
执行命令 php artisan octane:stop
执行命令 php artisan octane:status
map $http_upgrade $connection_upgrade {
+ default upgrade;
+ '' close;
+}
+
+server {
+ listen 80;
+ listen [::]:80;
+ server_name domain.com;
+ server_tokens off;
+ root /home/forge/domain.com/public;
+
+ index index.php;
+
+ charset utf-8;
+
+ location /index.php {
+ try_files /not_exists @octane;
+ }
+
+ location / {
+ try_files $uri $uri/ @octane;
+ }
+
+ location = /favicon.ico { access_log off; log_not_found off; }
+ location = /robots.txt { access_log off; log_not_found off; }
+
+ access_log off;
+ error_log /var/log/nginx/domain.com-error.log error;
+
+ error_page 404 /index.php;
+
+ location @octane {
+ set $suffix "";
+
+ if ($uri = /index.php) {
+ set $suffix ?$query_string;
+ }
+
+ proxy_http_version 1.1;
+ proxy_set_header Host $http_host;
+ proxy_set_header Scheme $scheme;
+ proxy_set_header SERVER_PORT $server_port;
+ proxy_set_header REMOTE_ADDR $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+
+ proxy_pass http://127.0.0.1:8000$suffix;
+ }
+}
[program:lsky]
+command=php artisan octane:start
+directory=/www/html/lsky/
+autorestart=true
+startsecs=3
+startretries=3
+stdout_logfile_maxbytes=2MB
+stderr_logfile_maxbytes=2MB
+user=root
+priority=999
+numprocs=1
+process_name=%(program_name)s_%(process_num)02d
TIP
Laravel Octane 通过使用高性能应用程序服务器为您的应用程序提供服务来增强您的应用程序的性能,包括 Open Swoole,Swoole,和 RoadRunner。Octane 启动您的应用程序一次,将其保存在内存中,然后以极快的速度向它提供请求。
注意
执行命令 php artisan octane:start
执行命令 php artisan octane:reload
执行命令 php artisan octane:stop
执行命令 php artisan octane:status
map $http_upgrade $connection_upgrade {
+ default upgrade;
+ '' close;
+}
+
+server {
+ listen 80;
+ listen [::]:80;
+ server_name domain.com;
+ server_tokens off;
+ root /home/forge/domain.com/public;
+
+ index index.php;
+
+ charset utf-8;
+
+ location /index.php {
+ try_files /not_exists @octane;
+ }
+
+ location / {
+ try_files $uri $uri/ @octane;
+ }
+
+ location = /favicon.ico { access_log off; log_not_found off; }
+ location = /robots.txt { access_log off; log_not_found off; }
+
+ access_log off;
+ error_log /var/log/nginx/domain.com-error.log error;
+
+ error_page 404 /index.php;
+
+ location @octane {
+ set $suffix "";
+
+ if ($uri = /index.php) {
+ set $suffix ?$query_string;
+ }
+
+ proxy_http_version 1.1;
+ proxy_set_header Host $http_host;
+ proxy_set_header Scheme $scheme;
+ proxy_set_header SERVER_PORT $server_port;
+ proxy_set_header REMOTE_ADDR $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+
+ proxy_pass http://127.0.0.1:8000$suffix;
+ }
+}
[program:lsky]
+command=php artisan octane:start
+directory=/www/html/lsky/
+autorestart=true
+startsecs=3
+startretries=3
+stdout_logfile_maxbytes=2MB
+stderr_logfile_maxbytes=2MB
+user=root
+priority=999
+numprocs=1
+process_name=%(program_name)s_%(process_num)02d
提示
兰空图床中的角色组是整个系统的核心部分之一,无论是已注册用户、游客、管理员都受角色组控制。系统安装完成以后会默认创建一个默认的角色组,同时也是游客默认组,设置为游客组的角色组会控制游客上传。并且系统只能设置一个游客组。 设置为默认组的角色组,新用户将会默认归属该角色组。
在创建、编辑角色组时,「常规配置」中可以看到六个名称为限制结尾的输入框,配置及作用:
注意
上传数量限制,是代表当前时间往前推这段时间内所上传的图片数量限制。例如每周上传限制,是指七天之前到当前时间的这个范围内,而不是指本周内。
角色组可以对上传后的图片按照命名规则表中的规则对图片的物理储存路径、文件名称进行重写,并且相同、不同的规则可以组合使用。
兰空图床支持九种图片类型的文件上传,其中会有一些区别。
提示
兰空图床中的角色组是整个系统的核心部分之一,无论是已注册用户、游客、管理员都受角色组控制。系统安装完成以后会默认创建一个默认的角色组,同时也是游客默认组,设置为游客组的角色组会控制游客上传。并且系统只能设置一个游客组。 设置为默认组的角色组,新用户将会默认归属该角色组。
在创建、编辑角色组时,「常规配置」中可以看到六个名称为限制结尾的输入框,配置及作用:
注意
上传数量限制,是代表当前时间往前推这段时间内所上传的图片数量限制。例如每周上传限制,是指七天之前到当前时间的这个范围内,而不是指本周内。
角色组可以对上传后的图片按照命名规则表中的规则对图片的物理储存路径、文件名称进行重写,并且相同、不同的规则可以组合使用。
兰空图床支持九种图片类型的文件上传,其中会有一些区别。
提示
原图保护的作用是隐藏图片的真实 url 路径,未开启前图片是通过运行环境输出并缓存的,开启后请求该图片会通过 PHP 接管,由 PHP 处理图片的输出。
警告
原图保护功能对服务器配置要求较高,虽然有缓存驱动,但默认情况下使用的是文件缓存,原理还是读取本地的文件,占用 IO 读写,且每次都将图片内容读取到内存中,对服务器内存有着比较高的要求。 这种负载压力在图片请求量(除了缩略图)过多的时候尤为明显。
提示
原图保护的作用是隐藏图片的真实 url 路径,未开启前图片是通过运行环境输出并缓存的,开启后请求该图片会通过 PHP 接管,由 PHP 处理图片的输出。
警告
原图保护功能对服务器配置要求较高,虽然有缓存驱动,但默认情况下使用的是文件缓存,原理还是读取本地的文件,占用 IO 读写,且每次都将图片内容读取到内存中,对服务器内存有着比较高的要求。 这种负载压力在图片请求量(除了缩略图)过多的时候尤为明显。
申请地址:https://cloud.tencent.com/product/ims
固定为 ims.tencentcloudapi.com 即可。
WARNING
如果使用子用户,请授予该账户 QcloudIMSFullAccess、QcloudIMSReadOnlyAccess 权限
申请地址:https://www.aliyun.com/product/lvwang
业务场景对应内容安全控制台中的 -> 设置 -> 机器审核 -> 业务场景
地域目前阿里云支持:
WARNING
如果你使用的「子用户 AccessKey」,即 RAM 账户,请授予该账户 AliyunYundunGreenWebFullAccess 权限。
TIP
此图片审核驱动需要自建,该项目地址:https://github.com/infinitered/nsfwjs
你自建的审核接口地址
你需要使用 node 环境启动一个服务器,并适配 nsfwjs。然后上传接口必须返回以下结构:
{
+ "porn": 0,
+ "sexy": 0,
+ "hentai": 0,
+ "neutral": 0,
+ "drawing": 0
+}
请注意,以上所有属性值,都应该是使用 0-1 之间的数值来表示百分比。
接口的文件属性名称,例如 image
申请地址:https://cloud.tencent.com/product/ims
固定为 ims.tencentcloudapi.com 即可。
WARNING
如果使用子用户,请授予该账户 QcloudIMSFullAccess、QcloudIMSReadOnlyAccess 权限
申请地址:https://www.aliyun.com/product/lvwang
业务场景对应内容安全控制台中的 -> 设置 -> 机器审核 -> 业务场景
地域目前阿里云支持:
WARNING
如果你使用的「子用户 AccessKey」,即 RAM 账户,请授予该账户 AliyunYundunGreenWebFullAccess 权限。
TIP
此图片审核驱动需要自建,该项目地址:https://github.com/infinitered/nsfwjs
你自建的审核接口地址
你需要使用 node 环境启动一个服务器,并适配 nsfwjs。然后上传接口必须返回以下结构:
{
+ "porn": 0,
+ "sexy": 0,
+ "hentai": 0,
+ "neutral": 0,
+ "drawing": 0
+}
请注意,以上所有属性值,都应该是使用 0-1 之间的数值来表示百分比。
接口的文件属性名称,例如 image
警告
兰空图床并不推荐使用你使用水印功能,这将可能占用大量的内存使用。如果使用了 cdn 或第三方储存,推荐使用第三方的图片处理规则来实现水印功能。
why?
一个 3MB 的 jpeg 图片,在处理中可能会占用到 60 MB甚至更高,这是理想的状态下,但通常情况下,甚至会有可能达到 30MB 的图片。 这种图片一旦通过合成水印,加上合成水印时所使用的字体文件或图片,这将会占用大量内存,而 PHP 的默认内存限制在 128MB,会很容易导致内存溢出。
jpeg
、jpg
、png
、psd
、tif
、bmp
、webp
不支持 gif 格式的图片增加水印。psd、tif、bmp 格式的图片将会以 png 的格式输出
水印除了支持九种固定位置外,有一个平铺的选项,会将文字、图片水印以平铺的方式合成到图片中,并且可以通过 x/y 来调整水印距离、位置、旋转角度。
',7)]))}const u=a(c,[["render",d]]);export{m as __pageData,u as default}; diff --git a/assets/archive_free_v2_group_watermark.md.DCZ2i91R.lean.js b/assets/archive_free_v2_group_watermark.md.DCZ2i91R.lean.js new file mode 100644 index 00000000..67f1ec7e --- /dev/null +++ b/assets/archive_free_v2_group_watermark.md.DCZ2i91R.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as o,o as r}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"水印配置","description":"图片水印功能","frontmatter":{"title":"水印配置","description":"图片水印功能"},"headers":[],"relativePath":"archive/free/v2/group/watermark.md","filePath":"zh/archive/free/v2/group/watermark.md","lastUpdated":1731937013000}'),c={name:"archive/free/v2/group/watermark.md"};function d(p,e,i,s,n,l){return r(),t("div",null,e[0]||(e[0]=[o('警告
兰空图床并不推荐使用你使用水印功能,这将可能占用大量的内存使用。如果使用了 cdn 或第三方储存,推荐使用第三方的图片处理规则来实现水印功能。
why?
一个 3MB 的 jpeg 图片,在处理中可能会占用到 60 MB甚至更高,这是理想的状态下,但通常情况下,甚至会有可能达到 30MB 的图片。 这种图片一旦通过合成水印,加上合成水印时所使用的字体文件或图片,这将会占用大量内存,而 PHP 的默认内存限制在 128MB,会很容易导致内存溢出。
jpeg
、jpg
、png
、psd
、tif
、bmp
、webp
不支持 gif 格式的图片增加水印。psd、tif、bmp 格式的图片将会以 png 的格式输出
水印除了支持九种固定位置外,有一个平铺的选项,会将文字、图片水印以平铺的方式合成到图片中,并且可以通过 x/y 来调整水印距离、位置、旋转角度。
',7)]))}const u=a(c,[["render",d]]);export{m as __pageData,u as default}; diff --git a/assets/archive_free_v2_index.md.B0MOP_EC.js b/assets/archive_free_v2_index.md.B0MOP_EC.js new file mode 100644 index 00000000..e2043334 --- /dev/null +++ b/assets/archive_free_v2_index.md.B0MOP_EC.js @@ -0,0 +1 @@ +import{_ as l,c as i,a2 as a,o}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"Lsky Pro V 2.x","description":"使用 Laravel 重构后的 2.x 版本","frontmatter":{"title":"Lsky Pro V 2.x","description":"使用 Laravel 重构后的 2.x 版本"},"headers":[],"relativePath":"archive/free/v2/index.md","filePath":"zh/archive/free/v2/index.md","lastUpdated":1731937013000}'),r={name:"archive/free/v2/index.md"};function t(d,e,c,h,s,n){return o(),i("div",null,e[0]||(e[0]=[a('Lsky Pro 是一个用于在线上传、管理图片的图床程序,中文名:兰空图床,你可以将它作为自己的云上相册,亦可以当作你的写作贴图库。
兰空图床始于 2017 年 10 月,最早的版本由 ThinkPHP 5 开发,后又经历了数个版本的迭代,在 2021 年末启动了新的重写计划并于 2022 年 3 月份发布全新的 2.0 版本。
本地
等多种第三方云储存 AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云
、又拍云
、SFTP
、FTP
、WebDav
、Minio
MySQL 5.7+
、PostgreSQL 9.6+
、SQLite 3.8.8+
、SQL Server 2017+
Memcached
、Redis
、DynamoDB
、等其他关系型数据库,默认以文件的方式缓存Lsky Pro 的开发和更新等,都是作者在业余时间独立开发,并免费开源使用,如果您认可我的作品,并且觉得对你有所帮助我愿意接受来自各方面的捐赠😃。
支付宝 | 微信 |
---|---|
storage/logs
目录下生成错误日志,出现这种情况反馈时请将日志文件携带(注意,日志中可能存在敏感信息)由于 2.x 版本与 1.x 存在巨大差异,且数据库结构层面变化较大,无法从旧版本直接升级至 2.x 版本,但是作者我用了亿点时间写了迁移脚本,尽管如此,从旧版本迁移还是一个比较繁琐的步骤。
迁移之前你需要知道的事
i
字母前缀。下载迁移脚本 ,将脚本解压至已安装 php8 运行环境的服务器的任意文件夹下,然后编辑脚本根目录下的 config.yaml
配置文件,将该文件中的旧版本数据库、新版本数据库配置填写完整。
同时请保证运行脚本的环境可以同时连接到这两个不同的数据库。
迁移过程中,建议关闭旧版本网站。
使用 ssh 工具登录到服务器,cd 到脚本根目录(与 start.php 文件同级)
然后执行迁移命令 php start.php migrate
当命令窗口出现进度条时,表示正在迁移图片数据,如果你的图片量很多,那么等待的时间可能很久,过程中请不要关闭窗口、断网。
当进度条走完以后,则数据迁移完成,旧版本的管理员账号将会被新版本安装时设置的管理员账号所代替,请使用安装时设置的管理员账号登录新版本网站。
迁移完成后组的配置都是系统默认值,旧版本中设置的配置需要在新版本中重新设置。
如果旧版本使用的是本地图片,需要将旧版本 public
目录下的图片文件,复制到新版本中的 storage/app/uploads
目录下。
Lsky Pro 是一个用于在线上传、管理图片的图床程序,中文名:兰空图床,你可以将它作为自己的云上相册,亦可以当作你的写作贴图库。
兰空图床始于 2017 年 10 月,最早的版本由 ThinkPHP 5 开发,后又经历了数个版本的迭代,在 2021 年末启动了新的重写计划并于 2022 年 3 月份发布全新的 2.0 版本。
本地
等多种第三方云储存 AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云
、又拍云
、SFTP
、FTP
、WebDav
、Minio
MySQL 5.7+
、PostgreSQL 9.6+
、SQLite 3.8.8+
、SQL Server 2017+
Memcached
、Redis
、DynamoDB
、等其他关系型数据库,默认以文件的方式缓存Lsky Pro 的开发和更新等,都是作者在业余时间独立开发,并免费开源使用,如果您认可我的作品,并且觉得对你有所帮助我愿意接受来自各方面的捐赠😃。
支付宝 | 微信 |
---|---|
storage/logs
目录下生成错误日志,出现这种情况反馈时请将日志文件携带(注意,日志中可能存在敏感信息)由于 2.x 版本与 1.x 存在巨大差异,且数据库结构层面变化较大,无法从旧版本直接升级至 2.x 版本,但是作者我用了亿点时间写了迁移脚本,尽管如此,从旧版本迁移还是一个比较繁琐的步骤。
迁移之前你需要知道的事
i
字母前缀。下载迁移脚本 ,将脚本解压至已安装 php8 运行环境的服务器的任意文件夹下,然后编辑脚本根目录下的 config.yaml
配置文件,将该文件中的旧版本数据库、新版本数据库配置填写完整。
同时请保证运行脚本的环境可以同时连接到这两个不同的数据库。
迁移过程中,建议关闭旧版本网站。
使用 ssh 工具登录到服务器,cd 到脚本根目录(与 start.php 文件同级)
然后执行迁移命令 php start.php migrate
当命令窗口出现进度条时,表示正在迁移图片数据,如果你的图片量很多,那么等待的时间可能很久,过程中请不要关闭窗口、断网。
当进度条走完以后,则数据迁移完成,旧版本的管理员账号将会被新版本安装时设置的管理员账号所代替,请使用安装时设置的管理员账号登录新版本网站。
迁移完成后组的配置都是系统默认值,旧版本中设置的配置需要在新版本中重新设置。
如果旧版本使用的是本地图片,需要将旧版本 public
目录下的图片文件,复制到新版本中的 storage/app/uploads
目录下。
请注意
兰空图床不支持共享型虚拟主机(不支持安装拓展、修改 php.ini 等操作)安装
兰空图床的每个版本都是通过 github 发布,下载正式版本请访问 https://github.com/lsky-org/lsky-pro/releases
如果你不是开发者,请不要下载名称为 Source Code
的压缩包,此为核心源代码,需要自己安装拓展。
open_basedir
,否则会有意想不到的错误。简单来说,open_basedir 是用来限制 PHP 读取目录。public
文件夹nginx 需要设置伪静态,内容如下
location / {
+ try_files $uri $uri/ /index.php?$query_string;
+}
www
,权限改为 0755
通常情况下,Web 站点目录的所有者和用户组为
www:www
若未正确设置权限,在后续的使用过程中可能会因为权限导致文件无法读取、无法写入、创建文件夹等一系列问题。
配置好域名以后,访问站点 首页 ,程序会自动跳转至安装页面,环境检测通过以后即可通过引导进行安装。
`,16)]))}const b=e(i,[["render",r]]);export{u as __pageData,b as default}; diff --git a/assets/archive_free_v2_quick-start_installation.md.BXmHeFj9.lean.js b/assets/archive_free_v2_quick-start_installation.md.BXmHeFj9.lean.js new file mode 100644 index 00000000..56879d0c --- /dev/null +++ b/assets/archive_free_v2_quick-start_installation.md.BXmHeFj9.lean.js @@ -0,0 +1,3 @@ +import{_ as e,c as t,a2 as o,o as s}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"安装","description":"安装 Lsky Pro 2.x","frontmatter":{"title":"安装","description":"安装 Lsky Pro 2.x"},"headers":[],"relativePath":"archive/free/v2/quick-start/installation.md","filePath":"zh/archive/free/v2/quick-start/installation.md","lastUpdated":1731937013000}'),i={name:"archive/free/v2/quick-start/installation.md"};function r(l,a,n,c,p,d){return s(),t("div",null,a[0]||(a[0]=[o(`请注意
兰空图床不支持共享型虚拟主机(不支持安装拓展、修改 php.ini 等操作)安装
兰空图床的每个版本都是通过 github 发布,下载正式版本请访问 https://github.com/lsky-org/lsky-pro/releases
如果你不是开发者,请不要下载名称为 Source Code
的压缩包,此为核心源代码,需要自己安装拓展。
open_basedir
,否则会有意想不到的错误。简单来说,open_basedir 是用来限制 PHP 读取目录。public
文件夹nginx 需要设置伪静态,内容如下
location / {
+ try_files $uri $uri/ /index.php?$query_string;
+}
www
,权限改为 0755
通常情况下,Web 站点目录的所有者和用户组为
www:www
若未正确设置权限,在后续的使用过程中可能会因为权限导致文件无法读取、无法写入、创建文件夹等一系列问题。
配置好域名以后,访问站点 首页 ,程序会自动跳转至安装页面,环境检测通过以后即可通过引导进行安装。
`,16)]))}const b=e(i,[["render",r]]);export{u as __pageData,b as default}; diff --git a/assets/archive_free_v2_quick-start_migration.md.CE00NFLt.js b/assets/archive_free_v2_quick-start_migration.md.CE00NFLt.js new file mode 100644 index 00000000..a525397e --- /dev/null +++ b/assets/archive_free_v2_quick-start_migration.md.CE00NFLt.js @@ -0,0 +1 @@ +import{_ as t,c as a,a2 as i,o as r}from"./chunks/framework.DPuwY6B9.js";const f=JSON.parse('{"title":"迁移","description":"迁移兰空图床","frontmatter":{"title":"迁移","description":"迁移兰空图床"},"headers":[],"relativePath":"archive/free/v2/quick-start/migration.md","filePath":"zh/archive/free/v2/quick-start/migration.md","lastUpdated":1731937013000}'),o={name:"archive/free/v2/quick-start/migration.md"};function c(l,e,d,n,s,p){return r(),a("div",null,e[0]||(e[0]=[i('迁移与手动升级的步骤大致相同。这里只表述需要注意的事项以及站点文件复制到另一个环境以后的操作。
fileinfo
、imagick
拓展,是否启用了必要的函数等等。.
符号开头的文件,这些可能在某些文件管理程序中被隐藏,请不要忽略了这些文件。public
目录下的所有符号连接,然后进入后台编辑本地策略,保存一下以重新生成符号连接。迁移与手动升级的步骤大致相同。这里只表述需要注意的事项以及站点文件复制到另一个环境以后的操作。
fileinfo
、imagick
拓展,是否启用了必要的函数等等。.
符号开头的文件,这些可能在某些文件管理程序中被隐藏,请不要忽略了这些文件。public
目录下的所有符号连接,然后进入后台编辑本地策略,保存一下以重新生成符号连接。不支持的数据库版本,请参阅 支持的数据库 章节
请检查伪静态、站点运行目录是否设置正确,如果确认正确请尝试重启。
部分第三方储存没有提供批量删除文件的接口,且同时删除大量物理文件对磁盘要求较高,会导致响应速度过慢。
不能,传统以 fpm 方式运行的 php 程序,没有异步、线程的特性,难以实现。
严格来说,svg 不是图片,是通过 xml 标记语言实现的矢量图形,也就是说 svg 不支持加水印、生成缩略图、获取宽高能一系列操作,这破坏了系统中很多业务流程。
不可以,程序定位就是管理图片,未做任何图片以外格式的文件支持。
其一,由于第三方储存的多样性,有些第三方储存通过客户端直传后程序拿不到需要的数据,其二,太麻烦了。
是 feature,在同一个储存策略下,上传相同的图片,程序不会重复的写入文件,但会创建文件记录,多条记录指向同一个物理文件。
这与浏览器限制有关,站点必须以 https 的方式访问。了解更多 https://w3c.github.io/clipboard-apis/#dom-navigator-clipboard
原图保护功能指的是开启后,上传后图片返回的 url 中不是图片的真实路径,而是一串随机字符串。开启后将会消耗更多的内存。
这种情况是因为运行环境接管图片资源导致的,请更改 nginx 或 apache 的配置,例如 nginx:
# ...
+
+location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
+{
+ expires 30d;
+ error_log /dev/null;
+ access_log /dev/null;
+}
+
+# ...
将这段代码注释掉即可。
如果你使用了 cdn,请检查是否未刷新 cdn 的缓存。
上传失败有很多原因,比如配置错误、文件较大返回 423 Request Entity Too Large、生成缩略图时图片较大导致超时被强行断开连接等等,出现错误通常情况下可以在storage/logs
文件夹下找到错误日志,如果没有则表示错误并不是发生在程序中,而是外在原因。
这种情况通常是因为你的程序正在从 80 端口进行转发流量,详细解释和解决方法:https://laravel.com/docs/9.x/requests#configuring-trusted-proxies 请尝试增加反向代理配置:
proxy_set_header X-Forwarded-Proto $scheme;
市面上各种厂家的产品层出不穷,兰空图床只会对主流的、具备相应接口的产品作适配,兰空图床的储存是由 flysystem 实现,欢迎你提交 PR!
可以,编辑 .env
文件,增加一项配置:THUMBNAIL_PATH=your folder
但是请注意,此操作影响所有图片的缩略图地址,包括已上传的图片。
你可以通过执行命令 php artisan lsky:thumbnails
来重新生成所有图片的缩略图,但是注意,这个操作等待时间可能会比较漫长,取决于图片数量。
在 public/js
目录下新建 custom.js
文件,程序会自动加载该 js 文件
你可以通过在 .env
文件中增加配置 REDIS_DB=0
和 REDIS_CACHE_DB=1
来指定库。
不支持的数据库版本,请参阅 支持的数据库 章节
请检查伪静态、站点运行目录是否设置正确,如果确认正确请尝试重启。
部分第三方储存没有提供批量删除文件的接口,且同时删除大量物理文件对磁盘要求较高,会导致响应速度过慢。
不能,传统以 fpm 方式运行的 php 程序,没有异步、线程的特性,难以实现。
严格来说,svg 不是图片,是通过 xml 标记语言实现的矢量图形,也就是说 svg 不支持加水印、生成缩略图、获取宽高能一系列操作,这破坏了系统中很多业务流程。
不可以,程序定位就是管理图片,未做任何图片以外格式的文件支持。
其一,由于第三方储存的多样性,有些第三方储存通过客户端直传后程序拿不到需要的数据,其二,太麻烦了。
是 feature,在同一个储存策略下,上传相同的图片,程序不会重复的写入文件,但会创建文件记录,多条记录指向同一个物理文件。
这与浏览器限制有关,站点必须以 https 的方式访问。了解更多 https://w3c.github.io/clipboard-apis/#dom-navigator-clipboard
原图保护功能指的是开启后,上传后图片返回的 url 中不是图片的真实路径,而是一串随机字符串。开启后将会消耗更多的内存。
这种情况是因为运行环境接管图片资源导致的,请更改 nginx 或 apache 的配置,例如 nginx:
# ...
+
+location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
+{
+ expires 30d;
+ error_log /dev/null;
+ access_log /dev/null;
+}
+
+# ...
将这段代码注释掉即可。
如果你使用了 cdn,请检查是否未刷新 cdn 的缓存。
上传失败有很多原因,比如配置错误、文件较大返回 423 Request Entity Too Large、生成缩略图时图片较大导致超时被强行断开连接等等,出现错误通常情况下可以在storage/logs
文件夹下找到错误日志,如果没有则表示错误并不是发生在程序中,而是外在原因。
这种情况通常是因为你的程序正在从 80 端口进行转发流量,详细解释和解决方法:https://laravel.com/docs/9.x/requests#configuring-trusted-proxies 请尝试增加反向代理配置:
proxy_set_header X-Forwarded-Proto $scheme;
市面上各种厂家的产品层出不穷,兰空图床只会对主流的、具备相应接口的产品作适配,兰空图床的储存是由 flysystem 实现,欢迎你提交 PR!
可以,编辑 .env
文件,增加一项配置:THUMBNAIL_PATH=your folder
但是请注意,此操作影响所有图片的缩略图地址,包括已上传的图片。
你可以通过执行命令 php artisan lsky:thumbnails
来重新生成所有图片的缩略图,但是注意,这个操作等待时间可能会比较漫长,取决于图片数量。
在 public/js
目录下新建 custom.js
文件,程序会自动加载该 js 文件
你可以通过在 .env
文件中增加配置 REDIS_DB=0
和 REDIS_CACHE_DB=1
来指定库。
兰空图床支持从 web 端直接升级版本,但不会提醒有新版本发布,如果你希望在新版本发布时得到通知,可以前往 https://github.com/lsky-org/lsky-pro,然后点击右上角的 Watch
展开后选择 Custom
,勾选 Releases
然后点击 Apply
即可。
新版本发布以后,等待大约三分钟后可以打开兰空图床系统设置,滚动至最底部,会出现新版本的升级信息。
如果在线升级失败,可以尝试手动升级。首先你需要前往 https://github.com/lsky-org/lsky-pro/releases 找到最新的版本,下载完整的安装包。(如果你不是开发人员,请不要下载名为 Source code
的压缩包,此为未安装依赖的源码包)
然后按照以下步骤进行升级:
storage
和 public
目录下的缩略图文件夹(默认该文件夹名称为 thumbnails
).env
文件和 installed.lock
文件以外的所有文件夹以及文件storage
文件夹替换掉已解压的 storage
文件夹,将备份的缩略图文件夹放到 public
目录下configs
表,修改 name
为 app_version
的 value
值,例如 V 2.0
,字符串必须完全一致。php artisan migrate --seed
php artisan optimize:clear
本地储存以及使用 sqlite 需要注意的事情
database
文件夹下,请在升级之前备份该数据库文件,并在上述第三步操作以后将数据库文件放置原位。storage
文件夹下,数据无价,请注意备份该文件夹。public
文件夹下生成符号连接(软连接),删除 public
目录后,请在升级完成以后编辑本地储存策略,保存一下以重新生成符号连接。兰空图床支持从 web 端直接升级版本,但不会提醒有新版本发布,如果你希望在新版本发布时得到通知,可以前往 https://github.com/lsky-org/lsky-pro,然后点击右上角的 Watch
展开后选择 Custom
,勾选 Releases
然后点击 Apply
即可。
新版本发布以后,等待大约三分钟后可以打开兰空图床系统设置,滚动至最底部,会出现新版本的升级信息。
如果在线升级失败,可以尝试手动升级。首先你需要前往 https://github.com/lsky-org/lsky-pro/releases 找到最新的版本,下载完整的安装包。(如果你不是开发人员,请不要下载名为 Source code
的压缩包,此为未安装依赖的源码包)
然后按照以下步骤进行升级:
storage
和 public
目录下的缩略图文件夹(默认该文件夹名称为 thumbnails
).env
文件和 installed.lock
文件以外的所有文件夹以及文件storage
文件夹替换掉已解压的 storage
文件夹,将备份的缩略图文件夹放到 public
目录下configs
表,修改 name
为 app_version
的 value
值,例如 V 2.0
,字符串必须完全一致。php artisan migrate --seed
php artisan optimize:clear
本地储存以及使用 sqlite 需要注意的事情
database
文件夹下,请在升级之前备份该数据库文件,并在上述第三步操作以后将数据库文件放置原位。storage
文件夹下,数据无价,请注意备份该文件夹。public
文件夹下生成符号连接(软连接),删除 public
目录后,请在升级完成以后编辑本地储存策略,保存一下以重新生成符号连接。为了实现本地储存可以更改储存位置,所以本地储存必须有一个域名后缀,例如 http://domain.com/**uploads**/123.png 中的 uploads。后缀对应的是 public 目录下的符号连接。
如果使用 RAM 账户,请授予该账户以下权限:
如果使用子账户,请授予该账户以下权限
腾讯云的储存桶名称由 名称+appid 组合,在兰空图床后台的储存策略表单中请分开填写。
为了实现本地储存可以更改储存位置,所以本地储存必须有一个域名后缀,例如 http://domain.com/**uploads**/123.png 中的 uploads。后缀对应的是 public 目录下的符号连接。
如果使用 RAM 账户,请授予该账户以下权限:
如果使用子账户,请授予该账户以下权限
腾讯云的储存桶名称由 名称+appid 组合,在兰空图床后台的储存策略表单中请分开填写。
提示
兰空图床中的储存策略是整个系统的核心部分之一,目前支持本地
、AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云
、又拍云
、SFTP
、FTP
、WebDav
、Minio
。 一个储存策略可以归属于多个角色组,同时某个角色组也可以设置多个储存策略。
在创建、编辑储存策略时,第一栏的角色组输入框会展示全部已存在的角色组,鼠标单击可直接选择,mac 按住 command
加鼠标左键可以多选、取消选择,windows 上为 ctrl
或 alt
键。
WARNING
储存驱动适配好以后,接下来要做的就是集成到兰空图床当中。
composer
安装你的驱动器。现在我们假设你的驱动器名称为 flysystem-custom
。composer install xxx/flysystem-custom
在 app/Enums/Strategy
文件夹中新增一个文件 CustomOption
,内容如下
<?php
+
+namespace App\\Enums\\Strategy;
+
+final class CustomOption
+{
+ /** @var string 访问地址 */
+ const Url = 'url';
+
+ /** @var string 用户名 */
+ const Username = 'username';
+
+ /** @var string 密码 */
+ const Password = 'password';
+
+ /** @var string 储存名称 */
+ const Bucket = 'bucket';
+}
该枚举由你的储存需要的配置而定,其中
url
不管是什么储存都是必须的
打开 app/Enums/StrategyKey.php
文件追加一行
// ...
+/** @var int Custom */
+const Custom = 11;
+// ...
此常量值可以自定义,但不要和其他常量值重复。
getAdapter
方法打开 app/Services/ImageService.php
文件定位到 getAdapter
方法,你可以看到所有储存策略都是通过这个方法进行实例化的。 我们来增加一个 adapter,在 match 表达式中追加内容:
+// ...
+
+use App\\Enums\\Strategy\\CustomOption;
+
+// ....
+
+StrategyKey::Custom => new CustomAdapter(
+ username: $configs->get(CustomOption::Username),
+ password: $configs->get(CustomOption::Password),
+ bucket: $configs->get(CustomOption::Bucket),
+),
+
+// ...
打开 app/Models/Strategy.php
文件,在 DRIVERS 常量中追加一行
// ...
+const DRIVERS = [
+ // ...
+ StrategyKey::Custom => '自定义储存',
+];
+// ...
打开 app/Http/Requests/Admin/StrategyRequest.php
文件, 在 rules
方法里追加验证内容
+// ...
+
+return array_merge($array, match((int)$this->input('key')) {
+ // ...
+ StrategyKey::Custom => [
+ 'configs.username' => 'required',
+ 'configs.password' => 'required',
+ 'configs.bucket' => 'required',
+ ],
+});
+
+// ...
验证规则请参考 Laravel 官方文档
打开 resources/views/admin/strategy/add.blade.php
和 resources/views/admin/strategy/edit.blade.php
参考其他的储存策略表单,例如 minio:
添加页面:add.blade.php
编辑页面:edit.blade.php
至此,一个新的储存就适配完成了,这时候就可以在储存策略添加表单中,选择你的自定义储存策略进行配置、测试上传、管理等。
`,30)]))}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/archive_free_v2_storage_intro.md.W5PZa55W.lean.js b/assets/archive_free_v2_storage_intro.md.W5PZa55W.lean.js new file mode 100644 index 00000000..e6ee4404 --- /dev/null +++ b/assets/archive_free_v2_storage_intro.md.W5PZa55W.lean.js @@ -0,0 +1,51 @@ +import{_ as i,c as a,a2 as n,o as p}from"./chunks/framework.DPuwY6B9.js";const g=JSON.parse('{"title":"简介","description":"储存策略的简介","frontmatter":{"title":"简介","description":"储存策略的简介"},"headers":[],"relativePath":"archive/free/v2/storage/intro.md","filePath":"zh/archive/free/v2/storage/intro.md","lastUpdated":1734677202000}'),t={name:"archive/free/v2/storage/intro.md"};function l(h,s,e,k,r,d){return p(),a("div",null,s[0]||(s[0]=[n(`提示
兰空图床中的储存策略是整个系统的核心部分之一,目前支持本地
、AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云
、又拍云
、SFTP
、FTP
、WebDav
、Minio
。 一个储存策略可以归属于多个角色组,同时某个角色组也可以设置多个储存策略。
在创建、编辑储存策略时,第一栏的角色组输入框会展示全部已存在的角色组,鼠标单击可直接选择,mac 按住 command
加鼠标左键可以多选、取消选择,windows 上为 ctrl
或 alt
键。
WARNING
储存驱动适配好以后,接下来要做的就是集成到兰空图床当中。
composer
安装你的驱动器。现在我们假设你的驱动器名称为 flysystem-custom
。composer install xxx/flysystem-custom
在 app/Enums/Strategy
文件夹中新增一个文件 CustomOption
,内容如下
<?php
+
+namespace App\\Enums\\Strategy;
+
+final class CustomOption
+{
+ /** @var string 访问地址 */
+ const Url = 'url';
+
+ /** @var string 用户名 */
+ const Username = 'username';
+
+ /** @var string 密码 */
+ const Password = 'password';
+
+ /** @var string 储存名称 */
+ const Bucket = 'bucket';
+}
该枚举由你的储存需要的配置而定,其中
url
不管是什么储存都是必须的
打开 app/Enums/StrategyKey.php
文件追加一行
// ...
+/** @var int Custom */
+const Custom = 11;
+// ...
此常量值可以自定义,但不要和其他常量值重复。
getAdapter
方法打开 app/Services/ImageService.php
文件定位到 getAdapter
方法,你可以看到所有储存策略都是通过这个方法进行实例化的。 我们来增加一个 adapter,在 match 表达式中追加内容:
+// ...
+
+use App\\Enums\\Strategy\\CustomOption;
+
+// ....
+
+StrategyKey::Custom => new CustomAdapter(
+ username: $configs->get(CustomOption::Username),
+ password: $configs->get(CustomOption::Password),
+ bucket: $configs->get(CustomOption::Bucket),
+),
+
+// ...
打开 app/Models/Strategy.php
文件,在 DRIVERS 常量中追加一行
// ...
+const DRIVERS = [
+ // ...
+ StrategyKey::Custom => '自定义储存',
+];
+// ...
打开 app/Http/Requests/Admin/StrategyRequest.php
文件, 在 rules
方法里追加验证内容
+// ...
+
+return array_merge($array, match((int)$this->input('key')) {
+ // ...
+ StrategyKey::Custom => [
+ 'configs.username' => 'required',
+ 'configs.password' => 'required',
+ 'configs.bucket' => 'required',
+ ],
+});
+
+// ...
验证规则请参考 Laravel 官方文档
打开 resources/views/admin/strategy/add.blade.php
和 resources/views/admin/strategy/edit.blade.php
参考其他的储存策略表单,例如 minio:
添加页面:add.blade.php
编辑页面:edit.blade.php
至此,一个新的储存就适配完成了,这时候就可以在储存策略添加表单中,选择你的自定义储存策略进行配置、测试上传、管理等。
`,30)]))}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/chunks/@localSearchIndexroot.YYQKFke3.js b/assets/chunks/@localSearchIndexroot.YYQKFke3.js new file mode 100644 index 00000000..1d88dede --- /dev/null +++ b/assets/chunks/@localSearchIndexroot.YYQKFke3.js @@ -0,0 +1 @@ +const e='{"documentCount":407,"nextId":407,"documentIds":{"0":"/advanced/cache#缓存","1":"/advanced/cache#缓存后台管理页面图标","2":"/advanced/cache#缓存配置、事件、路由和视图","3":"/advanced/cache#opcache-拓展","4":"/advanced/openapi#接口文档","5":"/advanced/separate-deploy#分离部署","6":"/advanced/separate-deploy#修改构建脚本","7":"/advanced/separate-deploy#构建前端代码","8":"/advanced/separate-deploy#部署","9":"/advanced/storage#自定义储存","10":"/advanced/theme#主题","11":"/advanced/theme#主题是如何运作的","12":"/advanced/theme#修改默认主题","13":"/advanced/theme#自定义主题","14":"/archive/enterprise/v1/features/basic/payment/alipay#创建支付应用","15":"/archive/enterprise/v1/features/basic/payment/alipay#绑定支付宝支付产品","16":"/archive/enterprise/v1/features/basic/payment/alipay#开通电脑网站支付","17":"/archive/enterprise/v1/features/basic/payment/alipay#设置加签方式","18":"/archive/enterprise/v1/features/basic/payment/alipay#下载证书生成软件","19":"/archive/enterprise/v1/features/basic/payment/alipay#生成证书并上传","20":"/archive/enterprise/v1/features/basic/payment/alipay#下载证书","21":"/archive/enterprise/v1/features/basic/payment/alipay#设置回调地址","22":"/archive/enterprise/v1/features/basic/payment/alipay#上传证书","23":"/archive/enterprise/v1/features/basic/payment/paypal#创建应用","24":"/archive/enterprise/v1/features/basic/payment/paypal#配置","25":"/archive/enterprise/v1/features/basic/plan#套餐权益","26":"/archive/enterprise/v1/features/basic/plan#阶梯价格","27":"/archive/enterprise/v1/features/core/group#上传频率限制","28":"/archive/enterprise/v1/features/core/group#命名规则","29":"/archive/enterprise/v1/features/core/group#原图保护","30":"/archive/enterprise/v1/features/core/group#图片审核","31":"/archive/enterprise/v1/features/core/group#腾讯云内容安全","32":"/archive/enterprise/v1/features/core/group#endpoint","33":"/archive/enterprise/v1/features/core/group#地域","34":"/archive/enterprise/v1/features/core/group#阿里云内容安全","35":"/archive/enterprise/v1/features/core/group#业务场景","36":"/archive/enterprise/v1/features/core/group#地域-1","37":"/archive/enterprise/v1/features/core/group#nsfwjs","38":"/archive/enterprise/v1/features/core/group#接口地址","39":"/archive/enterprise/v1/features/core/group#属性名称","40":"/archive/enterprise/v1/features/core/group#水印配置","41":"/archive/enterprise/v1/features/core/group#水印支持的图片格式","42":"/archive/enterprise/v1/features/core/group#水印位置","43":"/archive/enterprise/v1/features/core/strategy#如何设置归属角色组","44":"/archive/enterprise/v1/features/core/strategy#如何自定义一个储存","45":"/archive/enterprise/v1/features/core/strategy#faq","46":"/archive/enterprise/v1/features/core/strategy#储存的特殊说明","47":"/archive/enterprise/v1/features/core/strategy#本地储存","48":"/archive/enterprise/v1/features/core/strategy#阿里云-oss","49":"/archive/enterprise/v1/features/core/strategy#腾讯云-cos","50":"/archive/enterprise/v1/features/core/strategy#minio","51":"/archive/enterprise/v1/#介绍","52":"/archive/enterprise/v1/#基本特性","53":"/archive/enterprise/v1/#安装要求","54":"/archive/enterprise/v1/#支持的数据库","55":"/archive/enterprise/v1/others/commands#为所有图片生成缩略图","56":"/archive/enterprise/v1/others/commands#重建程序所需要的符号连接","57":"/archive/enterprise/v1/others/commands#校正系统统计数据","58":"/archive/enterprise/v1/others/free-upgrade#升级条件","59":"/archive/enterprise/v1/others/free-upgrade#准备工作","60":"/archive/enterprise/v1/others/free-upgrade#迁移文件","61":"/archive/enterprise/v1/others/free-upgrade#修改配置","62":"/archive/enterprise/v1/others/free-upgrade#执行升级","63":"/archive/enterprise/v1/others/imagick#编译安装-imageimagick","64":"/archive/enterprise/v1/others/imagick#下载并解压-imageimagick","65":"/archive/enterprise/v1/others/imagick#编译","66":"/archive/enterprise/v1/others/imagick#安装","67":"/archive/enterprise/v1/others/imagick#编译安装-php-imagick","68":"/archive/enterprise/v1/others/imagick#下载并解压-php-imagick","69":"/archive/enterprise/v1/others/imagick#编译并安装","70":"/archive/enterprise/v1/others/optimization#常规优化方案","71":"/archive/enterprise/v1/others/optimization#优化配置加载","72":"/archive/enterprise/v1/others/optimization#优化路由加载","73":"/archive/enterprise/v1/others/optimization#优化视图加载","74":"/archive/enterprise/v1/others/optimization#进阶优化方案","75":"/archive/enterprise/v1/quick-start/basic#图片管理功能","76":"/archive/enterprise/v1/quick-start/basic#高级搜索功能","77":"/archive/enterprise/v1/quick-start/installation#推荐运行环境","78":"/archive/enterprise/v1/quick-start/installation#第一步-准备安装","79":"/archive/enterprise/v1/quick-start/installation#第二步-准备运行环境","80":"/archive/enterprise/v1/quick-start/installation#第三步-初始化配置","81":"/archive/enterprise/v1/quick-start/installation#第四步-开始安装","82":"/archive/enterprise/v1/quick-start/installation#最后一步-命令行配置-重要","83":"/archive/enterprise/v1/quick-start/installation#_1-配置队列处理进程","84":"/archive/enterprise/v1/quick-start/installation#_2-配置计划任务处理进程","85":"/archive/enterprise/v1/quick-start/migration#迁移兰空图床","86":"/archive/enterprise/v1/quick-start/migration#_1-打包","87":"/archive/enterprise/v1/quick-start/migration#_2-准备新服务器","88":"/archive/enterprise/v1/quick-start/migration#_3-迁移到新服务器","89":"/archive/enterprise/v1/quick-start/migration#_4-生成符号链接","90":"/archive/enterprise/v1/quick-start/migration#_5-配置异步队列和计划任务","91":"/archive/enterprise/v1/quick-start/questions#安装时出现错误-sqlstate-42000-syntax-error-or-access-violation-1064-you-have-an-error","92":"/archive/enterprise/v1/quick-start/questions#为什么配置完了以后-访问站点显示-404","93":"/archive/enterprise/v1/quick-start/questions#为什么不支持-svg-格式的图片","94":"/archive/enterprise/v1/quick-start/questions#能不能上传图片以外格式的文件-例如-mp4","95":"/archive/enterprise/v1/quick-start/questions#为什么不支持客户端直传","96":"/archive/enterprise/v1/quick-start/questions#我多次上传了相同的照片-图片管理中也出现了图片-这是-bug-还是-feature","97":"/archive/enterprise/v1/quick-start/questions#我的图片中-「复制图片」出错-显示-复制失败-clipboarditem-is-not-defined","98":"/archive/enterprise/v1/quick-start/questions#原图保护功能是什么","99":"/archive/enterprise/v1/quick-start/questions#开启原图保护功能后访问图片-404","100":"/archive/enterprise/v1/quick-start/questions#更新后出现样式异常、按钮不起作用","101":"/archive/enterprise/v1/quick-start/questions#上传出现失败-请稍后重试","102":"/archive/enterprise/v1/quick-start/questions#使用反向代理并且域名使用了-https-的情况下-程序请求静态资源、生成的链接却是-http","103":"/archive/enterprise/v1/quick-start/questions#能不能支持-xxxx-、xxxx-储存","104":"/archive/enterprise/v1/quick-start/questions#缩略图文件夹可以改名字吗","105":"/archive/enterprise/v1/quick-start/questions#可以关闭缩略图功能吗","106":"/archive/enterprise/v1/quick-start/questions#缩略图文件夹、文件被我删掉了怎么办","107":"/archive/enterprise/v1/quick-start/questions#如何增加统计代码","108":"/archive/enterprise/v1/quick-start/questions#如何修改-redis-库","109":"/archive/enterprise/v1/quick-start/upgrade#在线升级","110":"/archive/enterprise/v1/quick-start/upgrade#手动升级","111":"/archive/free/v1/CommonQ#迁移服务器后图片上传失败","112":"/archive/free/v1/CommonQ#第三方储存次策略配置后-图片上传失败","113":"/archive/free/v1/CommonQ#每一个储存策略中的第一行的域名配置是什么意思","114":"/archive/free/v1/CommonQ#上传文件后提示-upload-file-size-exceeds-the-maximum-value","115":"/archive/free/v1/CommonQ#系统设置-基本设置-无法保存","116":"/archive/free/v1/CommonQ#开启鉴黄后图片上传很慢、甚至上传失败","117":"/archive/free/v1/CommonQ#ftp-功能无法上传","118":"/archive/free/v1/CommonQ#安装时出现重定向次数过多","119":"/archive/free/v1/CommonQ#在线更新失败","120":"/archive/free/v1/SP/BasicConf#关闭注册","121":"/archive/free/v1/SP/BasicConf#网站标题","122":"/archive/free/v1/SP/BasicConf#网站关键字","123":"/archive/free/v1/SP/BasicConf#自定义css","124":"/archive/free/v1/SP/BasicConf#统计代码","125":"/archive/free/v1/SP/BasicConf#备案号","126":"/archive/free/v1/SP/BasicConf#系统公告","127":"/archive/free/v1/SP/ImgSex#开启图片鉴黄","128":"/archive/free/v1/SP/ImgSex#key","129":"/archive/free/v1/SP/ImgSex#内容评级","130":"/archive/free/v1/SP/ImgSex#拦截","131":"/archive/free/v1/SP/MailConf#邮件发送方式","132":"/archive/free/v1/SP/MailConf#smtp验证方式","133":"/archive/free/v1/SP/MailConf#smtp主机地址","134":"/archive/free/v1/SP/MailConf#smtp用户名","135":"/archive/free/v1/SP/MailConf#smtp密码","136":"/archive/free/v1/SP/MailConf#smtp端口","137":"/archive/free/v1/SP/MailConf#发件人邮箱","138":"/archive/free/v1/SP/OtherConf#软删除","139":"/archive/free/v1/SP/OtherConf#开启api","140":"/archive/free/v1/SP/OtherConf#封禁ip","141":"/archive/free/v1/SP/UploadConf#允许游客上传","142":"/archive/free/v1/SP/UploadConf#最大上传大小","143":"/archive/free/v1/SP/UploadConf#单次同时上传数量","144":"/archive/free/v1/SP/UploadConf#允许上传的文件后缀","145":"/archive/free/v1/SP/UploadConf#文件路径命名规则","146":"/archive/free/v1/SP/UploadConf#文件命名规则","147":"/archive/free/v1/SP/UserConf#用户初始配额容量","148":"/archive/free/v1/SS/AliyunOSS#第一步-创建储存空间-bucket","149":"/archive/free/v1/SS/AliyunOSS#第二步-设置","150":"/archive/free/v1/UpdateLog#_1-6-4-2021-12-20","151":"/archive/free/v1/UpdateLog#added","152":"/archive/free/v1/UpdateLog#changed","153":"/archive/free/v1/UpdateLog#faq","154":"/archive/free/v1/UpdateLog#v1-6-3","155":"/archive/free/v1/UpdateLog#added-1","156":"/archive/free/v1/UpdateLog#changed-1","157":"/archive/free/v1/UpdateLog#fixed","158":"/archive/free/v1/UpdateLog#_1-6-1","159":"/archive/free/v1/UpdateLog#added-2","160":"/archive/free/v1/UpdateLog#changed-2","161":"/archive/free/v1/UpdateLog#fixes","162":"/archive/free/v1/UpdateLog#_1-6-0","163":"/archive/free/v1/UpdateLog#added-3","164":"/archive/free/v1/UpdateLog#changed-3","165":"/archive/free/v1/UpdateLog#fixes-1","166":"/archive/free/v1/UpdateLog#_1-6-0-1","167":"/archive/free/v1/UpdateLog#fixes-2","168":"/archive/free/v1/UpdateLog#changed-4","169":"/archive/free/v1/UpdateLog#v1-5-7","170":"/archive/free/v1/UpdateLog#fixes-3","171":"/archive/free/v1/UpdateLog#v1-5-6","172":"/archive/free/v1/UpdateLog#added-4","173":"/archive/free/v1/UpdateLog#changed-5","174":"/archive/free/v1/UpdateLog#v1-5-5","175":"/archive/free/v1/UpdateLog#v1-5-4","176":"/archive/free/v1/UpdateLog#v1-5-3","177":"/archive/free/v1/UpdateLog#v1-5-2","178":"/archive/free/v1/Watermark#文字水印配置说明","179":"/archive/free/v1/Watermark#图片水印配置说明","180":"/archive/free/v1/Watermark#faq","181":"/archive/free/v1/env#配置说明","182":"/archive/free/v1/env#app-debug","183":"/archive/free/v1/env#app-trace","184":"/archive/free/v1/env#database-hostname","185":"/archive/free/v1/env#database-username","186":"/archive/free/v1/env#database-password","187":"/archive/free/v1/env#database-hostport","188":"/archive/free/v1/env#database-charset","189":"/archive/free/v1/env#database-prefix","190":"/archive/free/v1/env#system-single-user-mode","191":"/archive/free/v1/env#system-intercept-salacity","192":"/archive/free/v1/env#system-url-query","193":"/archive/free/v1/env#system-watermark","194":"/archive/free/v1/#lsky-pro-v1-x","195":"/archive/free/v1/#主要特性","196":"/archive/free/v1/#安装需求","197":"/archive/free/v1/#版权声明","198":"/archive/free/v1/#捐赠","199":"/archive/free/v2/advanced/octane#laravel-octane","200":"/archive/free/v2/advanced/octane#配置环境变量","201":"/archive/free/v2/advanced/octane#roadrunner","202":"/archive/free/v2/advanced/octane#swoole","203":"/archive/free/v2/advanced/octane#配置站点访问协议-可选","204":"/archive/free/v2/advanced/octane#启动程序","205":"/archive/free/v2/advanced/octane#重载-workers","206":"/archive/free/v2/advanced/octane#停止服务器","207":"/archive/free/v2/advanced/octane#检查状态","208":"/archive/free/v2/advanced/octane#nginx-反向代理示例","209":"/archive/free/v2/advanced/octane#supervisor","210":"/archive/free/v2/group/basic#基础设置","211":"/archive/free/v2/group/basic#上传频率限制","212":"/archive/free/v2/group/basic#命名规则","213":"/archive/free/v2/group/basic#允许上传的图片类型","214":"/archive/free/v2/group/original-protection#原图保护","215":"/archive/free/v2/advanced/cache#配置缓存","216":"/archive/free/v2/advanced/cache#使用-redis","217":"/archive/free/v2/advanced/cache#使用-memcached","218":"/archive/free/v2/group/picture-review#图片审核","219":"/archive/free/v2/group/picture-review#腾讯云内容安全","220":"/archive/free/v2/group/picture-review#endpoint","221":"/archive/free/v2/group/picture-review#地域","222":"/archive/free/v2/group/picture-review#阿里云内容安全","223":"/archive/free/v2/group/picture-review#业务场景","224":"/archive/free/v2/group/picture-review#地域-1","225":"/archive/free/v2/group/picture-review#nsfwjs","226":"/archive/free/v2/group/picture-review#接口地址","227":"/archive/free/v2/group/picture-review#属性名称","228":"/archive/free/v2/#介绍","229":"/archive/free/v2/#特性","230":"/archive/free/v2/#线上交流","231":"/archive/free/v2/#安装要求","232":"/archive/free/v2/#支持的数据库","233":"/archive/free/v2/#捐赠","234":"/archive/free/v2/#反馈问题","235":"/archive/free/v2/#升级指南","236":"/archive/free/v2/#准备工作","237":"/archive/free/v2/#迁移脚本配置","238":"/archive/free/v2/#开始迁移","239":"/archive/free/v2/#后续操作","240":"/archive/free/v2/group/watermark#水印配置","241":"/archive/free/v2/group/watermark#水印支持的图片格式","242":"/archive/free/v2/group/watermark#水印位置","243":"/archive/free/v2/quick-start/installation#安装兰空图床","244":"/archive/free/v2/quick-start/installation#下载正式版本","245":"/archive/free/v2/quick-start/installation#运行环境配置","246":"/archive/free/v2/quick-start/installation#准备安装","247":"/archive/free/v2/quick-start/installation#开始安装","248":"/archive/free/v2/quick-start/migration#迁移兰空图床","249":"/archive/free/v2/quick-start/questions#安装时出现错误-sqlstate-42000-syntax-error-or-access-violation-1064-you-have-an-error","250":"/archive/free/v2/quick-start/questions#为什么配置完了以后-访问站点显示-404","251":"/archive/free/v2/quick-start/questions#图片管理为什么不能批量删除","252":"/archive/free/v2/quick-start/questions#图片可以分发到多个储存吗","253":"/archive/free/v2/quick-start/questions#为什么不支持-svg-格式的图片","254":"/archive/free/v2/quick-start/questions#能不能上传图片以外格式的文件-例如-mp4","255":"/archive/free/v2/quick-start/questions#为什么不支持客户端直传","256":"/archive/free/v2/quick-start/questions#我多次上传了相同的照片-图片管理中也出现了图片-这是-bug-还是-feature","257":"/archive/free/v2/quick-start/questions#我的图片中-「复制图片」出错-显示-复制失败-clipboarditem-is-not-defined","258":"/archive/free/v2/quick-start/questions#原图保护功能是什么","259":"/archive/free/v2/quick-start/questions#开启原图保护功能后访问图片-404","260":"/archive/free/v2/quick-start/questions#更新后出现样式异常、按钮不起作用","261":"/archive/free/v2/quick-start/questions#上传出现失败-请稍后重试","262":"/archive/free/v2/quick-start/questions#使用反向代理并且域名使用了-https-的情况下-程序请求静态资源、生成的链接却是-http","263":"/archive/free/v2/quick-start/questions#能不能支持-xxxx-、xxxx-储存","264":"/archive/free/v2/quick-start/questions#缩略图文件夹可以改名字吗","265":"/archive/free/v2/quick-start/questions#缩略图文件夹、文件被我删掉了怎么办","266":"/archive/free/v2/quick-start/questions#如何增加统计代码","267":"/archive/free/v2/quick-start/questions#如何修改-redis-库","268":"/archive/free/v2/quick-start/upgrade#在线升级","269":"/archive/free/v2/quick-start/upgrade#手动升级","270":"/archive/free/v2/storage/faq#储存的特殊说明","271":"/archive/free/v2/storage/faq#本地储存","272":"/archive/free/v2/storage/faq#阿里云-oss","273":"/archive/free/v2/storage/faq#腾讯云-cos","274":"/archive/free/v2/storage/faq#minio","275":"/archive/free/v2/storage/intro#储存策略简介","276":"/archive/free/v2/storage/intro#如何设置归属角色组","277":"/archive/free/v2/storage/intro#如何自定义一个储存","278":"/guide/declaration#免责声明","279":"/guide/faq#常见问题","280":"/guide/faq#为什么配置完了以后-访问站点显示-404","281":"/guide/faq#能不能上传图片以外格式的文件-例如-mp4","282":"/guide/faq#为什么不支持客户端直传","283":"/guide/faq#我多次上传了相同的图片-图片管理中也出现了图片-这是-bug-还是-feature","284":"/guide/faq#我的图片中-「复制图片」出错-显示-复制失败","285":"/guide/faq#更新后出现样式异常、按钮不起作用","286":"/guide/faq#上传出现失败-请稍后重试","287":"/guide/faq#使用反向代理并且域名使用了-https-的情况下-程序请求静态资源、生成的链接却是-http","288":"/guide/faq#能不能支持-xxxx-、xxxx-储存","289":"/guide/getting-started#快速开始","290":"/guide/getting-started#购买","291":"/guide/getting-started#准备","292":"/guide/group#角色组","293":"/guide/group#基础","294":"/guide/group#允许上传的文件类型","295":"/guide/group#储存","296":"/guide/handle#图片处理","297":"/guide/handle#内存设置","298":"/guide/handle#同步和异步的区别","299":"/guide/handle#图片保存质量","300":"/guide/import#从旧版本的数据库导入","301":"/guide/import#可以迁移的数据","302":"/guide/import#无法迁移的数据","303":"/guide/import#需要调整的数据","304":"/guide/import#如何迁移","305":"/guide/import#安装-2-x-版本","306":"/guide/import#执行迁移","307":"/guide/install#安装-lsky-pro","308":"/guide/install#普通安装","309":"/guide/install#第一步-创建站点","310":"/guide/install#第二步-配置伪静态","311":"/guide/install#第三步-开始安装","312":"/guide/install#第四步-配置消息队列","313":"/guide/install#docker-安装","314":"/guide/install#准备工作","315":"/guide/install#下载源码","316":"/guide/install#构建本地镜像","317":"/guide/install#创建数据目录","318":"/guide/install#docker","319":"/guide/install#运行","320":"/guide/install#docker-compose","321":"/guide/install#运行-1","322":"/guide/install#参数解释","323":"/guide/introduce#lsky-pro-介绍","324":"/guide/introduce#使用场景","325":"/guide/introduce#主要特性","326":"/guide/introduce#主要功能","327":"/guide/migrate#迁移","328":"/guide/migrate#创建新站点","329":"/guide/migrate#移除符号链接","330":"/guide/migrate#打包文件","331":"/guide/migrate#迁移数据库","332":"/guide/migrate#恢复安装","333":"/guide/migrate#更改配置","334":"/guide/migrate#配置消息队列","335":"/guide/payment#支付驱动","336":"/guide/payment#支付宝","337":"/guide/payment#创建支付应用","338":"/guide/payment#绑定支付宝支付产品","339":"/guide/payment#开通电脑网站支付","340":"/guide/payment#设置加签方式","341":"/guide/payment#下载证书生成软件","342":"/guide/payment#生成证书并上传","343":"/guide/payment#下载证书","344":"/guide/payment#设置回调地址","345":"/guide/payment#上传证书","346":"/guide/payment#微信","347":"/guide/payment#paypal","348":"/guide/payment#创建应用","349":"/guide/payment#配置","350":"/guide/payment#webhook","351":"/guide/process#云处理","352":"/guide/process#如何使用云处理","353":"/guide/process#使用-x-sendfile","354":"/guide/process#预设版本和支持参数","355":"/guide/process#预设版本","356":"/guide/process#支持参数","357":"/guide/process#处理规则","358":"/guide/process#or","359":"/guide/process#flip","360":"/guide/process#crop","361":"/guide/process#裁剪位置","362":"/guide/process#裁剪焦点","363":"/guide/process#裁剪-crop","364":"/guide/process#w","365":"/guide/process#h","366":"/guide/process#fit","367":"/guide/process#接受","368":"/guide/process#dpr","369":"/guide/process#bri","370":"/guide/process#con","371":"/guide/process#gam","372":"/guide/process#sharp","373":"/guide/process#blur","374":"/guide/process#pixel","375":"/guide/process#filt","376":"/guide/process#bg","377":"/guide/process#border","378":"/guide/process#宽度","379":"/guide/process#颜色","380":"/guide/process#方式","381":"/guide/process#q","382":"/guide/process#fm","383":"/guide/process#relative-dimensions","384":"/guide/process#colors","385":"/guide/process#十六进制","386":"/guide/process#颜色名称","387":"/guide/requirement#环境要求","388":"/guide/requirement#php-要求","389":"/guide/requirement#数据库","390":"/guide/requirement#服务器配置","391":"/guide/requirement#nginx","392":"/guide/requirement#supervisor","393":"/guide/requirement#安装-supervisor","394":"/guide/requirement#配置-supervisor","395":"/guide/requirement#启动-supervisor","396":"/guide/requirement#imagemagick","397":"/guide/requirement#检查系统是否安装-imagemagick","398":"/guide/requirement#安装","399":"/guide/storage#储存管理","400":"/guide/storage#储存是如何运作的","401":"/guide/storage#访问前缀是什么","402":"/guide/storage#处理器是什么","403":"/guide/storage#支持的文件命名规则","404":"/guide/upgrade#升级","405":"/guide/upgrade#在线升级","406":"/guide/upgrade#离线升级"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,9],"1":[1,1,13],"2":[3,1,16],"3":[2,1,10],"4":[1,1,16],"5":[1,1,11],"6":[1,1,61],"7":[1,1,4],"8":[1,1,26],"9":[1,1,2],"10":[1,1,29],"11":[2,1,71],"12":[1,1,35],"13":[1,1,10],"14":[1,1,11],"15":[1,1,8],"16":[1,1,8],"17":[1,1,3],"18":[1,1,1],"19":[1,1,1],"20":[1,1,3],"21":[1,1,9],"22":[1,1,15],"23":[1,1,12],"24":[1,1,8],"25":[1,1,8],"26":[1,1,63],"27":[1,1,24],"28":[1,1,5],"29":[1,1,20],"30":[1,1,1],"31":[1,1,8],"32":[1,2,6],"33":[1,2,30],"34":[1,1,8],"35":[1,2,6],"36":[1,2,26],"37":[1,1,9],"38":[1,2,19],"39":[1,2,4],"40":[1,1,34],"41":[1,1,13],"42":[1,1,11],"43":[2,1,16],"44":[2,1,137],"45":[1,1,1],"46":[1,1,1],"47":[1,2,14],"48":[2,2,7],"49":[2,2,18],"50":[1,2,13],"51":[1,1,11],"52":[1,1,81],"53":[1,1,35],"54":[1,1,14],"55":[1,1,5],"56":[1,1,5],"57":[1,1,6],"58":[1,1,8],"59":[1,1,3],"60":[1,1,55],"61":[1,1,63],"62":[1,1,39],"63":[2,1,1],"64":[2,2,31],"65":[1,2,3],"66":[1,2,5],"67":[3,1,10],"68":[3,3,17],"69":[1,3,13],"70":[1,1,1],"71":[1,1,5],"72":[1,1,5],"73":[1,1,5],"74":[1,1,12],"75":[1,1,21],"76":[1,1,39],"77":[1,1,14],"78":[2,1,64],"79":[2,1,31],"80":[2,1,41],"81":[2,1,6],"82":[4,1,8],"83":[2,4,85],"84":[2,4,61],"85":[1,1,8],"86":[2,1,48],"87":[2,1,52],"88":[2,1,41],"89":[2,1,14],"90":[2,1,5],"91":[13,1,5],"92":[4,1,4],"93":[4,1,12],"94":[4,1,4],"95":[1,1,6],"96":[7,1,8],"97":[9,1,13],"98":[2,1,7],"99":[2,1,20],"100":[3,1,5],"101":[3,1,14],"102":[7,1,23],"103":[4,1,9],"104":[2,1,20],"105":[2,1,8],"106":[3,1,10],"107":[2,1,17],"108":[4,1,10],"109":[1,1,5],"110":[1,1,18],"111":[2,1,12],"112":[3,1,4],"113":[2,1,11],"114":[9,1,5],"115":[5,1,15],"116":[3,1,8],"117":[3,1,10],"118":[1,1,5],"119":[2,1,13],"120":[1,1,4],"121":[1,1,2],"122":[1,1,4],"123":[1,1,5],"124":[2,1,2],"125":[1,1,3],"126":[1,1,6],"127":[1,1,9],"128":[1,1,2],"129":[1,1,12],"130":[1,1,22],"131":[1,1,3],"132":[1,1,6],"133":[1,1,6],"134":[1,1,2],"135":[1,1,2],"136":[1,1,2],"137":[1,1,3],"138":[1,1,5],"139":[1,1,6],"140":[1,1,17],"141":[1,1,4],"142":[1,1,6],"143":[1,1,2],"144":[1,1,10],"145":[1,1,9],"146":[1,1,6],"147":[1,1,6],"148":[4,1,8],"149":[2,1,27],"150":[7,1,1],"151":[1,7,3],"152":[1,7,8],"153":[2,7,10],"154":[3,1,1],"155":[1,3,13],"156":[1,3,9],"157":[1,3,19],"158":[2,1,1],"159":[1,2,3],"160":[1,2,9],"161":[1,2,12],"162":[3,1,1],"163":[1,3,14],"164":[1,3,29],"165":[1,3,3],"166":[3,1,5],"167":[1,3,7],"168":[1,3,2],"169":[3,1,1],"170":[1,3,8],"171":[3,1,1],"172":[1,3,6],"173":[1,3,9],"174":[2,1,38],"175":[3,2,9],"176":[3,1,22],"177":[3,1,22],"178":[2,1,31],"179":[1,1,22],"180":[2,1,27],"181":[2,1,1],"182":[2,2,5],"183":[2,2,5],"184":[2,2,2],"185":[2,2,2],"186":[2,2,2],"187":[2,2,2],"188":[2,2,2],"189":[2,2,2],"190":[4,2,10],"191":[3,2,3],"192":[3,2,4],"193":[2,2,2],"194":[4,1,10],"195":[1,4,39],"196":[1,4,22],"197":[1,4,11],"198":[1,4,10],"199":[2,1,27],"200":[1,2,1],"201":[1,3,3],"202":[1,3,3],"203":[3,3,3],"204":[1,2,6],"205":[2,2,6],"206":[1,2,6],"207":[1,2,6],"208":[2,2,80],"209":[1,2,26],"210":[1,1,12],"211":[1,1,24],"212":[1,1,5],"213":[1,1,15],"214":[1,1,24],"215":[1,1,14],"216":[2,1,13],"217":[2,1,17],"218":[1,1,1],"219":[1,1,8],"220":[1,2,6],"221":[1,2,30],"222":[1,1,8],"223":[1,2,6],"224":[1,2,26],"225":[1,1,9],"226":[1,2,19],"227":[1,2,4],"228":[1,1,28],"229":[1,1,66],"230":[1,1,8],"231":[1,1,27],"232":[1,1,14],"233":[1,1,10],"234":[1,1,41],"235":[1,1,43],"236":[1,1,12],"237":[1,1,12],"238":[1,1,20],"239":[1,1,16],"240":[1,1,30],"241":[1,1,13],"242":[1,1,11],"243":[1,1,9],"244":[1,1,18],"245":[1,1,22],"246":[1,1,30],"247":[1,1,6],"248":[1,1,26],"249":[13,1,5],"250":[4,1,4],"251":[2,1,4],"252":[2,1,10],"253":[4,1,12],"254":[4,1,4],"255":[1,1,6],"256":[7,1,8],"257":[9,1,13],"258":[2,1,7],"259":[2,1,20],"260":[3,1,5],"261":[3,1,14],"262":[7,1,23],"263":[4,1,9],"264":[2,1,12],"265":[3,1,10],"266":[2,1,8],"267":[4,1,10],"268":[1,1,26],"269":[1,1,86],"270":[1,1,1],"271":[1,1,14],"272":[2,1,7],"273":[2,1,18],"274":[1,1,13],"275":[1,1,18],"276":[2,1,16],"277":[2,1,137],"278":[1,1,246],"279":[1,1,2],"280":[4,1,4],"281":[4,1,4],"282":[1,1,6],"283":[7,1,8],"284":[5,1,13],"285":[3,1,5],"286":[3,1,16],"287":[7,1,40],"288":[4,1,9],"289":[1,1,6],"290":[1,1,26],"291":[1,1,40],"292":[1,1,9],"293":[1,1,12],"294":[1,1,13],"295":[1,1,6],"296":[1,1,8],"297":[1,1,50],"298":[1,1,35],"299":[1,1,17],"300":[1,1,19],"301":[1,1,22],"302":[1,1,6],"303":[1,1,4],"304":[1,1,1],"305":[4,2,6],"306":[1,2,20],"307":[3,1,6],"308":[1,3,22],"309":[2,4,51],"310":[2,4,51],"311":[2,4,10],"312":[2,4,109],"313":[2,3,1],"314":[1,4,1],"315":[1,5,15],"316":[1,5,10],"317":[1,5,33],"318":[1,4,1],"319":[1,5,53],"320":[2,4,1],"321":[1,6,30],"322":[2,4,75],"323":[3,1,27],"324":[1,3,40],"325":[1,3,30],"326":[1,3,32],"327":[1,1,6],"328":[1,1,6],"329":[1,1,25],"330":[1,1,33],"331":[1,1,46],"332":[1,1,79],"333":[1,1,16],"334":[1,1,8],"335":[1,1,10],"336":[1,1,1],"337":[1,2,11],"338":[1,2,8],"339":[1,2,8],"340":[1,2,3],"341":[1,2,1],"342":[1,2,1],"343":[1,2,3],"344":[1,2,12],"345":[1,2,11],"346":[1,1,2],"347":[1,1,1],"348":[1,2,12],"349":[1,2,1],"350":[1,2,21],"351":[1,1,27],"352":[1,1,6],"353":[3,1,36],"354":[1,1,1],"355":[1,2,26],"356":[1,2,26],"357":[1,1,61],"358":[1,2,23],"359":[1,2,17],"360":[1,2,16],"361":[1,3,24],"362":[1,3,36],"363":[2,3,19],"364":[1,2,11],"365":[1,2,11],"366":[1,2,2],"367":[2,3,40],"368":[1,2,29],"369":[1,2,21],"370":[1,2,20],"371":[1,2,20],"372":[1,2,17],"373":[1,2,17],"374":[1,2,17],"375":[1,2,16],"376":[1,2,13],"377":[1,2,18],"378":[1,3,4],"379":[1,3,3],"380":[1,3,22],"381":[1,2,24],"382":[1,2,22],"383":[1,1,27],"384":[1,1,13],"385":[1,2,13],"386":[1,2,142],"387":[1,1,26],"388":[2,1,47],"389":[1,1,27],"390":[1,1,1],"391":[1,2,13],"392":[1,2,38],"393":[2,3,19],"394":[2,3,61],"395":[2,3,18],"396":[1,2,42],"397":[2,3,13],"398":[1,3,30],"399":[1,1,29],"400":[1,1,27],"401":[1,1,42],"402":[1,1,18],"403":[1,1,48],"404":[1,1,3],"405":[1,1,10],"406":[1,1,23]},"averageFieldLength":[1.6904176904176904,1.5601965601965597,17.660933660933654],"storedFields":{"0":{"title":"缓存","titles":[]},"1":{"title":"缓存后台管理页面图标","titles":["缓存"]},"2":{"title":"缓存配置、事件、路由和视图","titles":["缓存"]},"3":{"title":"OPcache 拓展","titles":["缓存"]},"4":{"title":"接口文档","titles":[]},"5":{"title":"分离部署","titles":[]},"6":{"title":"修改构建脚本","titles":["分离部署"]},"7":{"title":"构建前端代码","titles":["分离部署"]},"8":{"title":"部署","titles":["分离部署"]},"9":{"title":"自定义储存","titles":[]},"10":{"title":"主题","titles":[]},"11":{"title":"主题是如何运作的?","titles":["主题"]},"12":{"title":"修改默认主题","titles":["主题"]},"13":{"title":"自定义主题","titles":["主题"]},"14":{"title":"创建支付应用","titles":[]},"15":{"title":"绑定支付宝支付产品","titles":[]},"16":{"title":"开通电脑网站支付","titles":[]},"17":{"title":"设置加签方式","titles":[]},"18":{"title":"下载证书生成软件","titles":[]},"19":{"title":"生成证书并上传","titles":[]},"20":{"title":"下载证书","titles":[]},"21":{"title":"设置回调地址","titles":[]},"22":{"title":"上传证书","titles":[]},"23":{"title":"创建应用","titles":[]},"24":{"title":"配置","titles":[]},"25":{"title":"套餐权益","titles":[]},"26":{"title":"阶梯价格","titles":[]},"27":{"title":"上传频率限制","titles":[]},"28":{"title":"命名规则","titles":[]},"29":{"title":"原图保护","titles":[]},"30":{"title":"图片审核","titles":[]},"31":{"title":"腾讯云内容安全","titles":["图片审核"]},"32":{"title":"Endpoint","titles":["图片审核","腾讯云内容安全"]},"33":{"title":"地域","titles":["图片审核","腾讯云内容安全"]},"34":{"title":"阿里云内容安全","titles":["图片审核"]},"35":{"title":"业务场景","titles":["图片审核","阿里云内容安全"]},"36":{"title":"地域","titles":["图片审核","阿里云内容安全"]},"37":{"title":"NsfwJS","titles":["图片审核"]},"38":{"title":"接口地址","titles":["图片审核","NsfwJS"]},"39":{"title":"属性名称","titles":["图片审核","NsfwJS"]},"40":{"title":"水印配置","titles":[]},"41":{"title":"水印支持的图片格式","titles":["水印配置"]},"42":{"title":"水印位置","titles":["水印配置"]},"43":{"title":"如何设置归属角色组?","titles":[]},"44":{"title":"如何自定义一个储存?","titles":[]},"45":{"title":"FAQ","titles":[]},"46":{"title":"储存的特殊说明","titles":["FAQ"]},"47":{"title":"本地储存","titles":["FAQ","储存的特殊说明"]},"48":{"title":"阿里云 OSS","titles":["FAQ","储存的特殊说明"]},"49":{"title":"腾讯云 COS","titles":["FAQ","储存的特殊说明"]},"50":{"title":"Minio","titles":["FAQ","储存的特殊说明"]},"51":{"title":"介绍","titles":[]},"52":{"title":"基本特性","titles":[]},"53":{"title":"安装要求","titles":[]},"54":{"title":"支持的数据库","titles":[]},"55":{"title":"为所有图片生成缩略图","titles":[]},"56":{"title":"重建程序所需要的符号连接","titles":[]},"57":{"title":"校正系统统计数据","titles":[]},"58":{"title":"升级条件","titles":[]},"59":{"title":"准备工作","titles":[]},"60":{"title":"迁移文件","titles":[]},"61":{"title":"修改配置","titles":[]},"62":{"title":"执行升级","titles":[]},"63":{"title":"编译安装 ImageImagick","titles":[]},"64":{"title":"下载并解压 ImageImagick","titles":["编译安装 ImageImagick"]},"65":{"title":"编译","titles":["编译安装 ImageImagick"]},"66":{"title":"安装","titles":["编译安装 ImageImagick"]},"67":{"title":"编译安装 PHP Imagick","titles":[]},"68":{"title":"下载并解压 PHP Imagick","titles":["编译安装 PHP Imagick"]},"69":{"title":"编译并安装","titles":["编译安装 PHP Imagick"]},"70":{"title":"常规优化方案","titles":[]},"71":{"title":"优化配置加载","titles":["常规优化方案"]},"72":{"title":"优化路由加载","titles":["常规优化方案"]},"73":{"title":"优化视图加载","titles":["常规优化方案"]},"74":{"title":"进阶优化方案","titles":[]},"75":{"title":"图片管理功能","titles":[]},"76":{"title":"高级搜索功能","titles":[]},"77":{"title":"推荐运行环境","titles":[]},"78":{"title":"第一步,准备安装","titles":[]},"79":{"title":"第二步,准备运行环境","titles":[]},"80":{"title":"第三步,初始化配置","titles":[]},"81":{"title":"第四步,开始安装","titles":[]},"82":{"title":"最后一步,命令行配置(重要)","titles":[]},"83":{"title":"1. 配置队列处理进程","titles":["最后一步,命令行配置(重要)"]},"84":{"title":"2. 配置计划任务处理进程","titles":["最后一步,命令行配置(重要)"]},"85":{"title":"迁移兰空图床","titles":[]},"86":{"title":"1. 打包","titles":["迁移兰空图床"]},"87":{"title":"2. 准备新服务器","titles":["迁移兰空图床"]},"88":{"title":"3. 迁移到新服务器","titles":["迁移兰空图床"]},"89":{"title":"4. 生成符号链接","titles":["迁移兰空图床"]},"90":{"title":"5. 配置异步队列和计划任务","titles":["迁移兰空图床"]},"91":{"title":"安装时出现错误,SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error...","titles":[]},"92":{"title":"为什么配置完了以后,访问站点显示 404?","titles":[]},"93":{"title":"为什么不支持 svg 格式的图片?","titles":[]},"94":{"title":"能不能上传图片以外格式的文件,例如 mp4?","titles":[]},"95":{"title":"为什么不支持客户端直传","titles":[]},"96":{"title":"我多次上传了相同的照片,图片管理中也出现了图片,这是 bug 还是 feature?","titles":[]},"97":{"title":"我的图片中,「复制图片」出错,显示 复制失败, ClipboardItem is not defined","titles":[]},"98":{"title":"原图保护功能是什么?","titles":[]},"99":{"title":"开启原图保护功能后访问图片 404","titles":[]},"100":{"title":"更新后出现样式异常、按钮不起作用?","titles":[]},"101":{"title":"上传出现失败,请稍后重试?","titles":[]},"102":{"title":"使用反向代理并且域名使用了 https 的情况下,程序请求静态资源、生成的链接却是 http ?","titles":[]},"103":{"title":"能不能支持 xxxx 、xxxx 储存?","titles":[]},"104":{"title":"缩略图文件夹可以改名字吗?","titles":[]},"105":{"title":"可以关闭缩略图功能吗?","titles":[]},"106":{"title":"缩略图文件夹、文件被我删掉了怎么办?","titles":[]},"107":{"title":"如何增加统计代码?","titles":[]},"108":{"title":"如何修改 Redis 库?","titles":[]},"109":{"title":"在线升级","titles":[]},"110":{"title":"手动升级","titles":[]},"111":{"title":"迁移服务器后图片上传失败?","titles":[]},"112":{"title":"第三方储存次策略配置后,图片上传失败?","titles":[]},"113":{"title":"每一个储存策略中的第一行的域名配置是什么意思?","titles":[]},"114":{"title":"上传文件后提示 upload File size exceeds the maximum value ?","titles":[]},"115":{"title":"系统设置->基本设置 无法保存?","titles":[]},"116":{"title":"开启鉴黄后图片上传很慢、甚至上传失败?","titles":[]},"117":{"title":"FTP 功能无法上传?","titles":[]},"118":{"title":"安装时出现重定向次数过多","titles":[]},"119":{"title":"在线更新失败?","titles":[]},"120":{"title":"关闭注册","titles":[]},"121":{"title":"网站标题","titles":[]},"122":{"title":"网站关键字","titles":[]},"123":{"title":"自定义CSS","titles":[]},"124":{"title":"统计代码:","titles":[]},"125":{"title":"备案号","titles":[]},"126":{"title":"系统公告","titles":[]},"127":{"title":"开启图片鉴黄","titles":[]},"128":{"title":"Key","titles":[]},"129":{"title":"内容评级","titles":[]},"130":{"title":"拦截","titles":[]},"131":{"title":"邮件发送方式","titles":[]},"132":{"title":"SMTP验证方式","titles":[]},"133":{"title":"SMTP主机地址","titles":[]},"134":{"title":"SMTP用户名","titles":[]},"135":{"title":"SMTP密码","titles":[]},"136":{"title":"SMTP端口","titles":[]},"137":{"title":"发件人邮箱","titles":[]},"138":{"title":"软删除","titles":[]},"139":{"title":"开启API","titles":[]},"140":{"title":"封禁IP","titles":[]},"141":{"title":"允许游客上传","titles":[]},"142":{"title":"最大上传大小","titles":[]},"143":{"title":"单次同时上传数量","titles":[]},"144":{"title":"允许上传的文件后缀","titles":[]},"145":{"title":"文件路径命名规则","titles":[]},"146":{"title":"文件命名规则","titles":[]},"147":{"title":"用户初始配额容量","titles":[]},"148":{"title":"第一步,创建储存空间(Bucket)","titles":[]},"149":{"title":"第二步,设置","titles":[]},"150":{"title":"1.6.4 (2021-12-20)","titles":[]},"151":{"title":"Added","titles":["1.6.4 (2021-12-20)"]},"152":{"title":"Changed","titles":["1.6.4 (2021-12-20)"]},"153":{"title":"FAQ:","titles":["1.6.4 (2021-12-20)"]},"154":{"title":"V1.6.3","titles":[]},"155":{"title":"Added","titles":["V1.6.3"]},"156":{"title":"Changed","titles":["V1.6.3"]},"157":{"title":"Fixed","titles":["V1.6.3"]},"158":{"title":"1.6.1","titles":[]},"159":{"title":"Added","titles":["1.6.1"]},"160":{"title":"Changed","titles":["1.6.1"]},"161":{"title":"Fixes","titles":["1.6.1"]},"162":{"title":"1.6.0","titles":[]},"163":{"title":"Added","titles":["1.6.0"]},"164":{"title":"Changed","titles":["1.6.0"]},"165":{"title":"Fixes","titles":["1.6.0"]},"166":{"title":"1.6.0","titles":[]},"167":{"title":"Fixes","titles":["1.6.0"]},"168":{"title":"Changed","titles":["1.6.0"]},"169":{"title":"V1.5.7","titles":[]},"170":{"title":"Fixes","titles":["V1.5.7"]},"171":{"title":"V1.5.6","titles":[]},"172":{"title":"Added","titles":["V1.5.6"]},"173":{"title":"Changed","titles":["V1.5.6"]},"174":{"title":"V1.5.5","titles":[]},"175":{"title":"V1.5.4","titles":["V1.5.5"]},"176":{"title":"V1.5.3","titles":[]},"177":{"title":"V1.5.2","titles":[]},"178":{"title":"文字水印配置说明:","titles":[]},"179":{"title":"图片水印配置说明","titles":[]},"180":{"title":"FAQ:","titles":[]},"181":{"title":"配置说明:","titles":[]},"182":{"title":"app.debug","titles":["配置说明:"]},"183":{"title":"app.trace","titles":["配置说明:"]},"184":{"title":"database.hostname","titles":["配置说明:"]},"185":{"title":"database.username","titles":["配置说明:"]},"186":{"title":"database.password","titles":["配置说明:"]},"187":{"title":"database.hostport","titles":["配置说明:"]},"188":{"title":"database.charset","titles":["配置说明:"]},"189":{"title":"database.prefix","titles":["配置说明:"]},"190":{"title":"system.single_user_mode","titles":["配置说明:"]},"191":{"title":"system.intercept_salacity","titles":["配置说明:"]},"192":{"title":"system.url_query","titles":["配置说明:"]},"193":{"title":"system.watermark","titles":["配置说明:"]},"194":{"title":"Lsky Pro v1.x","titles":[]},"195":{"title":"主要特性","titles":["Lsky Pro v1.x"]},"196":{"title":"安装需求","titles":["Lsky Pro v1.x"]},"197":{"title":"版权声明","titles":["Lsky Pro v1.x"]},"198":{"title":"捐赠","titles":["Lsky Pro v1.x"]},"199":{"title":"Laravel Octane","titles":[]},"200":{"title":"配置环境变量","titles":["Laravel Octane"]},"201":{"title":"RoadRunner","titles":["Laravel Octane","配置环境变量"]},"202":{"title":"Swoole","titles":["Laravel Octane","配置环境变量"]},"203":{"title":"配置站点访问协议(可选)","titles":["Laravel Octane","配置环境变量"]},"204":{"title":"启动程序","titles":["Laravel Octane"]},"205":{"title":"重载 Workers","titles":["Laravel Octane"]},"206":{"title":"停止服务器","titles":["Laravel Octane"]},"207":{"title":"检查状态","titles":["Laravel Octane"]},"208":{"title":"Nginx 反向代理示例","titles":["Laravel Octane"]},"209":{"title":"Supervisor","titles":["Laravel Octane"]},"210":{"title":"基础设置","titles":[]},"211":{"title":"上传频率限制","titles":["基础设置"]},"212":{"title":"命名规则","titles":["基础设置"]},"213":{"title":"允许上传的图片类型","titles":["基础设置"]},"214":{"title":"原图保护","titles":[]},"215":{"title":"配置缓存","titles":[]},"216":{"title":"使用 Redis","titles":["配置缓存"]},"217":{"title":"使用 Memcached","titles":["配置缓存"]},"218":{"title":"图片审核","titles":[]},"219":{"title":"腾讯云内容安全","titles":["图片审核"]},"220":{"title":"Endpoint","titles":["图片审核","腾讯云内容安全"]},"221":{"title":"地域","titles":["图片审核","腾讯云内容安全"]},"222":{"title":"阿里云内容安全","titles":["图片审核"]},"223":{"title":"业务场景","titles":["图片审核","阿里云内容安全"]},"224":{"title":"地域","titles":["图片审核","阿里云内容安全"]},"225":{"title":"NsfwJS","titles":["图片审核"]},"226":{"title":"接口地址","titles":["图片审核","NsfwJS"]},"227":{"title":"属性名称","titles":["图片审核","NsfwJS"]},"228":{"title":"介绍","titles":[]},"229":{"title":"特性","titles":[]},"230":{"title":"线上交流","titles":[]},"231":{"title":"安装要求","titles":[]},"232":{"title":"支持的数据库","titles":[]},"233":{"title":"捐赠","titles":[]},"234":{"title":"反馈问题","titles":[]},"235":{"title":"升级指南","titles":[]},"236":{"title":"准备工作","titles":["升级指南"]},"237":{"title":"迁移脚本配置","titles":["升级指南"]},"238":{"title":"开始迁移","titles":["升级指南"]},"239":{"title":"后续操作","titles":["升级指南"]},"240":{"title":"水印配置","titles":[]},"241":{"title":"水印支持的图片格式","titles":["水印配置"]},"242":{"title":"水印位置","titles":["水印配置"]},"243":{"title":"安装兰空图床","titles":[]},"244":{"title":"下载正式版本","titles":["安装兰空图床"]},"245":{"title":"运行环境配置","titles":["安装兰空图床"]},"246":{"title":"准备安装","titles":["安装兰空图床"]},"247":{"title":"开始安装","titles":["安装兰空图床"]},"248":{"title":"迁移兰空图床","titles":[]},"249":{"title":"安装时出现错误,SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error...","titles":[]},"250":{"title":"为什么配置完了以后,访问站点显示 404?","titles":[]},"251":{"title":"图片管理为什么不能批量删除?","titles":[]},"252":{"title":"图片可以分发到多个储存吗?","titles":[]},"253":{"title":"为什么不支持 svg 格式的图片?","titles":[]},"254":{"title":"能不能上传图片以外格式的文件,例如 mp4?","titles":[]},"255":{"title":"为什么不支持客户端直传","titles":[]},"256":{"title":"我多次上传了相同的照片,图片管理中也出现了图片,这是 bug 还是 feature?","titles":[]},"257":{"title":"我的图片中,「复制图片」出错,显示 复制失败, ClipboardItem is not defined","titles":[]},"258":{"title":"原图保护功能是什么?","titles":[]},"259":{"title":"开启原图保护功能后访问图片 404","titles":[]},"260":{"title":"更新后出现样式异常、按钮不起作用?","titles":[]},"261":{"title":"上传出现失败,请稍后重试?","titles":[]},"262":{"title":"使用反向代理并且域名使用了 https 的情况下,程序请求静态资源、生成的链接却是 http ?","titles":[]},"263":{"title":"能不能支持 xxxx 、xxxx 储存?","titles":[]},"264":{"title":"缩略图文件夹可以改名字吗?","titles":[]},"265":{"title":"缩略图文件夹、文件被我删掉了怎么办?","titles":[]},"266":{"title":"如何增加统计代码?","titles":[]},"267":{"title":"如何修改 Redis 库?","titles":[]},"268":{"title":"在线升级","titles":[]},"269":{"title":"手动升级","titles":[]},"270":{"title":"储存的特殊说明","titles":[]},"271":{"title":"本地储存","titles":["储存的特殊说明"]},"272":{"title":"阿里云 OSS","titles":["储存的特殊说明"]},"273":{"title":"腾讯云 COS","titles":["储存的特殊说明"]},"274":{"title":"Minio","titles":["储存的特殊说明"]},"275":{"title":"储存策略简介","titles":[]},"276":{"title":"如何设置归属角色组?","titles":["储存策略简介"]},"277":{"title":"如何自定义一个储存?","titles":["储存策略简介"]},"278":{"title":"免责声明","titles":[]},"279":{"title":"常见问题","titles":[]},"280":{"title":"为什么配置完了以后,访问站点显示 404?","titles":["常见问题"]},"281":{"title":"能不能上传图片以外格式的文件,例如 mp4?","titles":["常见问题"]},"282":{"title":"为什么不支持客户端直传","titles":["常见问题"]},"283":{"title":"我多次上传了相同的图片,图片管理中也出现了图片,这是 bug 还是 feature?","titles":["常见问题"]},"284":{"title":"我的图片中,「复制图片」出错,显示 复制失败","titles":["常见问题"]},"285":{"title":"更新后出现样式异常、按钮不起作用?","titles":["常见问题"]},"286":{"title":"上传出现失败,请稍后重试?","titles":["常见问题"]},"287":{"title":"使用反向代理并且域名使用了 https 的情况下,程序请求静态资源、生成的链接却是 http ?","titles":["常见问题"]},"288":{"title":"能不能支持 xxxx 、xxxx 储存?","titles":["常见问题"]},"289":{"title":"快速开始","titles":[]},"290":{"title":"购买","titles":["快速开始"]},"291":{"title":"准备","titles":["快速开始"]},"292":{"title":"角色组","titles":[]},"293":{"title":"基础","titles":["角色组"]},"294":{"title":"允许上传的文件类型","titles":["角色组"]},"295":{"title":"储存","titles":["角色组"]},"296":{"title":"图片处理","titles":[]},"297":{"title":"内存设置","titles":["图片处理"]},"298":{"title":"同步和异步的区别","titles":["图片处理"]},"299":{"title":"图片保存质量","titles":["图片处理"]},"300":{"title":"从旧版本的数据库导入","titles":[]},"301":{"title":"可以迁移的数据","titles":["从旧版本的数据库导入"]},"302":{"title":"无法迁移的数据","titles":["从旧版本的数据库导入"]},"303":{"title":"需要调整的数据","titles":["从旧版本的数据库导入"]},"304":{"title":"如何迁移","titles":["从旧版本的数据库导入"]},"305":{"title":"安装 2.x 版本","titles":["从旧版本的数据库导入","如何迁移"]},"306":{"title":"执行迁移","titles":["从旧版本的数据库导入","如何迁移"]},"307":{"title":"安装 Lsky Pro+","titles":[]},"308":{"title":"普通安装","titles":["安装 Lsky Pro+"]},"309":{"title":"第一步,创建站点","titles":["安装 Lsky Pro+","普通安装"]},"310":{"title":"第二步,配置伪静态","titles":["安装 Lsky Pro+","普通安装"]},"311":{"title":"第三步,开始安装","titles":["安装 Lsky Pro+","普通安装"]},"312":{"title":"第四步,配置消息队列","titles":["安装 Lsky Pro+","普通安装"]},"313":{"title":"Docker 安装","titles":["安装 Lsky Pro+"]},"314":{"title":"准备工作","titles":["安装 Lsky Pro+","Docker 安装"]},"315":{"title":"下载源码","titles":["安装 Lsky Pro+","Docker 安装","准备工作"]},"316":{"title":"构建本地镜像","titles":["安装 Lsky Pro+","Docker 安装","准备工作"]},"317":{"title":"创建数据目录","titles":["安装 Lsky Pro+","Docker 安装","准备工作"]},"318":{"title":"docker","titles":["安装 Lsky Pro+","Docker 安装"]},"319":{"title":"运行","titles":["安装 Lsky Pro+","Docker 安装","docker"]},"320":{"title":"docker-compose","titles":["安装 Lsky Pro+","Docker 安装"]},"321":{"title":"运行","titles":["安装 Lsky Pro+","Docker 安装","docker-compose"]},"322":{"title":"参数解释:","titles":["安装 Lsky Pro+","Docker 安装"]},"323":{"title":"Lsky Pro+ 介绍","titles":[]},"324":{"title":"使用场景","titles":["Lsky Pro+ 介绍"]},"325":{"title":"主要特性","titles":["Lsky Pro+ 介绍"]},"326":{"title":"主要功能","titles":["Lsky Pro+ 介绍"]},"327":{"title":"迁移","titles":[]},"328":{"title":"创建新站点","titles":["迁移"]},"329":{"title":"移除符号链接","titles":["迁移"]},"330":{"title":"打包文件","titles":["迁移"]},"331":{"title":"迁移数据库","titles":["迁移"]},"332":{"title":"恢复安装","titles":["迁移"]},"333":{"title":"更改配置","titles":["迁移"]},"334":{"title":"配置消息队列","titles":["迁移"]},"335":{"title":"支付驱动","titles":[]},"336":{"title":"支付宝","titles":["支付驱动"]},"337":{"title":"创建支付应用","titles":["支付驱动","支付宝"]},"338":{"title":"绑定支付宝支付产品","titles":["支付驱动","支付宝"]},"339":{"title":"开通电脑网站支付","titles":["支付驱动","支付宝"]},"340":{"title":"设置加签方式","titles":["支付驱动","支付宝"]},"341":{"title":"下载证书生成软件","titles":["支付驱动","支付宝"]},"342":{"title":"生成证书并上传","titles":["支付驱动","支付宝"]},"343":{"title":"下载证书","titles":["支付驱动","支付宝"]},"344":{"title":"设置回调地址","titles":["支付驱动","支付宝"]},"345":{"title":"上传证书","titles":["支付驱动","支付宝"]},"346":{"title":"微信","titles":["支付驱动"]},"347":{"title":"PayPal","titles":["支付驱动"]},"348":{"title":"创建应用","titles":["支付驱动","PayPal"]},"349":{"title":"配置","titles":["支付驱动","PayPal"]},"350":{"title":"Webhook","titles":["支付驱动","PayPal"]},"351":{"title":"云处理","titles":[]},"352":{"title":"如何使用云处理","titles":["云处理"]},"353":{"title":"使用 X-Sendfile","titles":["云处理"]},"354":{"title":"预设版本和支持参数","titles":["云处理"]},"355":{"title":"预设版本","titles":["云处理","预设版本和支持参数"]},"356":{"title":"支持参数","titles":["云处理","预设版本和支持参数"]},"357":{"title":"处理规则","titles":["云处理"]},"358":{"title":"方向","titles":["云处理","处理规则"]},"359":{"title":"翻转","titles":["云处理","处理规则"]},"360":{"title":"裁剪","titles":["云处理","处理规则"]},"361":{"title":"裁剪位置","titles":["云处理","处理规则","裁剪"]},"362":{"title":"裁剪焦点","titles":["云处理","处理规则","裁剪"]},"363":{"title":"裁剪 crop","titles":["云处理","处理规则","裁剪"]},"364":{"title":"宽度","titles":["云处理","处理规则"]},"365":{"title":"高度","titles":["云处理","处理规则"]},"366":{"title":"适配","titles":["云处理","处理规则"]},"367":{"title":"接受:","titles":["云处理","处理规则","适配"]},"368":{"title":"设备像素比","titles":["云处理","处理规则"]},"369":{"title":"亮度","titles":["云处理","处理规则"]},"370":{"title":"对比度","titles":["云处理","处理规则"]},"371":{"title":"伽马","titles":["云处理","处理规则"]},"372":{"title":"锐化","titles":["云处理","处理规则"]},"373":{"title":"模糊","titles":["云处理","处理规则"]},"374":{"title":"像素化","titles":["云处理","处理规则"]},"375":{"title":"滤镜","titles":["云处理","处理规则"]},"376":{"title":"背景色","titles":["云处理","处理规则"]},"377":{"title":"边框","titles":["云处理","处理规则"]},"378":{"title":"宽度","titles":["云处理","处理规则","边框"]},"379":{"title":"颜色","titles":["云处理","处理规则","边框"]},"380":{"title":"方式","titles":["云处理","处理规则","边框"]},"381":{"title":"质量","titles":["云处理","处理规则"]},"382":{"title":"格式","titles":["云处理","处理规则"]},"383":{"title":"相对尺寸","titles":["云处理"]},"384":{"title":"支持的颜色","titles":["云处理"]},"385":{"title":"十六进制","titles":["云处理","支持的颜色"]},"386":{"title":"颜色名称","titles":["云处理","支持的颜色"]},"387":{"title":"环境要求","titles":[]},"388":{"title":"PHP 要求","titles":["环境要求"]},"389":{"title":"数据库","titles":["环境要求"]},"390":{"title":"服务器配置","titles":["环境要求"]},"391":{"title":"Nginx","titles":["环境要求","服务器配置"]},"392":{"title":"Supervisor","titles":["环境要求","服务器配置"]},"393":{"title":"安装 Supervisor","titles":["环境要求","服务器配置","Supervisor"]},"394":{"title":"配置 Supervisor","titles":["环境要求","服务器配置","Supervisor"]},"395":{"title":"启动 Supervisor","titles":["环境要求","服务器配置","Supervisor"]},"396":{"title":"ImageMagick","titles":["环境要求","服务器配置"]},"397":{"title":"检查系统是否安装 imageMagick","titles":["环境要求","服务器配置","ImageMagick"]},"398":{"title":"安装","titles":["环境要求","服务器配置","ImageMagick"]},"399":{"title":"储存管理","titles":[]},"400":{"title":"储存是如何运作的","titles":["储存管理"]},"401":{"title":"访问前缀是什么","titles":["储存管理"]},"402":{"title":"处理器是什么","titles":["储存管理"]},"403":{"title":"支持的文件命名规则","titles":["储存管理"]},"404":{"title":"升级","titles":[]},"405":{"title":"在线升级","titles":["升级"]},"406":{"title":"离线升级","titles":["升级"]}},"dirtCount":0,"index":[["离线升级",{"0":{"406":1}}],["离线两种升级方式",{"2":{"404":1}}],["唯一id",{"2":{"403":1}}],["吴彦祖的自拍照",{"2":{"403":1}}],["裁切",{"2":{"402":1}}],["裁剪焦点",{"0":{"362":1}}],["裁剪位置",{"0":{"361":1}}],["裁剪图像到指定尺寸",{"2":{"357":1}}],["裁剪",{"0":{"360":1,"363":1},"1":{"361":1,"362":1,"363":1},"2":{"357":1}}],["变的不好看",{"2":{"401":1}}],["变量",{"2":{"180":1}}],["变量的",{"2":{"2":1}}],["时间戳",{"2":{"403":1}}],["时",{"2":{"401":1}}],["时有效",{"2":{"381":1}}],["理论上我们的访问路径应该为",{"2":{"401":1}}],["理解并同意遵守上述许可证和免责声明中的所有条款和条件",{"2":{"278":1}}],["正确的使用姿势应该是服务器挂载了一块大储存磁盘",{"2":{"400":1}}],["任何上传到该储存的图片",{"2":{"402":2}}],["任何使用标准的s3",{"2":{"399":1}}],["任何访客或用户都可以在",{"2":{"356":1}}],["搭建兰空图片的必要条件为",{"2":{"398":1}}],["综上所述",{"2":{"398":1}}],["调用操作系统的",{"2":{"396":1}}],["调整大小",{"2":{"396":1}}],["调整图像大小以适应宽度和高度边界",{"2":{"367":4}}],["调整图像大小以填充宽度和高度边界",{"2":{"360":1,"367":1}}],["调整图像伽马值",{"2":{"357":1,"371":1}}],["调整图像对比度",{"2":{"357":1,"370":1}}],["调整图像亮度",{"2":{"357":1,"369":1}}],["调整尺寸",{"2":{"296":1}}],["示例值",{"2":{"403":1}}],["示例",{"2":{"392":1,"396":1}}],["驱动程序",{"2":{"389":1}}],["驱动器需要去确认一下违规图片转移目录配置路径是否正确",{"2":{"333":1}}],["驱动器需要去确认一下云处理缓存目录配置路径是否正确",{"2":{"333":1}}],["驱动器分为多种",{"2":{"325":1}}],["驱动器",{"2":{"325":1}}],["控制面板厂商为了极致的安全追求",{"2":{"388":1}}],["十六进制",{"0":{"385":1}}],["之外",{"2":{"384":1}}],["之间",{"2":{"383":1}}],["之间的值",{"2":{"369":1,"370":1,"371":1,"372":1,"373":1,"374":1}}],["之间的浮点数",{"2":{"362":1}}],["之间的数值来表示百分比",{"2":{"38":1,"226":1}}],["种颜色名称",{"2":{"384":1}}],["介于",{"2":{"383":1}}],["介绍",{"0":{"51":1,"228":1,"323":1},"1":{"324":1,"325":1,"326":1}}],["渐进式",{"2":{"382":1}}],["至",{"2":{"381":1}}],["至此",{"2":{"44":1,"84":1,"277":1,"312":1}}],["至此支付宝电脑网站支付则配置完成了",{"2":{"22":1}}],["定义图片的质量",{"2":{"381":1}}],["定义的位置",{"2":{"322":1}}],["画布扩展以容纳边框",{"2":{"380":1}}],["画布大小不变",{"2":{"380":1}}],["画廊",{"2":{"155":1}}],["拉伸图像以精确适应约束尺寸",{"2":{"367":1}}],["剩余空间将用背景颜色填充",{"2":{"367":1}}],["剩余空间用背景颜色填充",{"2":{"367":1}}],["扭曲或改变纵横比",{"2":{"367":2}}],["质量",{"0":{"381":1},"2":{"357":1}}],["边框叠加在图片上",{"2":{"380":1}}],["边框",{"0":{"377":1},"1":{"378":1,"379":1,"380":1},"2":{"357":1}}],["背景色",{"0":{"376":1},"2":{"357":1}}],["背景图等",{"2":{"86":1}}],["锐化图像",{"2":{"357":1,"372":1}}],["锐化",{"0":{"372":1},"2":{"357":1}}],["伽马",{"0":{"371":1},"2":{"357":1}}],["亮度",{"0":{"369":1},"2":{"357":1}}],["设备",{"2":{"368":1}}],["设备和",{"2":{"368":1}}],["设备像素比用于轻松在",{"2":{"368":1}}],["设备像素比",{"0":{"368":1},"2":{"357":1}}],["设置边框的显示方式",{"2":{"380":1}}],["设置边框颜色",{"2":{"379":1}}],["设置边框宽度",{"2":{"378":1}}],["设置图片的背景色",{"2":{"376":1}}],["设置图像如何适配目标尺寸",{"2":{"357":1,"366":1}}],["设置图像的质量",{"2":{"357":1}}],["设置图像的背景颜色",{"2":{"357":1}}],["设置图像的高度",{"2":{"357":1,"365":1}}],["设置图像的宽度",{"2":{"357":1,"364":1}}],["设置一个文件缓存目录后",{"2":{"352":1}}],["设置为系统目录可能存在权限相关问题",{"2":{"400":1}}],["设置为异步",{"2":{"298":1}}],["设置为同步后",{"2":{"298":1}}],["设置为默认组的角色组",{"2":{"210":1}}],["设置为游客组的角色组会控制游客上传",{"2":{"210":1}}],["设置指定用户剩余储存空间",{"2":{"195":1}}],["设置站点文件权限",{"2":{"88":1}}],["设置伪静态",{"2":{"79":1}}],["设置水印位置",{"2":{"52":1,"229":1}}],["设置表单页面",{"2":{"44":1,"277":1}}],["设置",{"0":{"149":1},"2":{"35":1,"223":1}}],["设置套餐购买方式",{"2":{"26":1}}],["设置了有效期后",{"2":{"26":1}}],["设置了赠送容量",{"2":{"26":1}}],["设置了关联组后",{"2":{"26":1}}],["设置回调地址",{"0":{"21":1,"344":1}}],["设置加签方式",{"0":{"17":1,"340":1}}],["高度或两者之一才能使此参数生效",{"2":{"368":1}}],["高度",{"0":{"365":1},"2":{"357":1,"383":1}}],["高级搜索不仅可以筛选数据",{"2":{"76":1}}],["高级搜索",{"2":{"76":1}}],["高级搜索功能",{"0":{"76":1}}],["像素和设备像素之间转换",{"2":{"368":1}}],["像素化",{"0":{"374":1},"2":{"357":1}}],["像素",{"2":{"357":2}}],["像这样",{"2":{"140":1}}],["宽度",{"0":{"364":1,"378":1},"2":{"357":1,"377":1,"383":1}}],["翻转图像",{"2":{"357":1,"359":1}}],["翻转",{"0":{"359":1},"2":{"357":1}}],["信息",{"2":{"357":18}}],["旋转图像",{"2":{"357":1,"358":1}}],["旋转角度等",{"2":{"52":1,"229":1}}],["旋转角度",{"2":{"42":1,"242":1}}],["描述",{"2":{"357":1}}],["描述清楚你的场景",{"2":{"234":1}}],["比如",{"2":{"406":1}}],["比如使用随机参数请求图片",{"2":{"356":1}}],["比如配置错误",{"2":{"101":1,"261":1,"286":1}}],["容易受到大规模图像调整大小攻击",{"2":{"356":1}}],["预设版本",{"0":{"355":1},"2":{"356":1}}],["预设版本和支持参数",{"0":{"354":1},"1":{"355":1,"356":1}}],["预览站点",{"2":{"322":1}}],["类似这种配置",{"2":{"353":1}}],["类型",{"2":{"178":1,"179":1}}],["能够极大的提高图片访问速度",{"2":{"353":1}}],["能不能支持上传",{"2":{"234":1}}],["能不能支持上传图片至",{"2":{"234":1}}],["能不能支持",{"0":{"103":1,"263":1,"288":1}}],["能不能上传图片以外格式的文件",{"0":{"94":1,"254":1,"281":1}}],["告诉",{"2":{"351":1}}],["性能要求",{"2":{"351":1}}],["流输出是通过程序加载缓存文件到内存中",{"2":{"351":1}}],["流输出",{"2":{"351":1}}],["流量产生消耗",{"2":{"75":1}}],["那一栏",{"2":{"350":1}}],["那么您可以不做任何改动",{"2":{"332":1}}],["那么您可以登录数据库管理软件或使用终端的方式",{"2":{"331":1}}],["那么您还需要将目录",{"2":{"330":1}}],["那么在上一步",{"2":{"331":1}}],["那么购买的授权则会归于相同的邮箱名下",{"2":{"290":1}}],["那么等待的时间可能很久",{"2":{"238":1}}],["那么路径则是",{"2":{"180":1}}],["滚动到最底部",{"2":{"350":1}}],["滚动至最底部",{"2":{"268":1}}],["回调地址固定为",{"2":{"344":1}}],["测试功能是否正常",{"2":{"334":1}}],["测试上传",{"2":{"44":1,"277":1}}],["记得确保根目录以及子目录的文件夹",{"2":{"332":1}}],["另外我们的新站点",{"2":{"332":1}}],["别急",{"2":{"332":1}}],["退出编辑模式",{"2":{"332":1}}],["需配置伪静态使用",{"2":{"351":1}}],["需提前导入",{"2":{"332":1}}],["需要使用",{"2":{"392":1}}],["需要有一个",{"2":{"387":1}}],["需要安装",{"2":{"353":1,"389":2}}],["需要先创建云处理驱动器",{"2":{"352":1}}],["需要先在目标服务器上创建新的站点",{"2":{"328":1}}],["需要通过本地构建镜像",{"2":{"315":1}}],["需要调整的数据",{"0":{"303":1}}],["需要手动处理",{"2":{"300":1}}],["需要注意的事情",{"2":{"269":1}}],["需要php",{"2":{"269":1}}],["需要php7",{"2":{"174":1}}],["需要设置伪静态",{"2":{"246":1}}],["需要设置为",{"2":{"61":1}}],["需要关闭",{"2":{"245":1}}],["需要关闭防盗链等一切访问限制",{"2":{"236":1}}],["需要自己安装拓展",{"2":{"244":1}}],["需要将旧版本",{"2":{"239":1}}],["需要将旧版本中的所有用到的储存策略配置填上访问域名",{"2":{"236":1}}],["需要在域名后面加上",{"2":{"235":1}}],["需要开启",{"2":{"196":1}}],["需要进入后台编辑该策略",{"2":{"89":1}}],["需要登录兰空图床后台",{"2":{"62":1}}],["需要",{"2":{"61":1,"64":1,"80":1,"399":1}}],["导出",{"2":{"331":1}}],["导出数据库文件",{"2":{"331":1}}],["导致",{"2":{"401":1}}],["导致无法获取最新版本信息或安装包下载失败",{"2":{"119":1}}],["导致了自定义",{"2":{"115":1}}],["导致迁移后符号链接失效",{"2":{"86":1}}],["替换成您的",{"2":{"331":1}}],["替换掉旧版本",{"2":{"269":1}}],["举例",{"2":{"330":1}}],["举报管理",{"2":{"52":1,"326":1}}],["举报",{"2":{"52":1,"301":1}}],["移除符号链接",{"0":{"329":1}}],["移动至根目录",{"2":{"11":2}}],["尺寸",{"2":{"326":1}}],["个接口",{"2":{"325":1}}],["个人中心显示",{"2":{"156":1}}],["个人中心",{"2":{"152":1}}],["共同实现了一套完整的图片处理流程",{"2":{"325":1}}],["短信等等",{"2":{"325":1}}],["云处理驱动",{"2":{"402":1}}],["云处理文件输出方式",{"2":{"353":1}}],["云处理功能是一个通过",{"2":{"351":1}}],["云处理功能",{"2":{"326":1}}],["云处理",{"0":{"351":1},"1":{"352":1,"353":1,"354":1,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1},"2":{"325":1,"333":1}}],["社会化登录",{"2":{"325":1}}],["社会化登录驱动",{"2":{"301":1}}],["给用户分配不同的权限或限制",{"2":{"325":1}}],["给模型中的驱动常量加上自定义储存",{"2":{"44":1,"277":1}}],["适配",{"0":{"366":1},"1":{"367":1},"2":{"357":1}}],["适配支付宝",{"2":{"52":1,"326":1}}],["适用于所有已适配的对象储存",{"2":{"324":1}}],["小伙伴",{"2":{"324":1}}],["小于",{"2":{"111":1}}],["防止站点被上传不健康的图片",{"2":{"324":1}}],["滤镜等",{"2":{"402":1}}],["滤镜",{"0":{"375":1},"2":{"324":1,"326":1,"357":1}}],["缩放",{"2":{"324":1,"326":1}}],["缩略图文件夹",{"0":{"106":1,"265":1}}],["缩略图文件夹可以改名字吗",{"0":{"104":1,"264":1}}],["统一的接口协议",{"2":{"324":1}}],["统计代码",{"0":{"124":1}}],["大部分对象储存都实现了开放的",{"2":{"324":1}}],["大于",{"2":{"76":1}}],["亦或者是自建的",{"2":{"324":1}}],["亦可以当作你的写作贴图库",{"2":{"228":1}}],["档案和营销网站",{"2":{"324":1}}],["跳到快速开始",{"2":{"323":1}}],["已经了解过了",{"2":{"323":1}}],["于2023年3月份趋于稳定后停止了开源版本更新",{"2":{"323":1}}],["采用",{"2":{"323":1}}],["语言",{"2":{"323":1,"387":1}}],["节省服务器储存",{"2":{"322":1}}],["成功运行后当前目录的程序文件会持久化储存在",{"2":{"322":1}}],["成人",{"2":{"129":2}}],["便于排查问题",{"2":{"322":1}}],["数字",{"2":{"322":1}}],["数据自动正确地定向图像",{"2":{"358":1}}],["数据损失或其他无形损失",{"2":{"278":1}}],["数据库版本必须达到要求",{"2":{"398":1}}],["数据库您也可以选择市场主流的",{"2":{"391":1}}],["数据库的文件位置",{"2":{"332":1}}],["数据库文件默认位置为",{"2":{"330":1,"331":1}}],["数据库文件",{"2":{"317":1}}],["数据库等",{"2":{"317":1}}],["数据库",{"0":{"389":1},"2":{"309":2}}],["数据库表前缀",{"2":{"189":1}}],["数据库编码",{"2":{"188":1}}],["数据库密码",{"2":{"88":1,"186":1}}],["数据库用户名",{"2":{"88":1}}],["数据库名称",{"2":{"88":1,"185":1,"332":1}}],["数据库连接密码",{"2":{"332":1}}],["数据库连接账号",{"2":{"332":1}}],["数据库连接类型",{"2":{"332":1}}],["数据库连接端口",{"2":{"88":1,"187":1,"332":1}}],["数据库连接地址",{"2":{"88":1,"184":1,"332":1}}],["数据库类型",{"2":{"88":1}}],["数据库驱动名称",{"2":{"61":1}}],["数据会以并且的关系匹配数据",{"2":{"76":1}}],["数据无价",{"2":{"62":1,"269":1}}],["许可证密钥必须填写正确",{"2":{"405":1}}],["许可证密钥",{"2":{"322":1}}],["许可证编号",{"2":{"322":1,"405":1}}],["许可证编号以及许可证密钥",{"2":{"291":1}}],["宿主机运行端口",{"2":{"322":1}}],["持久化数据储存位置",{"2":{"322":1}}],["源码的特殊性",{"2":{"315":1}}],["危害整个服务器",{"2":{"312":1}}],["尤其是",{"2":{"312":1}}],["让我们创建一个",{"2":{"312":1,"394":1}}],["指令",{"2":{"394":1}}],["指令将指示",{"2":{"394":1}}],["指示",{"2":{"312":1,"394":1}}],["指的是某用户组使用该储存策略后上传成功得到的链接域名",{"2":{"113":1}}],["伪静态配置文件中",{"2":{"310":1}}],["伪静态配置示例文件位置在",{"2":{"310":1}}],["^user|^group",{"2":{"312":1}}],["^",{"2":{"310":1}}],["因此",{"2":{"392":1}}],["因此迁移兰空图床需要进行一些额外的操作",{"2":{"85":1}}],["因",{"2":{"315":1}}],["因为从项目根目录提供应用程序将会将许多敏感的配置文件暴露给公共互联网",{"2":{"310":1}}],["用于在",{"2":{"396":1}}],["用于在命令行操作图像",{"2":{"396":1}}],["用于编辑和处理数字图像",{"2":{"396":1}}],["用来启动和监视",{"2":{"312":1,"394":1}}],["用来搭建兰空图床",{"2":{"309":1}}],["用户id",{"2":{"403":1}}],["用户可以通过选择的支持参数自由的控制图片样式",{"2":{"356":1}}],["用户可以删除本产品",{"2":{"278":1}}],["用户可通过邮件或其他方式联系我们获得技术支持",{"2":{"278":1}}],["用户在使用本软件过程中应遵守所有适用的法律法规和规则",{"2":{"278":1}}],["用户",{"2":{"235":1,"301":1}}],["用户初始配额容量",{"0":{"147":1}}],["用户组和所有者改为",{"2":{"79":1,"246":1}}],["用户的公开图片和相册",{"2":{"52":1,"326":1}}],["用户主页",{"2":{"52":1,"326":1}}],["用户名+邮箱地址",{"2":{"235":1}}],["用户名",{"2":{"44":1,"277":1}}],["用户购买多个套餐会进行共存",{"2":{"26":1}}],["用户购买了该阶梯价格",{"2":{"26":3}}],["仅当格式设置为",{"2":{"381":1}}],["仅供参考",{"2":{"308":1}}],["仅支持电脑端",{"2":{"172":1}}],["普通安装",{"0":{"308":1},"1":{"309":1,"310":1,"311":1,"312":1}}],["普通安装和",{"2":{"307":1}}],["审核驱动配置需要补充",{"2":{"303":1}}],["意见与反馈",{"2":{"301":1}}],["违规记录",{"2":{"301":1}}],["公告",{"2":{"301":1}}],["订单部分信息",{"2":{"302":1}}],["订单",{"2":{"301":1}}],["组与储存策略关联",{"2":{"301":1}}],["组合",{"2":{"49":1,"273":1}}],["压缩并转移到目标服务器",{"2":{"330":1}}],["压缩根目录中所有文件",{"2":{"330":1}}],["压缩效果最弱",{"2":{"299":1}}],["压缩率最高",{"2":{"299":1}}],["异步处理不影响上传时间",{"2":{"298":1}}],["处理器是什么",{"0":{"402":1}}],["处理规则",{"0":{"357":1},"1":{"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1}}],["处理后的图片会自动缓存在本地服务器中",{"2":{"351":1}}],["处理",{"2":{"323":1}}],["处理完成后",{"2":{"298":1}}],["处理图片的输出",{"2":{"29":1,"214":1}}],["实际情况可能有所不同",{"2":{"308":1}}],["实时输出处理后的图片",{"2":{"298":1}}],["实现了",{"2":{"325":1}}],["实现",{"2":{"44":1,"103":1,"263":1,"277":1,"288":1}}],["搜索",{"2":{"388":1}}],["搜索配置项名称",{"2":{"297":1}}],["搜索查找",{"2":{"78":1,"87":1}}],["找到",{"2":{"350":1}}],["找到对应",{"2":{"297":1}}],["找到最新的版本",{"2":{"269":1}}],["内存设置",{"0":{"297":1}}],["内容评级",{"0":{"129":1}}],["内容如下",{"2":{"44":1,"246":1,"277":1}}],["属于该角色组的用户将拥有已关联的所有储存",{"2":{"295":1}}],["属性",{"2":{"152":1}}],["属性名称",{"0":{"39":1,"227":1}}],["就开始吧",{"2":{"291":1}}],["就会造成上传很慢的现象",{"2":{"116":1}}],["添加效果等",{"2":{"396":1}}],["添加到站点的",{"2":{"310":1}}],["添加水印",{"2":{"296":1}}],["添加群后虚心请教群内小伙伴",{"2":{"291":1}}],["添加页面",{"2":{"44":1,"277":1}}],["栏目中",{"2":{"291":1}}],["入门",{"2":{"291":1}}],["入口",{"2":{"139":1}}],["敬请谅解",{"2":{"290":1}}],["买断制规则",{"2":{"290":1}}],["演示站",{"2":{"290":1}}],["论坛",{"2":{"290":1}}],["官网",{"2":{"290":1}}],["官方文档",{"2":{"44":1,"277":1}}],["禁止传播或二次售卖源码",{"2":{"290":1}}],["禁止将本产品用于含诈骗",{"2":{"278":1}}],["必须是该主域名的子域名",{"2":{"290":1}}],["必须程序必须用到的拓展有且不限于",{"2":{"78":1}}],["付费版本一个授权仅支持一个主域名和三个子域名",{"2":{"290":1}}],["虽然它已经停止了更新和支持",{"2":{"290":1}}],["虽然有缓存驱动",{"2":{"29":1,"214":1}}],["快速开始",{"0":{"289":1},"1":{"290":1,"291":1}}],["跨域问题或站点必须以",{"2":{"284":1}}],["跨版本更新",{"2":{"52":1,"229":1}}],["合成或转换位图图像",{"2":{"396":1}}],["合法性或可靠性不承担责任",{"2":{"278":1}}],["合理的增加缓存可以极大的提高程序访问速度",{"2":{"0":1}}],["完整性",{"2":{"278":1}}],["完成的图像将在宽度或高度上有剩余空间",{"2":{"367":1}}],["完成安装",{"2":{"84":1}}],["完成上述操作后",{"2":{"11":1}}],["链接或服务不受本软件的控制",{"2":{"278":1}}],["链接或服务",{"2":{"278":1}}],["对比度",{"0":{"370":1},"2":{"357":1}}],["对服务器有着较高的",{"2":{"351":1}}],["对服务器内存有着比较高的要求",{"2":{"29":1,"214":1}}],["对象储存是现代互联网云服务储存静态资源的最佳方式之一",{"2":{"324":1}}],["对原图进行诸如裁切",{"2":{"296":1}}],["对于因用户违反法律法规或本声明而导致的任何损失或责任",{"2":{"278":1}}],["病毒等违法违规业务",{"2":{"278":1}}],["木马",{"2":{"278":1}}],["色情",{"2":{"278":1}}],["赌博",{"2":{"278":1}}],["计算机病毒或其他恶意程序引起的损失负责",{"2":{"278":1}}],["计划任务需要用到",{"2":{"84":1}}],["计划任务处理进程",{"2":{"82":1}}],["计划任务等",{"2":{"53":1}}],["黑客攻击",{"2":{"278":1}}],["利用指定的驱动对储存的内容进行控制与处理",{"2":{"402":1}}],["利用前缀获取指定的储存配置",{"2":{"401":1}}],["利润损失",{"2":{"278":1}}],["利于搜索引擎关键字索引",{"2":{"122":1}}],["索赔或其他后果负责",{"2":{"278":1}}],["责任",{"2":{"278":1}}],["准确性",{"2":{"278":1}}],["准备",{"0":{"291":1}}],["准备新服务器",{"0":{"87":1}}],["准备运行环境",{"0":{"79":1},"2":{"88":1}}],["准备安装",{"0":{"78":1,"246":1}}],["准备工作",{"0":{"59":1,"236":1,"314":1},"1":{"315":1,"316":1,"317":1}}],["供用户自行决定使用",{"2":{"278":1}}],["供你参考",{"2":{"44":1,"277":1}}],["免责声明",{"0":{"278":1}}],["目前支持",{"2":{"399":1}}],["目前支持本地",{"2":{"275":1}}],["目标服务器的运行环境需要达到安装要求",{"2":{"328":1}}],["目录生成一个指向储存目录的符号链接",{"2":{"400":1}}],["目录和文件解释",{"2":{"317":1}}],["目录后",{"2":{"269":1}}],["目录新建",{"2":{"107":1}}],["目录结构如下",{"2":{"86":1}}],["目录中",{"2":{"312":1,"394":1}}],["目录中会存在多个个系统保留目录名",{"2":{"86":1}}],["目录中的所有符号连接以及",{"2":{"60":1}}],["目录复制至企业版本",{"2":{"60":2}}],["目录下生成错误日志",{"2":{"234":1}}],["目录下新建",{"2":{"107":1,"266":1}}],["目录下的符号链接",{"2":{"329":1}}],["目录下的符号连接",{"2":{"47":1,"271":1}}],["目录下的缩略图文件夹",{"2":{"269":1}}],["目录下的缩略图符号连接",{"2":{"104":1}}],["目录下的所有符号连接",{"2":{"248":1}}],["目录下的图片文件",{"2":{"239":1}}],["目录下",{"2":{"22":1,"180":1,"239":1,"269":1}}],["目录",{"2":{"8":1,"269":1}}],["值",{"2":{"269":1,"403":2}}],["解释",{"2":{"403":1}}],["解压后的站点根目录存在一个安装脚本文件",{"2":{"311":1}}],["解压新版本到程序根目录",{"2":{"269":1}}],["解决方法是暂时关闭单用户模式",{"2":{"118":1}}],["勾选",{"2":{"268":1}}],["展开后选择",{"2":{"268":1}}],["难以实现",{"2":{"252":1}}],["线程的特性",{"2":{"252":1}}],["线上交流",{"0":{"230":1}}],["方式",{"0":{"380":1},"2":{"377":1}}],["方式运行的",{"2":{"252":1}}],["方向",{"0":{"358":1},"2":{"357":1}}],["方法里追加验证内容",{"2":{"44":1,"277":1}}],["方法",{"2":{"44":2,"277":2}}],["传统以",{"2":{"252":1}}],["部分第三方储存没有提供批量删除文件的接口",{"2":{"251":1}}],["部署",{"0":{"8":1}}],["环境中常用的进程监视器",{"2":{"392":1}}],["环境的执行用户",{"2":{"312":1}}],["环境的运行用户",{"2":{"312":1}}],["环境要求",{"0":{"387":1},"1":{"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1},"2":{"294":1}}],["环境检测通过以后即可通过引导进行安装",{"2":{"247":1}}],["环境启动一个服务器",{"2":{"38":1,"226":1}}],["读取目录",{"2":{"245":1}}],["读写速度",{"2":{"298":1}}],["读写",{"2":{"214":1}}],["简单的错误排查与处理",{"2":{"291":1}}],["简单来说",{"2":{"245":1}}],["简化安装步骤",{"2":{"5":1}}],["旧版本无法直接通过在线或离线更新的方式升级到最新版本",{"2":{"300":1}}],["旧版本中设置的配置需要在新版本中重新设置",{"2":{"239":1}}],["旧版本的管理员账号将会被新版本安装时设置的管理员账号所代替",{"2":{"239":1}}],["断网",{"2":{"238":1}}],["过程中请不要关闭窗口",{"2":{"238":1}}],["过多的时候尤为明显",{"2":{"29":1,"214":1}}],["当前",{"2":{"403":1}}],["当前月份",{"2":{"403":1}}],["当前年份简写",{"2":{"403":1}}],["当前年份",{"2":{"403":1}}],["当前仅支持",{"2":{"351":1,"353":1}}],["当然",{"2":{"391":1}}],["当进度条走完以后",{"2":{"239":1}}],["当命令窗口出现进度条时",{"2":{"238":1}}],["当你准备向他人提问时",{"2":{"234":1}}],["到",{"2":{"299":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1}}],["到脚本根目录",{"2":{"238":1}}],["到期后上述两点均失效",{"2":{"26":1}}],["工具将符号链接指向的实际文件内容也打包进去",{"2":{"329":1}}],["工具登录到服务器",{"2":{"238":1}}],["工单",{"2":{"301":1}}],["工单系统",{"2":{"52":1,"326":1}}],["避免使用最高权限的账号",{"2":{"312":1}}],["避免图像尺寸获取失败",{"2":{"236":1}}],["避免将拓展安装到了其他的",{"2":{"67":1}}],["保存一下以重新生成符号连接",{"2":{"248":1,"269":1}}],["保存前建议先压缩",{"2":{"123":1}}],["保证该储存策略的图片能正常通过该域名访问",{"2":{"236":1}}],["保证旧版本只有一个管理员账号",{"2":{"236":1}}],["先安装全新的",{"2":{"236":1}}],["先创建站点和数据库",{"2":{"79":1}}],["账号的密码为",{"2":{"235":1}}],["账户",{"2":{"36":1,"48":1,"224":1,"272":1}}],["策略配置",{"2":{"235":1}}],["脚本需要使用",{"2":{"235":1}}],["脚本会迁移旧版本的角色组",{"2":{"235":1}}],["脚本的主要目的是",{"2":{"11":1}}],["尽管如此",{"2":{"235":1,"300":1}}],["存在两种运行方式",{"2":{"308":1}}],["存在巨大差异",{"2":{"235":1}}],["存在一个",{"2":{"11":1}}],["日志文件存放目录",{"2":{"317":1}}],["日志",{"2":{"317":1}}],["日志中可能存在敏感信息",{"2":{"234":1}}],["日志记录文件夹",{"2":{"60":1}}],["错误",{"2":{"234":1}}],["认为该错误是程序的",{"2":{"234":1}}],["尝试自行检查解决",{"2":{"234":1}}],["反馈问题",{"0":{"234":1}}],["反向代理示例",{"0":{"208":1}}],["群组",{"2":{"230":1}}],["瀑布流展示",{"2":{"229":1}}],["强大的图片自定义处理功能",{"2":{"326":1}}],["强大的图片管理功能",{"2":{"229":1}}],["强烈更换为下面的任意缓存驱动",{"2":{"215":1}}],["强烈推荐使用",{"2":{"74":1}}],["动态设置策略上传",{"2":{"229":1}}],["等等",{"2":{"286":1}}],["等待大约三分钟后可以打开兰空图床系统设置",{"2":{"268":1}}],["等操作",{"2":{"243":1}}],["等视频",{"2":{"234":1}}],["等",{"2":{"234":1,"400":1}}],["等其他关系型数据库",{"2":{"229":1}}],["等所有符号链接删除",{"2":{"86":1}}],["特性",{"0":{"229":1}}],["月份发布全新的",{"2":{"228":1}}],["月",{"2":{"228":1}}],["月卡",{"2":{"26":1}}],["年月日",{"2":{"403":1}}],["年末启动了新的重写计划并于",{"2":{"228":1}}],["年",{"2":{"228":2,"323":1}}],["年卡",{"2":{"26":1}}],["作为",{"2":{"398":1}}],["作为组合来搭建兰空图床",{"2":{"391":1}}],["作为缓存驱动",{"2":{"215":1}}],["作为前端框架",{"2":{"10":1}}],["占用系统资源",{"2":{"356":1}}],["占用",{"2":{"214":1}}],["带有动画的拓展",{"2":{"213":1}}],["格式要求",{"2":{"377":1}}],["格式",{"0":{"382":1},"2":{"294":1,"357":1,"384":1}}],["格式输出",{"2":{"213":1}}],["格式的图片上传后",{"2":{"213":1}}],["格式的图片",{"0":{"93":1,"253":1}}],["格式的图片将会以",{"2":{"41":1,"241":1}}],["格式的图片增加水印",{"2":{"41":1,"241":1}}],["同事",{"2":{"324":1}}],["同步处理考验服务器的内存速度",{"2":{"298":1}}],["同步和异步的区别",{"0":{"298":1}}],["同一个账号可以拥有多个授权",{"2":{"290":1}}],["同时一个驱动器归属多个角色组或储存",{"2":{"325":1}}],["同时某个角色组也可以设置多个储存策略",{"2":{"275":1}}],["同时请保证运行脚本的环境可以同时连接到这两个不同的数据库",{"2":{"237":1}}],["同时储存策略可以配置多个角色组",{"2":{"229":1}}],["同时也是游客默认组",{"2":{"210":1}}],["同样的",{"2":{"13":1,"328":1,"350":1}}],["游客",{"2":{"210":1}}],["基础",{"0":{"293":1}}],["基础设置",{"0":{"210":1},"1":{"211":1,"212":1,"213":1}}],["基本设置",{"0":{"115":1}}],["基本特性",{"0":{"52":1}}],["检测更新前你必须保证系统设置",{"2":{"405":1}}],["检测程序是否安装的文件",{"2":{"60":1}}],["检查系统是否安装",{"0":{"397":1}}],["检查是否安装",{"2":{"309":1}}],["检查状态",{"0":{"207":1}}],["停止服务器",{"0":{"206":1}}],["启用原图保护的情况下",{"2":{"213":1}}],["启用水印功能后",{"2":{"180":1}}],["启动",{"0":{"395":1}}],["启动程序",{"0":{"204":1}}],["启动后你需要配置反向代理以提供",{"2":{"199":1}}],["启动您的应用程序一次",{"2":{"199":1}}],["微信仅支持",{"2":{"335":1}}],["微信",{"0":{"346":1},"2":{"198":1,"233":1,"335":1}}],["微信官方支付功能",{"2":{"52":1,"326":1}}],["扫码捐赠任意金额",{"2":{"198":1}}],["都将会按照已选择的图片处理驱动进行处理",{"2":{"402":1}}],["都将会按照已选择的图片安全驱动进行审核",{"2":{"402":1}}],["都需要添加上这个访问前缀",{"2":{"401":1}}],["都需要重新启动",{"2":{"199":1}}],["都可以使用",{"2":{"399":1}}],["都通过",{"2":{"322":1}}],["都是通过角色组控制上传的频率",{"2":{"294":1}}],["都是作者在业余时间独立开发",{"2":{"233":1}}],["都是作者在空余时间独立开发",{"2":{"198":1}}],["都受角色组控制",{"2":{"292":1}}],["都应该是使用",{"2":{"38":1,"226":1}}],["捐赠",{"0":{"198":1,"233":1}}],["版权声明",{"0":{"197":1}}],["版本和扩展",{"2":{"388":1}}],["版本后",{"2":{"325":1}}],["版本不一致",{"2":{"308":1}}],["版本程序会连接旧版本数据库",{"2":{"306":1}}],["版本中内置了迁移脚本",{"2":{"300":1}}],["版本中",{"2":{"300":1}}],["版本中接口上传会出现错误的",{"2":{"170":1}}],["版本与",{"2":{"235":1}}],["版本最后一个小版本",{"2":{"153":1}}],["版本的拓展是否都已经安装了",{"2":{"87":1}}],["版本是一致的",{"2":{"308":1}}],["版本是否大于",{"2":{"111":1}}],["版本是否正确",{"2":{"87":1}}],["版本是相同的架构",{"2":{"51":1}}],["版本上",{"2":{"67":1}}],["版本",{"0":{"305":1},"2":{"58":1,"67":1,"196":2,"228":1,"235":1,"236":1,"305":1,"335":1,"388":1}}],["≤",{"2":{"196":1}}],["≥",{"2":{"196":2}}],["平滑升级系统",{"2":{"195":1}}],["二维码扫描链接",{"2":{"195":1}}],["页面会显示",{"2":{"353":1}}],["页面内容需要补充",{"2":{"303":1}}],["页面内容",{"2":{"302":1}}],["页面",{"2":{"301":1}}],["页面响应式布局",{"2":{"195":1}}],["页面展示的是全屏背景图加一个登录按钮",{"2":{"190":1}}],["全屏预览",{"2":{"195":1}}],["全程手动按以下步骤操作",{"2":{"11":1}}],["✅单用户模式",{"2":{"195":1}}],["✅自定义链接参数",{"2":{"195":1}}],["✅ip",{"2":{"195":1}}],["✅ota",{"2":{"195":1}}],["✅接口上传",{"2":{"195":1}}],["✅设置上传文件",{"2":{"195":1}}],["✅一键复制图片外链",{"2":{"195":1}}],["✅全局配置用户初始剩余储存空间",{"2":{"195":1}}],["✅简洁的图片管理功能",{"2":{"195":1}}],["✅多图上传",{"2":{"195":1}}],["✅",{"2":{"195":2}}],["项目仓库地址",{"2":{"194":1}}],["项目主页",{"2":{"194":1}}],["例",{"2":{"192":1}}],["例如超过工作者超时或执行",{"2":{"392":1}}],["例如带有",{"2":{"368":1}}],["例如我们在",{"2":{"356":1}}],["例如我们预设一个名称为",{"2":{"355":1}}],["例如调整尺寸",{"2":{"324":1}}],["例如阿里云",{"2":{"324":1}}],["例如头像等",{"2":{"317":1}}],["例如支付证书文件等",{"2":{"317":1}}],["例如是否安装了",{"2":{"248":1}}],["例如126邮箱的smtp服务地址为",{"2":{"133":1}}],["例如相册封面",{"2":{"86":1}}],["例如如果希望支持",{"2":{"64":1}}],["例如每周上传限制",{"2":{"27":1,"211":1}}],["例如",{"0":{"94":1,"254":1,"281":1},"2":{"11":1,"39":1,"44":1,"47":1,"61":1,"78":1,"80":1,"87":1,"99":1,"149":1,"227":1,"234":2,"259":1,"269":1,"271":1,"277":1,"312":1,"331":1,"355":1,"362":1,"383":1,"389":1,"394":1,"400":1}}],["插件",{"2":{"183":1}}],["生产环境请务必关闭",{"2":{"182":1,"183":1}}],["生成方式",{"2":{"164":1}}],["生成的图像将填充尺寸",{"2":{"367":1}}],["生成的图像将匹配约束尺寸",{"2":{"367":2}}],["生成的图像将匹配宽度和高度约束",{"2":{"360":1,"367":1}}],["生成的名称类似",{"2":{"146":1}}],["生成的路径类似",{"2":{"145":1}}],["生成的链接却是",{"0":{"102":1,"262":1,"287":1}}],["生成缩略图时图片较大导致超时被强行断开连接等等",{"2":{"101":1,"261":1}}],["生成缩略图",{"2":{"93":1,"253":1,"298":1}}],["生成符号链接",{"0":{"89":1}}],["生成",{"2":{"62":1}}],["生成证书并上传",{"0":{"19":1,"342":1}}],["只要您没有调整这个文件的位置",{"2":{"331":1}}],["只能包含英文字母",{"2":{"322":1}}],["只能同时存在一种类型",{"2":{"180":1}}],["只有正常状态的图片才会进行处理",{"2":{"298":1}}],["只需提供百分比作为数字",{"2":{"383":1}}],["只需要改变程序中的环境变量文件",{"2":{"215":1}}],["只需理解",{"2":{"13":1}}],["只需在您修改了前端工程文件后",{"2":{"12":1}}],["假如您的站点目录为",{"2":{"330":1}}],["假如现在有个",{"2":{"180":1}}],["假设我们的访问域名是",{"2":{"401":1}}],["假设我们的项目绝对路径为",{"2":{"83":1}}],["假设站点域名为",{"2":{"344":1}}],["假设有一个限定符为",{"2":{"76":1}}],["透明度",{"2":{"179":1}}],["颜色名称",{"0":{"386":1}}],["颜色",{"0":{"379":1},"2":{"178":1,"377":1}}],["字符串必须完全一致",{"2":{"269":1}}],["字母前缀",{"2":{"235":1}}],["字体文件",{"2":{"180":1}}],["字体文件绝对路径",{"2":{"178":1}}],["字体",{"2":{"180":1}}],["字段",{"2":{"156":1}}],["zoom",{"2":{"355":1}}],["zh",{"2":{"177":1}}],["ziparchive",{"2":{"164":1,"196":1}}],["zip",{"2":{"64":3,"68":3,"78":1,"110":1,"309":3,"388":1,"406":2}}],["阻止浏览器翻译",{"2":{"177":1}}],["地址",{"2":{"176":1}}],["地域目前阿里云支持",{"2":{"36":1,"224":1}}],["地域",{"0":{"33":1,"36":1,"221":1,"224":1}}],["框架",{"2":{"176":2}}],["框架开发的一款",{"2":{"323":1}}],["框架开发",{"2":{"0":1}}],["鉴黄接口请求增加超时时间为30秒",{"2":{"176":1}}],["匹配",{"2":{"176":1}}],["里取",{"2":{"174":1}}],["暂时只支持ftp",{"2":{"174":1}}],["暂时只支持smtp方式发送邮件",{"2":{"131":1}}],["本文将指导您如何将兰空图床从",{"2":{"327":1}}],["本次安装教程是在没有安装服务器控制面板的情况下进行的",{"2":{"308":1}}],["本次更新包含一个安全质量修复",{"2":{"166":1}}],["本免责声明中的任何条款因适用法律而被认定为无效的",{"2":{"278":1}}],["本产品经过详细的测试",{"2":{"278":1}}],["本软件可能会包含第三方提供的内容",{"2":{"278":1}}],["本软件的使用涉及互联网和电子通信",{"2":{"278":1}}],["本软件的开发者保留随时修改本免责声明的权利",{"2":{"278":1}}],["本软件的开发者对于第三方内容的准确性",{"2":{"278":1}}],["本软件的开发者不承担任何责任",{"2":{"278":1}}],["本软件的开发者不对任何由于互联网连接或传输故障",{"2":{"278":1}}],["本软件的开发者及相关人员不对因使用本软件而导致的任何直接或间接损失",{"2":{"278":1}}],["本软件的开发者尽力确保其功能和信息的准确性",{"2":{"278":1}}],["本软件是为了使用户方便地管理图片而开发的工具",{"2":{"278":1}}],["本地策略在创建或编辑时会出错",{"2":{"199":1}}],["本地策略上传文件的文件夹",{"2":{"60":1}}],["本地",{"2":{"195":1,"399":1}}],["本地储存的储存目录配置也许会在您迁移了新的服务器后路径发生了变化",{"2":{"333":1}}],["本地储存策略会在",{"2":{"269":1}}],["本地储存策略的所有上传的图片都会保存在",{"2":{"269":1}}],["本地储存以及使用",{"2":{"269":1}}],["本地储存",{"0":{"47":1,"271":1}}],["本地组",{"2":{"26":1}}],["⚠️",{"2":{"166":1}}],["列表等多选操作方式",{"2":{"164":1}}],["恢复安装",{"0":{"332":1}}],["恢复上传后出现的清除按钮",{"2":{"164":1}}],["恢复为购买套餐前的状态",{"2":{"26":1}}],["删除",{"2":{"269":2}}],["删除文件不处理储存策略删除接口返回值",{"2":{"173":1}}],["删除一条记录会将文件一并删除的",{"2":{"167":1}}],["删除本地静态资源",{"2":{"164":1}}],["删除图片只删除记录",{"2":{"138":1}}],["改变图片格式等修改",{"2":{"296":1}}],["改为",{"2":{"164":1}}],["改进策略组编辑",{"2":{"177":1}}],["改进细节样式",{"2":{"173":1}}],["改进角色组",{"2":{"164":1}}],["改进",{"2":{"164":1}}],["改进控制台样式",{"2":{"164":1}}],["改进安装逻辑",{"2":{"164":1}}],["改进用户注册验证条件",{"2":{"160":1}}],["去除",{"2":{"164":1}}],["封禁功能",{"2":{"163":1,"195":1}}],["封禁ip功能",{"2":{"140":1}}],["封禁ip",{"0":{"140":1}}],["暗黑主题",{"2":{"195":1}}],["暗黑",{"2":{"163":1}}],["托管安装包仓库",{"2":{"160":1}}],["条",{"2":{"160":1}}],["修复被冻结用户通过接口能上传的bug",{"2":{"177":1}}],["修复更新后出现重复默认组的bug",{"2":{"177":1}}],["修复接口上传时单个用户设置策略无效的bug",{"2":{"177":1}}],["修复接口上传header增加token后请求失败的bug",{"2":{"175":1}}],["修复策略组设置无效的bug",{"2":{"177":1}}],["修复程序默认的命名规则在高并发下会出现重复文件名的bug",{"2":{"175":1}}],["修复高并发下上传出现名称重复的",{"2":{"174":1}}],["修复统计数据不准确的",{"2":{"174":1}}],["修复若干个",{"2":{"176":1}}],["修复若干",{"2":{"173":1,"174":1}}],["修复删除没有会员的角色组会失败的",{"2":{"167":1}}],["修复相同",{"2":{"167":1}}],["修复移动图片到根目录会提示不存在文件夹的",{"2":{"165":1}}],["修复数据库密码带有符号会导致500错误的bug",{"2":{"161":1}}],["修复自定义链接参数后上传返回的链接中出现重复参数的",{"2":{"161":1}}],["修复用户图片列表中图片分页后无法搜索到指定图片的",{"2":{"161":1}}],["修复后台图片列表切换",{"2":{"161":1}}],["修复后台获取",{"2":{"157":1}}],["修复后台控制台统计不正确的",{"2":{"157":1}}],["修复粘贴图片上传时",{"2":{"157":1}}],["修复文件路径命名规则为空时",{"2":{"157":1}}],["修复",{"2":{"157":2,"170":1}}],["修改成现在所在服务器的储存根路径",{"2":{"333":1}}],["修改版本号",{"2":{"269":1}}],["修改",{"2":{"243":1,"269":1,"353":1}}],["修改任何代码",{"2":{"199":1}}],["修改数据库连接信息",{"2":{"88":1}}],["修改后重启",{"2":{"87":1}}],["修改配置",{"0":{"61":1}}],["修改表单验证器",{"2":{"44":1,"277":1}}],["修改默认主题",{"0":{"12":1}}],["修改环境变量",{"2":{"6":1}}],["修改构建脚本",{"0":{"6":1},"2":{"6":1}}],["自动删除图片",{"2":{"298":1}}],["自动添加水印功能",{"2":{"155":1}}],["自由度极高的角色组配置",{"2":{"229":1}}],["自定义css",{"0":{"123":1}}],["自定义主题",{"0":{"13":1}}],["自定义储存上传的图片",{"2":{"317":1}}],["自定义储存",{"0":{"9":1},"2":{"44":1,"277":1}}],["域名",{"2":{"149":1,"174":1}}],["域名备案号",{"2":{"125":1}}],["继续使用accesskey",{"2":{"149":1}}],["结尾不需要逗号",{"2":{"144":1}}],["逗号隔开",{"2":{"144":1}}],["允许上传的文件类型",{"0":{"294":1}}],["允许上传的文件后缀",{"0":{"144":1}}],["允许上传的图片类型",{"0":{"213":1}}],["允许接口跨域",{"2":{"175":1}}],["允许可上传的图片后缀名",{"2":{"144":1}}],["允许游客上传",{"0":{"141":1}}],["掉自己的",{"2":{"140":1}}],["被改变",{"2":{"298":1}}],["被动模式开关",{"2":{"163":1}}],["被封禁的ip访问网站会抛出403异常",{"2":{"140":1}}],["被拦截造成的错误",{"2":{"115":1}}],["左侧导航栏会出现",{"2":{"139":1}}],["软连接",{"2":{"269":1}}],["软删除",{"0":{"138":1}}],["软件是两个东西",{"2":{"396":1}}],["软件实现图片编辑能力",{"2":{"396":1}}],["软件进行测试是否连接成功",{"2":{"117":1}}],["软件",{"2":{"83":1}}],["发件驱动",{"2":{"292":1}}],["发件人邮箱",{"0":{"137":1},"2":{"137":1}}],["发布",{"2":{"244":1}}],["发现黄图将会上传失败",{"2":{"127":1}}],["邮件",{"2":{"325":1}}],["邮件驱动",{"2":{"293":1}}],["邮件发送方式",{"0":{"131":1}}],["邮件无法发送",{"2":{"84":1}}],["拦截",{"0":{"130":1}}],["百分之九十为黄图时则会上传失败",{"2":{"129":1}}],["百分之五十为黄图时会上传失败",{"2":{"129":1}}],["百万图片数据量基准优化",{"2":{"52":1}}],["少年",{"2":{"129":2}}],["也不会增加图像大小",{"2":{"367":1}}],["也可使用相对尺寸",{"2":{"378":1}}],["也可以通过购买时所填写的邮箱和密码",{"2":{"291":1}}],["也可能会导致上传失败",{"2":{"127":1}}],["也就是说",{"2":{"93":1,"253":1,"298":1}}],["也就是阶梯价格",{"2":{"26":1}}],["备份",{"2":{"269":1}}],["备份数据",{"2":{"59":1}}],["备案号",{"0":{"125":1}}],["网站关键字",{"0":{"122":1},"2":{"122":1}}],["网站的标题",{"2":{"121":1}}],["网站标题",{"0":{"121":1}}],["网站设置中切换",{"2":{"11":1}}],["注",{"2":{"196":1}}],["注册按钮会呈现不可点击的状态",{"2":{"120":1}}],["注意需要将压缩包文件的权限改为",{"2":{"406":1}}],["注意需要清除浏览器缓存",{"2":{"62":1}}],["注意上面配置文件中的黄色高亮部分",{"2":{"312":1}}],["注意读写权限要设置为公共读",{"2":{"148":1}}],["注意替换后",{"2":{"61":1}}],["注意",{"2":{"0":1,"2":1,"11":1,"23":1,"27":1,"60":1,"62":1,"64":1,"67":1,"74":1,"76":1,"83":2,"85":1,"86":1,"89":1,"127":1,"140":1,"199":1,"211":1,"234":1,"290":1,"291":1,"308":1,"315":1,"329":1,"331":1,"332":1,"348":1,"353":1,"387":1,"388":1,"396":1,"405":1}}],["关联指定的云处理驱动",{"2":{"402":1}}],["关联指定的图片处理驱动",{"2":{"402":1}}],["关联指定的图片安全驱动",{"2":{"402":1}}],["关联组",{"2":{"26":1}}],["关闭注册",{"0":{"120":1}}],["若后续不需要重新构建容器了",{"2":{"322":1}}],["若有",{"2":{"298":2}}],["若未正确设置权限",{"2":{"246":1}}],["若你在使用过程中遇到了匪夷所思的问题",{"2":{"234":1}}],["若还是无法更新请尝试手动导入根目录",{"2":{"174":1}}],["若在线更新失败",{"2":{"119":1}}],["若想要修改前端样式",{"2":{"10":1}}],["事实上只要开启了鉴黄就会多出一个两个服务器进行通信的步骤",{"2":{"116":1}}],["事件",{"0":{"2":1}}],["标签",{"2":{"115":1,"126":1}}],["标记语言实现的矢量图形",{"2":{"93":1,"253":1}}],["功能中允许了",{"2":{"356":1}}],["功能端口设置无效问题",{"2":{"157":1}}],["功能无法上传",{"0":{"117":1}}],["功能",{"2":{"115":1,"155":1,"196":1,"357":1}}],["直接在域名前加上",{"2":{"113":1}}],["直接进行安装",{"2":{"110":1}}],["想要得到",{"2":{"113":1}}],["与",{"2":{"110":1,"238":1,"361":1,"406":1}}],["手动升级",{"0":{"110":1,"269":1}}],["手动停止或关闭终端后此命令会停止",{"2":{"83":1}}],["端点击安装后",{"2":{"110":1}}],["端直接升级版本",{"2":{"109":1,"268":1}}],["端口进行转发流量",{"2":{"102":1,"262":1,"287":1}}],["库",{"0":{"108":1,"267":1}}],["库的支持",{"2":{"64":1}}],["取值范围为",{"2":{"381":1}}],["取决于你的网络以及服务器的网络",{"2":{"235":1}}],["取决于图片数量",{"2":{"106":1,"265":1}}],["取消",{"2":{"160":1}}],["取消选择",{"2":{"43":1,"276":1}}],["欢迎你提交",{"2":{"103":1,"263":1,"288":1}}],["欢迎使用兰空图床企业版本",{"2":{"51":1}}],["具备相应接口的产品作适配",{"2":{"103":1,"263":1,"288":1}}],["具体请查看环境要求章节",{"2":{"328":1}}],["具体操作可参考安装章节第二步",{"2":{"88":1}}],["具体解释请查阅主题章节",{"2":{"5":1}}],["市面上各种厂家的产品层出不穷",{"2":{"103":1,"263":1,"288":1}}],["详见",{"2":{"197":1,"245":1}}],["详见安装文档",{"2":{"58":1}}],["详细解释和解决方法",{"2":{"102":1,"262":1,"287":1}}],["出现错误通常情况下可以在",{"2":{"286":1}}],["出现错误通常情况下可以在storage",{"2":{"101":1,"261":1}}],["出现这种情况反馈时请将日志文件携带",{"2":{"234":1}}],["出错",{"0":{"97":1,"257":1,"284":1}}],["~",{"2":{"99":1,"259":1,"310":2,"353":1}}],["了解更多",{"2":{"97":1,"257":1,"284":1}}],["显示屏的",{"2":{"368":1}}],["显示",{"0":{"97":1,"257":1,"284":1}}],["显示为",{"2":{"16":1,"339":1}}],["我多次上传了相同的图片",{"0":{"283":1}}],["我多次上传了相同的照片",{"0":{"96":1,"256":1}}],["我的图片中",{"0":{"97":1,"257":1,"284":1}}],["我们就可以通过",{"2":{"402":1}}],["我们就必须使用符号链接",{"2":{"401":1}}],["我们只能访问到站点根目录中的文件",{"2":{"401":1}}],["我们只需要在目标服务器创建一个站点",{"2":{"8":1}}],["我们建议你先浏览一遍该示例文档",{"2":{"392":1}}],["我们建议您修改",{"2":{"297":1}}],["我们将在以下文档中讨论如何配置它",{"2":{"392":1}}],["我们将该配置信息",{"2":{"353":1}}],["我们推荐您使用",{"2":{"391":1}}],["我们点击进应用详情",{"2":{"350":1}}],["我们也需要配置回调",{"2":{"350":1}}],["我们也提供了付费安装或迁移",{"2":{"291":1}}],["我们会使用第三方对象储存来储存图片以提高图片的访问速度",{"2":{"324":1}}],["我们会假设您是一名具备了一定基础知识的帅气站长",{"2":{"291":1}}],["我们需要像教程安装章节中那样",{"2":{"334":1}}],["我们需要使用终端进入目标服务器的站点根目录",{"2":{"332":1}}],["我们需要登录终端",{"2":{"329":1}}],["我们需要下载源码",{"2":{"315":1}}],["我们需要将程序的运行目录配置为",{"2":{"310":1}}],["我们重启",{"2":{"312":1}}],["我们给该脚本赋予可执行权限",{"2":{"311":1}}],["我们的安装包文件名为",{"2":{"309":1}}],["我们使用推荐的",{"2":{"309":1}}],["我们可以关联已创建的驱动",{"2":{"402":1}}],["我们可以利用程序中强大的图片处理功能",{"2":{"324":1}}],["我们可以找到",{"2":{"312":1}}],["我们可以使用",{"2":{"312":1}}],["我们可以通过角色组控制用户的可使用的储存",{"2":{"292":1}}],["我们可以自定义前端的样式",{"2":{"10":1}}],["我们提供技术与时间",{"2":{"291":1}}],["我们打开lsky",{"2":{"149":1}}],["我们首先获取accesskeys",{"2":{"149":1}}],["我们先将",{"2":{"86":1}}],["我们还可以通过逗号分隔",{"2":{"355":1}}],["我们还可以直接指定排序方式",{"2":{"76":1}}],["我们还需要像教程安装章节中那样",{"2":{"332":1}}],["我们还集成了图片安全服务",{"2":{"324":1}}],["我们还是假设项目绝对路径为",{"2":{"84":1}}],["我们更推荐使用",{"2":{"83":1}}],["我们来增加一个",{"2":{"44":1,"277":1}}],["我们非常推荐您在生产环境中安装并启用",{"2":{"3":1}}],["太麻烦了",{"2":{"95":1,"255":1}}],["其他细节改进",{"2":{"177":1}}],["其二",{"2":{"95":1,"255":1,"282":1}}],["其一",{"2":{"95":1,"255":1,"282":1}}],["其中自定义参数设置了",{"2":{"355":1}}],["其中短信驱动与邮件驱动",{"2":{"293":1}}],["其中会有一些区别",{"2":{"213":1}}],["其中",{"2":{"11":1,"44":1,"277":1,"369":1,"370":1}}],["未通过检测则无法进行安装",{"2":{"388":1}}],["未登录用户则使用游客组",{"2":{"293":1}}],["未做任何图片以外格式的文件支持",{"2":{"94":1,"254":1,"281":1}}],["未开启前图片是通过运行环境输出并缓存的",{"2":{"29":1,"214":1}}],["未开通",{"2":{"16":1,"339":1}}],["获取宽高能一系列操作",{"2":{"93":1,"253":1}}],["获取企业版本安装包",{"2":{"59":1}}],["严格来说",{"2":{"93":1,"253":1}}],["章节处理",{"2":{"119":1}}],["章节",{"2":{"91":1,"245":1,"249":1,"294":1}}],["4d2a",{"2":{"403":1}}],["4=左居中",{"2":{"178":1,"179":1}}],["400",{"2":{"355":1}}],["40",{"2":{"174":1}}],["404",{"0":{"92":1,"99":1,"250":1,"259":1,"280":1},"2":{"8":1,"208":1}}],["46",{"2":{"174":1}}],["423",{"2":{"101":1,"261":1,"286":1}}],["42000",{"0":{"91":1,"249":1}}],["4",{"0":{"89":1,"150":1,"175":1},"1":{"151":1,"152":1,"153":1},"2":{"111":1,"385":1}}],["终端窗口后就会停止运行",{"2":{"312":1}}],["终端的连接",{"2":{"291":1}}],["终端",{"2":{"87":1,"89":1,"306":1,"309":1}}],["符号开头的文件",{"2":{"86":1,"248":1}}],["符号链接解引用",{"2":{"329":1}}],["符号链接映射关系",{"2":{"86":1}}],["符号链接百度百科",{"2":{"85":1}}],["一些我们认为非常简单的东西或专业术语",{"2":{"291":1}}],["一键复制链接",{"2":{"229":1}}],["一键复制全部链接",{"2":{"151":1}}],["一般默认就好",{"2":{"88":3}}],["一般情况下",{"2":{"86":1}}],["一个介于",{"2":{"362":1}}],["一个角色组可以拥有多个储存",{"2":{"325":1}}],["一个储存策略可以归属于多个角色组",{"2":{"275":1}}],["一个新的储存就适配完成了",{"2":{"44":1,"277":1}}],["一个",{"2":{"40":1,"240":1,"297":1}}],["一个套餐可以设置多个具体的",{"2":{"26":1}}],["验证队列处理进程有没有正确配置",{"2":{"84":1}}],["验证规则请参考",{"2":{"44":1,"277":1}}],["队列和计划任务未配置成功会导致上传图片后无法生成缩略图",{"2":{"84":1}}],["输入旧版本的数据库连接地址等配置信息",{"2":{"306":1}}],["输入",{"2":{"84":1,"332":1}}],["输入以下内容",{"2":{"84":1}}],["输入普通的关键字",{"2":{"76":1}}],["登录新站点的后台",{"2":{"306":1}}],["登录服务器",{"2":{"306":1}}],["登录到个人中心后点击",{"2":{"291":1}}],["登录",{"2":{"84":1}}],["无论是已注册用户",{"2":{"210":1}}],["无论您是使用",{"2":{"13":1}}],["无法迁移的数据",{"0":{"302":1}}],["无法写入",{"2":{"246":1}}],["无法从旧版本直接升级至",{"2":{"235":1}}],["无法生成缩略图",{"2":{"213":2}}],["无法创建符号连接",{"2":{"199":1}}],["无法保存",{"0":{"115":1}}],["无法找到对应的文件",{"2":{"86":1}}],["无需配置",{"2":{"83":1,"84":1}}],["宝塔面板集成了可视化计划任务配置页面",{"2":{"84":1}}],["宝塔面板集成了",{"2":{"83":1}}],["根据提示升级即可",{"2":{"406":1}}],["根据指引完成数据库配置",{"2":{"81":1}}],["根据图片的大小自动适应屏幕分辨率",{"2":{"75":1}}],["程序中所有属于本地类型或开启了云处理的储存",{"2":{"401":1}}],["程序中调用",{"2":{"396":1}}],["程序还利用访问前缀来实现云处理功能",{"2":{"401":1}}],["程序安装时会检测必要的拓展是否安装",{"2":{"388":1}}],["程序安装完成",{"2":{"312":1}}],["程序安装需要您掌握一定的编程基础",{"2":{"291":1}}],["程序支持故障转移功能",{"2":{"293":1}}],["程序",{"2":{"130":1,"252":1}}],["程序会判断设置的路径是否存在",{"2":{"400":1}}],["程序会将处理后的图片直接替换掉原图",{"2":{"298":1}}],["程序会常驻内存",{"2":{"199":1}}],["程序会跳过下载补丁包的步骤",{"2":{"110":1}}],["程序会自动跳转至安装页面",{"2":{"247":1}}],["程序会自动跳转至图形化安装页面",{"2":{"81":1}}],["程序会自动加载该",{"2":{"107":1,"266":1}}],["程序请求静态资源",{"0":{"102":1,"262":1,"287":1}}],["程序不会重复的写入文件",{"2":{"96":1,"256":1,"283":1}}],["程序定位就是管理图片",{"2":{"94":1,"254":1,"281":1}}],["程序图片缩略图的符号链接",{"2":{"86":1}}],["程序默认本地储存的符号链接",{"2":{"86":1}}],["程序的设计初衷是为了使用户的图片在互联网中可以更方便的被储存",{"2":{"323":1}}],["程序的",{"2":{"86":1,"310":1}}],["程序上传文件的文件夹",{"2":{"60":1}}],["初始化配置",{"0":{"80":1}}],["第三方授权",{"2":{"301":1}}],["第三方储存次策略配置后",{"0":{"112":1}}],["第三步",{"0":{"80":1,"311":1}}],["第四步",{"0":{"81":1,"312":1}}],["第二步",{"0":{"79":1,"149":1,"310":1}}],["第一步我们需要移除",{"2":{"329":1}}],["第一步请先确认该问题是如何导致的",{"2":{"234":1}}],["第一步请先确定",{"2":{"117":1}}],["第一步",{"0":{"78":1,"148":1,"309":1}}],["第一栏的角色组输入框会展示全部已存在的角色组",{"2":{"43":1,"276":1}}],["服务启动后",{"2":{"199":1}}],["服务器所运行的权限",{"2":{"406":1}}],["服务器所使用的用户运行",{"2":{"312":1}}],["服务器需要安装",{"2":{"398":1}}],["服务器配置",{"0":{"390":1},"1":{"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1}}],["服务器具有以下最低",{"2":{"388":1}}],["服务器的最高控制权",{"2":{"387":1}}],["服务器例如",{"2":{"387":1}}],["服务器文件所在位置",{"2":{"351":1}}],["服务器运行的用户",{"2":{"332":1}}],["服务器迁移到",{"2":{"327":1}}],["服务器应该将所有请求定向到您的应用程序的",{"2":{"310":1}}],["服务器控制面板的安装与卸载",{"2":{"291":1}}],["服务器",{"2":{"291":1,"327":1,"387":1,"398":1}}],["服务器安装",{"2":{"83":1}}],["服务器还需要额外安装",{"2":{"53":1}}],["服务",{"2":{"78":1,"84":1,"87":1,"199":1}}],["清空后重启",{"2":{"78":1}}],["清除缓存",{"2":{"2":1,"62":1}}],["推荐使用该方式",{"2":{"351":1}}],["推荐使用",{"2":{"307":1,"331":1}}],["推荐使用第三方的图片处理规则来实现水印功能",{"2":{"40":1,"240":1}}],["推荐运行环境",{"0":{"77":1}}],["查询时间急剧上升",{"2":{"76":1}}],["查看搜索语法",{"2":{"76":1}}],["通过预设来处理不同的图片样式",{"2":{"355":1}}],["通过预设一个或多个不同的版本",{"2":{"355":1}}],["通过新站点的域名访问前端",{"2":{"334":1}}],["通过反向代理提供对外服务",{"2":{"322":1}}],["通过作业链依次执行",{"2":{"298":1}}],["通过使用高性能应用程序服务器为您的应用程序提供服务来增强您的应用程序的性能",{"2":{"199":1}}],["通配符会在搜索时全表扫描",{"2":{"76":1}}],["通配符实现的",{"2":{"76":1}}],["通常是在",{"2":{"312":1}}],["通常是",{"2":{"312":1}}],["通常是因为配置错误",{"2":{"112":1}}],["通常是用来指定该套餐中",{"2":{"26":1}}],["通常情况下服务器这两种环境中的",{"2":{"308":1}}],["通常情况下程序会在",{"2":{"234":1}}],["通常情况下默认的文件储存已经足够用",{"2":{"215":1}}],["通常情况下",{"2":{"79":1,"246":1,"388":1}}],["通常情况下大部分拓展都是预装的",{"2":{"78":1}}],["通常用于快速查找数据",{"2":{"76":1}}],["通常来说",{"2":{"53":1}}],["模糊",{"0":{"373":1},"2":{"357":1}}],["模糊匹配是通过",{"2":{"76":1}}],["模块",{"2":{"353":1}}],["模式下运行",{"2":{"235":1}}],["模式",{"2":{"163":1,"182":1,"392":1}}],["模板",{"2":{"11":1}}],["升序",{"2":{"76":1}}],["升级",{"0":{"404":1},"1":{"405":1,"406":1}}],["升级指南",{"0":{"235":1},"1":{"236":1,"237":1,"238":1,"239":1}}],["升级条件",{"0":{"58":1}}],["升级兰图图床之前请务必使用命令",{"2":{"2":1}}],["从而实现文件储存在服务器的任何位置还能保证公网可以访问到图片",{"2":{"400":1}}],["从而大幅提升性能",{"2":{"3":1}}],["从旧版本的数据库导入",{"0":{"300":1},"1":{"301":1,"302":1,"303":1,"304":1,"305":1,"306":1}}],["从旧版本迁移还是一个比较繁琐的步骤",{"2":{"235":1}}],["从",{"2":{"130":1}}],["从小到大",{"2":{"76":1}}],["从大到小",{"2":{"76":1}}],["除非新图像的纵横比与旧图像相同",{"2":{"367":1}}],["除此之外",{"2":{"76":1,"333":1}}],["除了所有现代浏览器支持的",{"2":{"384":1}}],["除了裁剪位置",{"2":{"362":1}}],["除了您设置的",{"2":{"322":1}}],["除了",{"2":{"269":1}}],["除了上述命令的方式",{"2":{"83":1}}],["除了可以拖拽鼠标多选图片外",{"2":{"75":1}}],["除了以上要求",{"2":{"53":1}}],["除了缩略图",{"2":{"29":1,"214":1}}],["除了后台管理",{"2":{"10":1}}],["词可以进行数据模糊匹配",{"2":{"76":1}}],["灵感来自于",{"2":{"76":1}}],["+100",{"2":{"369":1,"370":1}}],["+x",{"2":{"311":1}}],["+",{"2":{"75":1,"84":1,"329":1,"332":1,"344":1,"391":1}}],["还接受十六进制",{"2":{"384":1}}],["还没完",{"2":{"332":1}}],["还是有部分数据无法完整无缝的迁移到新版本中",{"2":{"300":1}}],["还是",{"0":{"96":1,"256":1,"283":1}}],["还可以在",{"2":{"107":1}}],["还可以对数据进行排序",{"2":{"76":1}}],["还可以通过按住",{"2":{"75":1}}],["还对性能以及产品健壮性做了针对优化",{"2":{"51":1}}],["优惠券",{"2":{"302":1}}],["优惠券管理",{"2":{"52":1,"326":1}}],["优先从",{"2":{"174":1}}],["优化安装环境检测",{"2":{"176":1}}],["优化前台提示登录注册的页面",{"2":{"176":1}}],["优化接口状态码",{"2":{"175":1}}],["优化接口",{"2":{"174":1}}],["优化视图加载",{"0":{"73":1}}],["优化路由加载",{"0":{"72":1}}],["优化配置加载",{"0":{"71":1}}],["|",{"2":{"64":1,"78":1,"87":1,"397":2}}],["且同时删除大量物理文件对磁盘要求较高",{"2":{"251":1}}],["且数据库结构层面变化较大",{"2":{"235":1}}],["且图片管理展示的图片均来自服务器本地生成的缩略图",{"2":{"75":1}}],["且需要达到指定版本要求",{"2":{"64":1}}],["且每次都将图片内容读取到内存中",{"2":{"29":1,"214":1}}],["编译并安装",{"0":{"69":1}}],["编译",{"0":{"65":1}}],["编译安装",{"0":{"63":1,"67":1},"1":{"64":1,"65":1,"66":1,"68":1,"69":1}}],["编辑云处理驱动器配置",{"2":{"353":1}}],["编辑完毕后",{"2":{"332":1}}],["编辑完成后保存",{"2":{"61":1}}],["编辑",{"2":{"104":1,"105":1,"264":1,"396":1}}],["编辑根目录中的",{"2":{"80":1}}],["编辑页面",{"2":{"44":1,"84":1,"277":1}}],["编辑储存策略时",{"2":{"43":1,"276":1}}],["编辑角色组时",{"2":{"27":1,"211":1}}],["否则可能会泄漏许可证编号或密钥等隐私数据",{"2":{"322":1}}],["否则可能会导致图片变的非常大",{"2":{"299":1}}],["否则可能会导致邮件验证等功能失效",{"2":{"79":1}}],["否则会导致安装失败",{"2":{"322":1}}],["否则会有意想不到的错误",{"2":{"245":1}}],["否则我们有权删除许可证或加入黑名单",{"2":{"290":1}}],["否则样式可能会变得奇怪",{"2":{"62":1}}],["否则支付功能无法使用",{"2":{"16":1,"339":1}}],["最早的版本由",{"2":{"228":1}}],["最新版本动态请戳我",{"2":{"153":1}}],["最大上传大小",{"0":{"142":1}}],["最为严格",{"2":{"129":1}}],["最低需要",{"2":{"78":1}}],["最低必须是开源",{"2":{"58":1}}],["最后一步",{"0":{"82":1},"1":{"83":1,"84":1},"2":{"62":1,"334":1}}],["没有绝对的安全",{"2":{"312":1}}],["没有异步",{"2":{"252":1}}],["没有符号连接将会无法访问本地所上传的图片",{"2":{"62":1}}],["没有设置区域则可以固定为",{"2":{"50":1,"274":1}}],["填好后点击确定创建bucket",{"2":{"148":1}}],["填写好以后点击保存即可",{"2":{"149":1}}],["填写如下图",{"2":{"149":1}}],["填写你的bucket名称",{"2":{"148":1}}],["填写smtp登录邮箱",{"2":{"137":1}}],["填写后会显示在网站底部",{"2":{"125":1}}],["填充基础数据",{"2":{"62":1}}],["填入兰空图片后台支付配置中既可",{"2":{"24":1,"350":1}}],["迁移数据库",{"0":{"331":1}}],["迁移数据库结构",{"2":{"62":1}}],["迁移",{"0":{"327":1},"1":{"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1}}],["迁移完毕后即可使用旧版本中的管理员账号",{"2":{"306":1}}],["迁移完成以后请将跟目录所有文件夹",{"2":{"248":1}}],["迁移完成后组的配置都是系统默认值",{"2":{"239":1}}],["迁移与手动升级的步骤大致相同",{"2":{"248":1}}],["迁移过程中旧站点不受影响",{"2":{"306":1}}],["迁移过程中",{"2":{"238":1}}],["迁移脚本仅迁移数据库",{"2":{"300":1}}],["迁移脚本配置",{"0":{"237":1}}],["迁移脚本只会将你的旧版本的数据库数据迁移至新版本",{"2":{"235":1}}],["迁移成功后的用户处于未验证状态",{"2":{"235":1}}],["迁移后的图片",{"2":{"235":1}}],["迁移后的角色组和储存策略无任何关联关系",{"2":{"235":1}}],["迁移可能需要很久",{"2":{"235":1}}],["迁移之前你需要知道的事",{"2":{"235":1}}],["迁移服务器后图片上传失败",{"0":{"111":1}}],["迁移到新服务器",{"0":{"88":1}}],["迁移前",{"2":{"86":1}}],["迁移兰空图床",{"0":{"85":1,"248":1},"1":{"86":1,"87":1,"88":1,"89":1,"90":1}}],["迁移文件",{"0":{"60":1}}],["确保数据库",{"2":{"332":1}}],["确保上述配置填写无误后",{"2":{"62":1}}],["确认创建",{"2":{"23":1,"348":1}}],["执行后按下键盘",{"2":{"332":1}}],["执行后会输出所有符号链接",{"2":{"329":1}}],["执行后会进入",{"2":{"84":1}}],["执行解压命令",{"2":{"332":1}}],["执行打包命令",{"2":{"330":1}}],["执行导入数据命令",{"2":{"306":1}}],["执行迁移",{"0":{"306":1}}],["执行以下命令快速创建程序运行时需要的文件夹和数据库文件",{"2":{"317":1}}],["执行以下命令查看用户",{"2":{"312":1}}],["执行以下命令",{"2":{"84":1}}],["执行命令查看符号链接",{"2":{"329":1}}],["执行命令生成",{"2":{"80":1}}],["执行命令",{"2":{"69":1,"204":1,"205":1,"206":1,"207":1}}],["执行升级",{"0":{"62":1}}],["执行构建命令",{"2":{"12":1}}],["表",{"2":{"269":1}}],["表示主图像宽度的5",{"2":{"383":1}}],["表示不变",{"2":{"369":1,"370":1}}],["表示最佳图像质量",{"2":{"299":1}}],["表示最低图像质量",{"2":{"299":1}}],["表示正在迁移图片数据",{"2":{"238":1}}],["表示没有密码",{"2":{"61":1,"80":1}}],["表达式中追加内容",{"2":{"44":1,"277":1}}],["连接用户名",{"2":{"217":1}}],["连接方式",{"2":{"164":1}}],["连接端口",{"2":{"61":1,"80":1,"88":1,"216":1,"217":1}}],["连接密码",{"2":{"61":1,"80":1,"88":1,"216":1,"217":1}}],["连接地址",{"2":{"61":1,"80":1,"88":1,"216":1,"217":1}}],["核心框架缓存文件夹",{"2":{"60":1}}],["└─",{"2":{"86":2}}],["└─logs",{"2":{"60":1}}],["└─uploads",{"2":{"60":1}}],["└─js",{"2":{"60":1}}],["应用程序必要的组件",{"2":{"387":1}}],["应用程序",{"2":{"387":1}}],["应用名称",{"2":{"322":1}}],["应用储存文件夹",{"2":{"60":1}}],["应用私钥rsa2048",{"2":{"22":1,"345":1}}],["样式所需的字体文件文件夹",{"2":{"60":1}}],["层叠式样式表文件夹",{"2":{"60":1}}],["│",{"2":{"60":16}}],["静态资源文件夹",{"2":{"60":1}}],["├─installed",{"2":{"60":1}}],["├─img",{"2":{"60":1}}],["├─framework",{"2":{"60":1}}],["├─fonts",{"2":{"60":1}}],["├─debugbar",{"2":{"60":1}}],["├─thumbnails",{"2":{"60":1}}],["├─certs",{"2":{"60":1}}],["├─css",{"2":{"60":1}}],["├─app",{"2":{"60":1}}],["├─storage",{"2":{"60":1}}],["├─public",{"2":{"60":2}}],["├─",{"2":{"60":4,"86":7}}],["新注册用户将默认归属为默认角色组",{"2":{"293":1}}],["新版本发布以后",{"2":{"268":1}}],["新版本数据库配置填写完整",{"2":{"237":1}}],["新版本需要图片的尺寸数据",{"2":{"235":1}}],["新版本的目录结构应该是这样的",{"2":{"60":1}}],["新用户将会默认归属该角色组",{"2":{"210":1}}],["新增用户名登录方式",{"2":{"172":1}}],["新加坡",{"2":{"33":1,"36":1,"221":1,"224":1}}],["操作系统的进程监视器",{"2":{"393":1}}],["操作后",{"2":{"60":1}}],["操作起来非常简单",{"2":{"5":1}}],["运行一个",{"2":{"394":1}}],["运行",{"0":{"319":1,"321":1}}],["运行环境搭建与配置",{"2":{"291":1}}],["运行环境配置",{"0":{"245":1}}],["运行环境的服务器的任意文件夹下",{"2":{"237":1}}],["运行环境达到企业版本的要求",{"2":{"58":1}}],["运行目录",{"2":{"88":1}}],["运行调试命令启动开发服务器",{"2":{"12":1}}],["校正系统统计数据",{"0":{"57":1}}],["重载",{"0":{"205":1}}],["重命名等操作",{"2":{"195":1,"229":1}}],["重命名的文件",{"2":{"12":1}}],["重构更新数据库结构的方法",{"2":{"164":1}}],["重构鉴权方式",{"2":{"164":1}}],["重新安装的时候",{"2":{"118":1}}],["重新保存一下以生成符号链接",{"2":{"333":1}}],["重新保存一下以生成对应储存的符号连接",{"2":{"89":1}}],["重新保存策略",{"2":{"62":1}}],["重启",{"2":{"84":1}}],["重要",{"0":{"82":1},"1":{"83":1,"84":1},"2":{"62":1,"90":2}}],["重建符号连接",{"2":{"62":1}}],["重建程序所需要的符号连接",{"0":{"56":1}}],["为图片添加边框",{"2":{"377":1}}],["为图像应用滤镜效果",{"2":{"357":1,"375":1}}],["为图像添加边框",{"2":{"357":1}}],["为图像添加像素化效果",{"2":{"357":1,"374":1}}],["为图像添加模糊效果",{"2":{"357":1,"373":1}}],["为估算值",{"2":{"299":1}}],["为",{"2":{"269":1,"353":1,"355":2}}],["为了实现这个特性",{"2":{"401":1}}],["为了实现文件储存在服务器任何位置还能保证公网可访问这个需求",{"2":{"401":1}}],["为了实现本地储存可以更改储存位置",{"2":{"47":1,"271":1}}],["为了方便查看上传文件",{"2":{"317":1}}],["为了避免这种情况",{"2":{"297":1}}],["为了保证可用性",{"2":{"153":1}}],["为空则不显示",{"2":{"126":1}}],["为什么需要删除符号链接",{"2":{"329":1}}],["为什么运行目录需要设置为",{"2":{"310":1}}],["为什么没有可视化安装页面",{"2":{"308":1}}],["为什么不支持客户端直传",{"0":{"95":1,"255":1,"282":1}}],["为什么不支持",{"0":{"93":1,"253":1}}],["为什么配置完了以后",{"0":{"92":1,"250":1,"280":1}}],["为什么要删除符号链接",{"2":{"86":1}}],["为所有图片生成缩略图",{"0":{"55":1}}],["以反映您所需的队列连接和工作者选项",{"2":{"394":1}}],["以实现最小化安装",{"2":{"391":1}}],["以像素为单位",{"2":{"364":1,"365":1}}],["以保存并退出",{"2":{"332":1}}],["以外的数据库",{"2":{"332":1}}],["以下命令都需要在旧版本的根目录执行",{"2":{"329":1}}],["以下命令都需要在目标服务器站点的根目录执行",{"2":{"315":1,"332":1}}],["以下是您提供的英文部分翻译成中文的内容",{"2":{"357":1}}],["以下是",{"2":{"83":1}}],["以及用户组改为",{"2":{"406":1}}],["以及它们可能需要的任何依赖项",{"2":{"389":1}}],["以及",{"2":{"87":1,"350":1}}],["以及需要通过常驻",{"2":{"53":1}}],["以空格隔开即可",{"2":{"76":1}}],["以画廊的样子展示",{"2":{"75":1}}],["以此生成本地符号连接",{"2":{"62":1}}],["以上大部分拓展默认都是预装的",{"2":{"53":1}}],["以上所有属性值",{"2":{"38":1,"226":1}}],["函数",{"2":{"53":3,"83":1,"231":3}}],["函数调用都将返回",{"2":{"2":1}}],["扩展",{"2":{"53":9,"231":9,"388":13}}],["安装教程",{"2":{"396":1}}],["安装以及配置教程",{"2":{"392":1}}],["安装上必须的拓展",{"2":{"245":1}}],["安装兰空图床",{"0":{"243":1},"1":{"244":1,"245":1,"246":1,"247":1}}],["安装成功后不要进行任何操作",{"2":{"236":1}}],["安装需求",{"0":{"196":1}}],["安装条件增加需要",{"2":{"164":1}}],["安装时出现重定向次数过多",{"0":{"118":1}}],["安装时出现错误",{"0":{"91":1,"249":1}}],["安装后可以直接使用",{"2":{"83":1}}],["安装完成后",{"2":{"69":1}}],["安装",{"0":{"66":1,"305":1,"307":1,"313":1,"393":1,"398":1},"1":{"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":2,"315":2,"316":2,"317":2,"318":2,"319":2,"320":2,"321":2,"322":2},"2":{"74":1,"243":1,"245":1,"307":2,"309":1}}],["安装要求",{"0":{"53":1,"231":1},"2":{"245":1}}],["安装你的驱动器",{"2":{"44":1,"277":1}}],["屏蔽功能",{"2":{"52":1}}],["套餐需要重新设置赠送容量和角色组",{"2":{"303":1}}],["套餐内的赠送容量以及组设置",{"2":{"302":1}}],["套餐系统",{"2":{"52":1,"326":1}}],["套餐权益可以设置多个",{"2":{"25":1}}],["套餐权益",{"0":{"25":1}}],["独立页面管理",{"2":{"52":1,"326":1}}],["收集意见",{"2":{"52":1,"326":1}}],["站点域名",{"2":{"344":1}}],["站点",{"2":{"322":1}}],["站点配置完毕以后",{"2":{"309":1}}],["站点开启了单用户模式",{"2":{"118":1}}],["站点必须以",{"2":{"97":1,"257":1}}],["站点运行目录是否设置正确",{"2":{"92":1,"250":1,"280":1}}],["站点目录的所有者和用户组为",{"2":{"79":1,"246":1}}],["站点中的文件夹和文件权限和所有者可能会变",{"2":{"61":1}}],["站点根目录为",{"2":{"401":1}}],["站点根目录",{"2":{"60":1}}],["站点标题",{"2":{"6":1}}],["站内公告",{"2":{"52":1,"326":1}}],["点赞记录",{"2":{"302":1}}],["点赞",{"2":{"52":1}}],["点击其他服务页面找到qq群号",{"2":{"291":1}}],["点击储存策略",{"2":{"149":1}}],["点击oss控制台的概览",{"2":{"149":1}}],["点击进去后会有一个安全提示",{"2":{"149":1}}],["点击图片右上角的选择框进行多选",{"2":{"75":1}}],["点击",{"2":{"14":1,"15":1,"23":2,"337":1,"338":1,"348":2,"406":1}}],["分享",{"2":{"301":1}}],["分享相册",{"2":{"52":1,"326":1}}],["分别为",{"2":{"129":1}}],["分离部署",{"0":{"5":1},"1":{"6":1,"7":1,"8":1}}],["管理",{"2":{"322":1,"323":1}}],["管理员密码",{"2":{"322":1}}],["管理员邮箱",{"2":{"322":1}}],["管理员用户名",{"2":{"322":1}}],["管理员都受角色组控制",{"2":{"210":1}}],["管理员账号配置等",{"2":{"81":1}}],["管理相册",{"2":{"52":1,"229":1}}],["管理图片的图床程序",{"2":{"228":1}}],["管理图片",{"2":{"52":1,"229":1}}],["管理等",{"2":{"44":1,"277":1}}],["拖拽上传",{"2":{"52":1,"195":1,"229":1,"326":1}}],["粘贴上传",{"2":{"52":1,"195":1,"229":1,"326":1}}],["批量上传",{"2":{"52":1,"326":1}}],["轴偏移量设置",{"2":{"52":1,"229":1}}],["相对尺寸允许您指定宽度或高度值作为主图像的百分比",{"2":{"383":1}}],["相对尺寸",{"0":{"383":1}}],["相当于以",{"2":{"362":1}}],["相当于复制目标文件到压缩包",{"2":{"329":1}}],["相同",{"2":{"361":1}}],["相同但图片内容不同会跳过上传的",{"2":{"157":1}}],["相关文件都转移到目标服务器后",{"2":{"332":1}}],["相反",{"2":{"331":1}}],["相册",{"2":{"52":1,"301":1,"326":1}}],["相较于以前的版本",{"2":{"10":1}}],["可用选项包括",{"2":{"380":1}}],["可点击购买来获取兰空图床付费版本",{"2":{"290":1}}],["可靠性或适用性做出任何明示或暗示的保证",{"2":{"278":1}}],["可选",{"0":{"203":1},"2":{"216":3,"217":4}}],["可选值为",{"2":{"382":1}}],["可选值",{"2":{"132":1}}],["可选拓展",{"2":{"78":1}}],["可自定义第三方统计代码",{"2":{"124":1}}],["可能需要删除容器后重启执行运行步骤",{"2":{"322":1}}],["可能导致系统级权限被滥用",{"2":{"312":1}}],["可能会造成符号链接存在但是为失效的状态",{"2":{"329":1}}],["可能会受到各种风险和威胁",{"2":{"278":1}}],["可能会对使站点产生一些奇怪的副作用",{"2":{"74":1}}],["可能不存在",{"2":{"86":1}}],["可视化管理",{"2":{"52":1}}],["可针对角色组设置上传文件",{"2":{"52":1,"229":1}}],["可以检测您的",{"2":{"392":1}}],["可以是绝对路径或相对路径",{"2":{"322":1}}],["可以正常运行",{"2":{"306":1}}],["可以迁移的数据",{"0":{"301":1}}],["可以根据此章节将您的旧版本数据迁移至",{"2":{"300":1}}],["可以看到",{"2":{"298":1}}],["可以看到对象储存的外网访问域名",{"2":{"149":1}}],["可以尝试手动升级",{"2":{"269":1}}],["可以前往",{"2":{"268":1}}],["可以前往后台管理",{"2":{"11":1}}],["可以为每个组配置多个储存策略",{"2":{"229":1}}],["可以为空",{"2":{"50":1,"274":1}}],["可以做到覆盖整站的任何标签样式",{"2":{"123":1}}],["可以先使用",{"2":{"117":1}}],["可以关闭缩略图功能吗",{"0":{"105":1}}],["可以",{"2":{"104":1,"105":1,"264":1}}],["可以简单理解为",{"2":{"85":1}}],["可以通过",{"2":{"324":1}}],["可以通过查看上传的图片是否生成了缩略图进行判断",{"2":{"84":1}}],["可以通过快捷键",{"2":{"75":1}}],["可以直接修改上传的原图",{"2":{"296":1}}],["可以直接使用",{"2":{"84":1}}],["可以直接从将正在运行的旧版本的",{"2":{"61":1}}],["可以在",{"2":{"26":1}}],["可以设置关联组",{"2":{"26":1}}],["多次购买授权时填写的邮箱相同",{"2":{"290":1}}],["多图上传",{"2":{"229":1}}],["多图上传按顺序排列",{"2":{"176":1}}],["多个ip使用英文逗号隔开",{"2":{"140":1}}],["多个请使用英文逗号分隔",{"2":{"122":1}}],["多个角色组支持关联多个策略",{"2":{"52":1}}],["多条记录指向同一个物理文件",{"2":{"96":1,"256":1,"283":1}}],["多用户",{"2":{"52":1,"326":1}}],["多种数据库驱动支持",{"2":{"52":1,"229":1}}],["角色组顾名思义",{"2":{"325":1}}],["角色组是兰空图床最重要的组成部分",{"2":{"292":1}}],["角色组",{"0":{"292":1},"1":{"293":1,"294":1,"295":1},"2":{"301":1}}],["角色组控制与多策略支持",{"2":{"52":1,"326":1}}],["角色组可以对上传后的图片按照命名规则表中的规则对图片的物理储存路径",{"2":{"28":1,"212":1}}],["90",{"2":{"358":1,"381":1}}],["92",{"2":{"299":1}}],["9=右下角",{"2":{"178":1,"179":1}}],["915",{"2":{"363":1}}],["91",{"2":{"164":1}}],["99",{"2":{"161":1,"371":1}}],["9",{"2":{"52":1,"54":1,"102":1,"229":1,"232":1,"262":1,"287":1,"371":1}}],["7c4a8d09ca3762af61e59520943dc26494f8941b",{"2":{"403":1}}],["777",{"2":{"317":1}}],["7776000",{"2":{"26":1}}],["7=左下角",{"2":{"178":1,"179":1}}],["75",{"2":{"155":1,"299":1,"362":2}}],["7",{"0":{"169":1},"1":{"170":1},"2":{"77":1,"87":1,"111":1,"196":1,"300":1}}],["7+",{"2":{"52":1,"54":1,"77":1,"87":1,"229":1,"232":1,"389":1,"391":1}}],["55cccccc",{"2":{"385":1}}],["5ccc",{"2":{"385":1}}],["5w",{"2":{"383":1}}],["512m",{"2":{"297":2}}],["5=居中",{"2":{"178":1,"179":1}}],["57",{"2":{"174":1}}],["5bb2f89a38935",{"2":{"146":1}}],["5m",{"2":{"142":1}}],["5",{"0":{"90":1,"169":1,"171":1,"174":2,"175":1,"176":1,"177":1},"1":{"170":1,"172":1,"173":1,"175":2},"2":{"52":1,"54":1,"77":1,"87":1,"111":1,"130":1,"170":1,"196":3,"228":1,"229":1,"232":1,"371":1,"389":1,"391":1}}],["5000",{"2":{"377":1}}],["500",{"2":{"234":1}}],["50",{"2":{"26":1}}],["又拍云",{"2":{"52":1,"195":1,"229":1,"275":1,"399":1}}],["七牛云",{"2":{"52":1,"195":1,"229":1,"275":1,"399":1}}],["支持多种颜色格式",{"2":{"384":1}}],["支持参数是自定义程序更高的一种配置",{"2":{"356":1}}],["支持参数",{"0":{"356":1},"2":{"356":2}}],["支持任何已适配的储存",{"2":{"351":1}}],["支持开发者适配原生或跨平台的客户端",{"2":{"325":1}}],["支持配置使用多种缓存驱动",{"2":{"229":1}}],["支持鼠标右键",{"2":{"195":1,"229":1}}],["支持第三方云储存",{"2":{"195":1}}],["支持负数",{"2":{"180":1}}],["支持从请求参数中获取",{"2":{"174":1}}],["支持根据别名搜索图片",{"2":{"168":1}}],["支持",{"2":{"155":1,"164":1,"196":1,"399":1}}],["支持通配符",{"2":{"163":1}}],["支持通配符匹配",{"2":{"140":1}}],["支持通过接口上传",{"2":{"52":1,"229":1}}],["支持使用",{"2":{"126":1}}],["支持的文件命名规则",{"0":{"403":1}}],["支持的颜色",{"0":{"384":1},"1":{"385":1,"386":1}}],["支持的图片类型受系统影响",{"2":{"64":1}}],["支持的数据库",{"0":{"54":1,"232":1},"2":{"91":1,"249":1}}],["支持在线增量更新",{"2":{"52":1,"229":1}}],["支持设置分享有效期",{"2":{"52":1}}],["支持密码分享",{"2":{"52":1,"326":1}}],["支持图片水印",{"2":{"52":1,"229":1}}],["支持本地等多种第三方云储存",{"2":{"52":1,"229":1}}],["支付驱动",{"0":{"335":1},"1":{"336":1,"337":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1,"348":1,"349":1,"350":1},"2":{"293":1,"301":1}}],["支付方式",{"2":{"292":1}}],["支付宝",{"0":{"336":1},"1":{"337":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1},"2":{"198":1,"233":1}}],["支付功能证书文件夹",{"2":{"60":1}}],["支付配置",{"2":{"21":1}}],["支付",{"2":{"15":1,"325":1,"335":1,"338":1}}],["企业版本除了在功能上做了进一步加强",{"2":{"51":1}}],["企业版和开源的",{"2":{"51":1}}],["则自动重启它们",{"2":{"394":1}}],["则自动切换到下一个可用驱动发件",{"2":{"293":1}}],["则会放大图像",{"2":{"367":1}}],["则会验证区域",{"2":{"50":1,"274":1}}],["则其他程序文件都可以删除",{"2":{"322":1}}],["则需要手动将文件移动到新站点中的指定文件夹中",{"2":{"300":1}}],["则需要根据支付宝的指引去开通",{"2":{"16":1,"339":1}}],["则在图片上传成功后直接返回图片链接",{"2":{"298":1}}],["则处理时间就会较长",{"2":{"298":1}}],["则数据迁移完成",{"2":{"239":1}}],["则是项目根目录",{"2":{"180":1}}],["进程失败",{"2":{"393":1}}],["进程监视器可以让您指定希望同时运行多少个",{"2":{"392":1}}],["进程何时退出并自动重启它们",{"2":{"392":1}}],["进程可能会因各种原因停止运行",{"2":{"392":1}}],["进程运行",{"2":{"392":1}}],["进程",{"2":{"312":1,"392":1,"394":2}}],["进行反馈",{"2":{"234":1}}],["进行更新",{"2":{"174":1}}],["进行全选",{"2":{"75":1}}],["进行连接",{"2":{"50":1,"274":1}}],["进阶优化方案",{"0":{"74":1}}],["进入要迁移的服务器站点根目录",{"2":{"329":1}}],["进入源码根目录",{"2":{"315":1}}],["进入新站点的根目录",{"2":{"306":1}}],["进入程序根目录执行依次执行以下命令",{"2":{"269":1}}],["进入数据库找到",{"2":{"269":1}}],["进入站点目录",{"2":{"89":1}}],["进入终端",{"2":{"80":1}}],["进入开发者中心",{"2":{"23":1,"348":1}}],["进入",{"2":{"21":1,"89":1}}],["腾讯云的储存桶名称由",{"2":{"49":1,"273":1}}],["腾讯云",{"0":{"49":1,"273":1},"2":{"52":1,"195":1,"229":1,"275":1,"324":1,"399":1}}],["腾讯云内容安全",{"0":{"31":1,"219":1},"1":{"32":1,"33":1,"220":1,"221":1}}],["阿里云",{"0":{"48":1,"272":1},"2":{"52":1,"195":1,"229":1,"275":1,"399":1,"400":1}}],["阿里云内容安全",{"0":{"34":1,"222":1},"1":{"35":1,"36":1,"223":1,"224":1}}],["所需格式",{"2":{"363":1}}],["所以",{"2":{"401":1}}],["所以我们需要用到",{"2":{"312":1}}],["所以我们需要通过其他命令",{"2":{"83":1}}],["所以本地储存必须有一个域名后缀",{"2":{"47":1,"271":1}}],["所有",{"2":{"333":2}}],["所有用户",{"2":{"292":1}}],["所有组",{"2":{"248":1}}],["所有已迁移的图片访问",{"2":{"235":1}}],["所有人",{"2":{"129":2}}],["所有对",{"2":{"2":1}}],["所有缓存命令都必须在程序安装完成且是生产环境下运行",{"2":{"0":1}}],["参数对该图片进行动态处理",{"2":{"402":1}}],["参数来控制图片宽度",{"2":{"356":1}}],["参数",{"2":{"356":1}}],["参数定义",{"2":{"355":1}}],["参数实时修改图片样式并输出的功能",{"2":{"351":1}}],["参数自定义规则来访问某个图片的不同版本",{"2":{"324":1}}],["参数用于实时跟踪日志输出",{"2":{"322":1}}],["参数解释",{"0":{"322":1}}],["参数过滤",{"2":{"115":1}}],["参数值来调整接口地址",{"2":{"12":1}}],["参考安装文档中的最后一步",{"2":{"90":1}}],["参考安装教程中的最后一步",{"2":{"62":1}}],["参考其他的储存策略表单",{"2":{"44":1,"277":1}}],["e10adc3949ba59abbe56e057f20f883e",{"2":{"403":1}}],["esc",{"2":{"332":1}}],["email=",{"2":{"319":1,"321":1}}],["email",{"2":{"278":1,"322":1}}],["etc",{"2":{"278":1,"312":7,"394":1}}],["electronic",{"2":{"278":1}}],["efforts",{"2":{"278":1}}],["eq",{"2":{"84":1}}],["errors",{"2":{"278":2}}],["error",{"0":{"91":2,"249":2},"2":{"99":1,"208":4,"259":1}}],["err",{"2":{"83":1}}],["e",{"2":{"78":1,"84":1,"87":1,"312":1}}],["ext",{"2":{"403":1}}],["extent",{"2":{"278":1}}],["exif",{"2":{"358":1}}],["exists",{"2":{"208":1}}],["expand",{"2":{"380":2}}],["explicit",{"2":{"278":1}}],["expires",{"2":{"99":1,"259":1,"310":1,"353":1}}],["exceeds",{"0":{"114":1}}],["example",{"2":{"61":1,"80":1,"319":1,"344":2}}],["exec",{"2":{"53":2,"231":2,"329":1}}],["east",{"2":{"50":1,"274":1}}],["edit",{"2":{"44":2,"277":2}}],["enforceability",{"2":{"278":1}}],["entirely",{"2":{"278":1}}],["entity",{"2":{"101":1,"261":1,"286":1}}],["ensure",{"2":{"278":1}}],["enable",{"2":{"105":1,"178":1,"179":1}}],["enums",{"2":{"44":4,"277":4}}],["endpoint",{"0":{"32":1,"220":1}}],["env",{"2":{"2":3,"6":1,"12":1,"61":4,"80":3,"88":1,"104":1,"105":1,"108":1,"110":1,"215":1,"264":1,"267":1,"269":1,"319":7,"331":1,"332":2,"406":1}}],["$proxy",{"2":{"208":1,"287":1}}],["$remote",{"2":{"208":1}}],["$root",{"2":{"180":2}}],["$server",{"2":{"208":1}}],["$suffix",{"2":{"208":2}}],["$scheme",{"2":{"102":1,"208":1,"262":1,"287":2}}],["$connection",{"2":{"208":2,"287":1}}],["$configs",{"2":{"44":3,"277":3}}],["$http",{"2":{"208":3,"287":2}}],["$",{"2":{"99":1,"259":1,"310":1,"353":1}}],["$query",{"2":{"79":1,"208":1,"246":1,"310":3}}],["$uri",{"2":{"79":2,"208":3,"246":2,"310":6}}],["$this",{"2":{"44":1,"277":1}}],["$array",{"2":{"44":1,"277":1}}],["常见的",{"2":{"387":1}}],["常见问题",{"0":{"279":1},"1":{"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1}}],["常规设置中的应用网址",{"2":{"405":1}}],["常规优化方案",{"0":{"70":1},"1":{"71":1,"72":1,"73":1}}],["常规配置",{"2":{"27":1,"211":1}}],["常量中追加一行",{"2":{"44":1,"277":1}}],[">",{"2":{"358":1,"359":1,"360":1,"361":1,"362":2,"363":1,"364":1,"365":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"380":1,"381":1,"382":1,"383":1}}],[">>",{"2":{"84":1}}],[">input",{"2":{"44":1,"277":1}}],[">get",{"2":{"44":3,"277":3}}],[">where",{"2":{"8":2}}],["更多颜色格式信息请参阅颜色",{"2":{"376":1,"379":1}}],["更换驱动非常简单",{"2":{"215":1}}],["更换二维码接口",{"2":{"177":1}}],["更新备案管理系统",{"2":{"176":1}}],["更新",{"2":{"176":2}}],["更新thinkphp",{"2":{"175":1}}],["更新框架和部分拓展包",{"2":{"173":1,"174":1}}],["更新部分拓展包",{"2":{"160":1}}],["更新后出现样式异常",{"0":{"100":1,"260":1,"285":1}}],["更改配置",{"0":{"333":1}}],["更改以后记得重启",{"2":{"297":1}}],["更改后台图片管理每页显示数量为",{"2":{"160":1}}],["更改图片服务类中的",{"2":{"44":1,"277":1}}],["更统一",{"2":{"10":1}}],["储存可以设置图片文件储存的具体位置",{"2":{"400":1}}],["储存是如何运作的",{"0":{"400":1}}],["储存是兰空图床中重要的组成部分之一",{"2":{"399":1}}],["储存管理",{"0":{"399":1},"1":{"400":1,"401":1,"402":1,"403":1}}],["储存则代表第三方对象储存",{"2":{"325":1}}],["储存策略",{"2":{"301":1}}],["储存策略简介",{"0":{"275":1},"1":{"276":1,"277":1}}],["储存",{"0":{"103":1,"263":1,"288":1,"295":1},"2":{"324":1,"325":1}}],["储存文件夹",{"2":{"60":1}}],["储存的特殊说明",{"0":{"46":1,"270":1},"1":{"47":1,"48":1,"49":1,"50":1,"271":1,"272":1,"273":1,"274":1}}],["储存名称",{"2":{"44":1,"277":1}}],["储存驱动适配好以后",{"2":{"44":1,"277":1}}],["密码",{"2":{"44":1,"277":1}}],["=>",{"2":{"44":6,"277":6}}],["=",{"2":{"44":6,"53":1,"78":1,"87":1,"208":3,"231":1,"277":6,"297":1,"388":1}}],["访问前缀不仅起到了上述作用",{"2":{"401":1}}],["访问前缀是什么",{"0":{"401":1}}],["访问站点",{"2":{"247":1}}],["访问站点显示",{"0":{"92":1,"250":1,"280":1}}],["访问地址",{"2":{"44":1,"277":1}}],["访问密码为",{"2":{"4":1}}],["增加滤镜",{"2":{"296":1}}],["增加原文件名命名规则",{"2":{"177":1}}],["增加获取图片列表和删除图片的接口",{"2":{"174":1}}],["增加远程储存",{"2":{"174":1}}],["增加公告功能",{"2":{"174":1}}],["增加图片搜索支持",{"2":{"176":1}}],["增加图片粘贴上传功能",{"2":{"172":1}}],["增加图片自定义额外参数功能",{"2":{"163":1}}],["增加文件别名功能",{"2":{"172":1}}],["增加单用户站点模式",{"2":{"163":1}}],["增加八位数随机字符串命名规则",{"2":{"159":1}}],["增加一项配置",{"2":{"104":1,"105":1,"264":1}}],["增加一个枚举常量",{"2":{"44":1,"277":1}}],["增加一个枚举类",{"2":{"44":1,"277":1}}],["增加",{"2":{"44":1,"163":4,"277":1}}],["增删改查等",{"2":{"44":1,"277":1}}],["现在我们通过访问",{"2":{"401":1}}],["现在我们假设我们的站点根目录为",{"2":{"309":1}}],["现在我们假设你的驱动器名称为",{"2":{"44":1,"277":1}}],["现在已经获取到阿里云oss储存策略需要的全部配置了",{"2":{"149":1}}],["现在的版本使用了",{"2":{"10":1}}],["首页",{"2":{"247":1}}],["首页增加鼠标悬浮链接提示对应的图片",{"2":{"176":1}}],["首先我们必须创建一个新的站点",{"2":{"309":1}}],["首先你需要前往",{"2":{"269":1}}],["首先你需要有一定的",{"2":{"44":1,"277":1}}],["首先需要打开新服务器的",{"2":{"87":1}}],["首次加载通过",{"2":{"11":1}}],["键进入编辑模式",{"2":{"84":1,"332":1}}],["键",{"2":{"43":1,"276":1}}],["按钮下载最新的安装包",{"2":{"406":1}}],["按钮不起作用",{"0":{"100":1,"260":1,"285":1}}],["按比例调整图像大小",{"2":{"357":1}}],["按照惯例",{"2":{"295":1,"401":1}}],["按顺序发件如果出现错误",{"2":{"293":1}}],["按",{"2":{"84":1,"332":1}}],["按键",{"2":{"75":1}}],["按住",{"2":{"43":1,"276":1}}],["按步骤将打包后的静态文件",{"2":{"13":1}}],["鼠标单击可直接选择",{"2":{"43":1,"276":1}}],["鼠标按住后拖动可以切换位置",{"2":{"25":1}}],["如转换格式",{"2":{"396":1}}],["如没有特殊情况",{"2":{"153":1}}],["如图",{"2":{"148":1}}],["如下所列",{"2":{"384":1}}],["如下图",{"2":{"148":1}}],["如下图所示",{"2":{"83":1,"84":1}}],["如下",{"2":{"79":1}}],["如何使用云处理",{"0":{"352":1}}],["如何监视您的进程",{"2":{"312":1,"394":1}}],["如何迁移",{"0":{"304":1},"1":{"305":1,"306":1}}],["如何修改请问度娘",{"2":{"114":1}}],["如何修改",{"0":{"108":1,"267":1}}],["如何增加统计代码",{"0":{"107":1,"266":1}}],["如何设置",{"2":{"79":1}}],["如何设置归属角色组",{"0":{"43":1,"276":1}}],["如何自定义一个储存",{"0":{"44":1,"277":1}}],["如果我们在站点根目录上传一张图片",{"2":{"401":1}}],["如果它们失败",{"2":{"394":1}}],["如果",{"2":{"393":1}}],["如果选择了",{"2":{"356":1}}],["如果选择了叠加",{"2":{"26":1}}],["如果配置后未生效",{"2":{"353":1}}],["如果有设置",{"2":{"333":1}}],["如果目标服务器的站点目录与旧服务器的目录结构不同",{"2":{"329":1}}],["如果安装失败",{"2":{"322":1}}],["如果应用代码被攻击者利用",{"2":{"312":1}}],["如果图片较大",{"2":{"298":1}}],["如果无法解决兼容性问题",{"2":{"278":1}}],["如果出现不兼容及软件错误的情况",{"2":{"278":1}}],["如果在线升级失败",{"2":{"269":1}}],["如果旧版本使用的是本地图片",{"2":{"239":1}}],["如果程序出现了崩溃级别的异常",{"2":{"234":1}}],["如果更新出现错误",{"2":{"174":1}}],["如果不加访问协议",{"2":{"149":1}}],["如果不删除符号链接",{"2":{"86":1}}],["如果域名不加",{"2":{"113":1}}],["如果单个js文件不满足需求",{"2":{"107":1}}],["如果确认正确请尝试重启",{"2":{"92":1,"250":1,"280":1}}],["如果进程无法启动",{"2":{"83":1}}],["如果没有任何输出则表示没有安装",{"2":{"397":1}}],["如果没有安装",{"2":{"309":1}}],["如果没有则表示错误并不是发生在程序中",{"2":{"101":1,"261":1,"286":1}}],["如果没有该文件可以将",{"2":{"80":1}}],["如果没有需要自行编译安装",{"2":{"78":1}}],["如果存在多个限定符",{"2":{"76":1}}],["如果你不是开发人员",{"2":{"269":1}}],["如果你不是开发者",{"2":{"244":1}}],["如果你希望在新版本发布时得到通知",{"2":{"268":1}}],["如果你的图片量很多",{"2":{"238":1}}],["如果你的数据量较大",{"2":{"235":1}}],["如果你的旧版本使用的是本地储存",{"2":{"235":1}}],["如果你的对象储存oss绑定了自定义cdn域名",{"2":{"149":1}}],["如果你觉得可能遇到了错误",{"2":{"234":1}}],["如果你使用了云服务集成面板",{"2":{"388":1}}],["如果你使用了",{"2":{"100":1,"260":1,"285":1}}],["如果你使用了本地的储存策略",{"2":{"89":1}}],["如果你使用的是本地储存",{"2":{"248":1}}],["如果你使用的是本地储存策略",{"2":{"235":1}}],["如果你使用的",{"2":{"36":1,"224":1}}],["如果你是直接覆盖旧版本",{"2":{"60":1}}],["如果是外网",{"2":{"50":1,"274":1}}],["如果使用第三方储存",{"2":{"236":1}}],["如果使用内网",{"2":{"50":1,"274":1}}],["如果使用子账户",{"2":{"49":1,"273":1}}],["如果使用子用户",{"2":{"33":1,"221":1}}],["如果使用",{"2":{"48":1,"196":1,"272":1}}],["如果使用了",{"2":{"40":1,"240":1}}],["如果套餐设置了有效期",{"2":{"26":1}}],["如果显示",{"2":{"16":1,"339":1}}],["如果您修改了该文件位置",{"2":{"331":1}}],["如果您需要使用",{"2":{"309":1}}],["如果您现在正在使用兰空图床付费版本",{"2":{"300":1}}],["如果您有处理较大图片的需求",{"2":{"297":1}}],["如果您准备好了",{"2":{"291":1}}],["如果您在安装或使用过程中遇到实在无法解决的问题",{"2":{"291":1}}],["如果您没有收到邮件",{"2":{"291":1}}],["如果您已经购买了兰空图床付费版本",{"2":{"291":1}}],["如果您还没有购买",{"2":{"290":1}}],["如果您继续使用本软件",{"2":{"278":1}}],["如果您认可我的作品",{"2":{"198":1,"233":1}}],["如果您使用了服务器控制面板",{"2":{"332":1}}],["如果您使用了本地的储存",{"2":{"300":1}}],["如果您使用了本地储存",{"2":{"62":1,"330":1,"333":1}}],["如果您使用的是",{"2":{"331":2,"332":2}}],["如果您使用",{"2":{"330":1}}],["如果您使用控制面板进行操作",{"2":{"308":1}}],["如果您使用上述的方式运行队列",{"2":{"83":1}}],["如果您的单表数据量非常大",{"2":{"76":1}}],["如果您想开发自己的主题",{"2":{"11":1}}],["如果您希望原站点中的前端禁止访问",{"2":{"8":1}}],["如果您希望将前后端分开独立部署",{"2":{"5":1}}],["位置",{"2":{"42":1,"242":1}}],["ymd",{"2":{"403":1}}],["yellowgreen",{"2":{"386":1}}],["yellow",{"2":{"386":1}}],["yum",{"2":{"309":1,"398":1}}],["yaml",{"2":{"237":1}}],["yarnnpm",{"2":{"12":2}}],["your",{"2":{"278":1,"319":2}}],["you",{"0":{"91":1,"249":1},"2":{"78":1,"87":1,"278":2}}],["y",{"2":{"42":1,"52":1,"145":1,"229":1,"242":1,"362":2,"363":1,"403":2}}],["有可能会因为外键约束这个特性造成了部分数据表丢失的情况",{"2":{"331":1}}],["有时候你还可能需要删除镜像和储存卷",{"2":{"322":1}}],["有关更多信息",{"2":{"367":1}}],["有关",{"2":{"294":1,"395":1,"398":1}}],["有些第三方储存通过客户端直传后程序拿不到需要的数据",{"2":{"95":1,"255":1,"282":1}}],["有一定的了解",{"2":{"44":1,"277":1}}],["有一个平铺的选项",{"2":{"42":1,"242":1}}],["有效时长",{"2":{"26":1}}],["有效时间",{"2":{"26":1}}],["水印",{"2":{"326":1,"402":1}}],["水印等",{"2":{"326":1}}],["水印等等",{"2":{"324":1}}],["水印图片如何配置",{"2":{"180":1}}],["水印图片文件绝对路径",{"2":{"179":1}}],["水印文字",{"2":{"178":1}}],["水印无法处理等异常情况",{"2":{"84":1}}],["水印平铺",{"2":{"52":1,"229":1}}],["水印除了支持九种固定位置外",{"2":{"42":1,"242":1}}],["水印位置",{"0":{"42":1,"242":1},"2":{"178":1,"179":1}}],["水印支持的图片格式",{"0":{"41":1,"241":1}}],["水印配置",{"0":{"40":1,"240":1},"1":{"41":1,"42":1,"241":1,"242":1}}],["加密分享功能",{"2":{"324":1}}],["加鼠标左键可以多选",{"2":{"43":1,"276":1}}],["加上合成水印时所使用的字体文件或图片",{"2":{"40":1,"240":1,"297":1}}],["加签方式选择第二项",{"2":{"17":1,"340":1}}],["甚至更高",{"2":{"297":1}}],["甚至可以设置为系统目录",{"2":{"400":1}}],["甚至可以这样",{"2":{"140":1}}],["甚至可以直接替换整个前端",{"2":{"10":1}}],["甚至上传失败",{"0":{"116":1}}],["甚至会有可能达到",{"2":{"40":1,"240":1,"297":1}}],["但最低版本要求必须为",{"2":{"391":1}}],["但如果图像较小",{"2":{"367":1}}],["但缺点就是异步不支持自定义图片输出格式",{"2":{"298":1}}],["但还是会尽量说明",{"2":{"291":1}}],["但依旧是一个可用且功能强大的系统",{"2":{"290":1}}],["但默认情况下使用的是文件缓存",{"2":{"214":1}}],["但不能保证与所有的软硬件系统完全兼容",{"2":{"278":1}}],["但不对其完整性",{"2":{"278":1}}],["但不会提醒有新版本发布",{"2":{"109":1,"268":1}}],["但不要和其他常量值重复",{"2":{"44":1,"277":1}}],["但会创建文件记录",{"2":{"96":1,"256":1,"283":1}}],["但是需要注意",{"2":{"400":1}}],["但是不能不创建",{"2":{"317":1}}],["但是这个命令在我们关闭",{"2":{"312":1}}],["但是由于集成环境软件存在多个不同版本的",{"2":{"308":1}}],["但是我们在",{"2":{"300":1}}],["但是作者我用了亿点时间写了迁移脚本",{"2":{"235":1}}],["但是如果你的图床开启了原图保护功能",{"2":{"215":1}}],["但是在升级页面监测到新版本后",{"2":{"110":1}}],["但是请注意",{"2":{"104":1,"264":1}}],["但是注意",{"2":{"83":1,"106":1,"265":1}}],["但是旧的图片不会被删除",{"2":{"26":1}}],["但在功能和定位上是完全不同的",{"2":{"51":1}}],["但通常情况下",{"2":{"40":1,"240":1,"297":1}}],["图片在边框内缩小",{"2":{"380":1}}],["图片安全",{"2":{"325":1,"333":1}}],["图片安全审核在图片处理之前",{"2":{"298":1}}],["图片安全审核",{"2":{"298":1,"326":1}}],["图片云处理服务",{"2":{"324":1}}],["图片保存质量取值范围为",{"2":{"299":1}}],["图片保存质量",{"0":{"299":1}}],["图片处理驱动",{"2":{"402":1}}],["图片处理以及发送邮件等等功能中",{"2":{"312":1}}],["图片处理会在图片上传那一刻处理",{"2":{"298":1}}],["图片处理支持同步或异步",{"2":{"298":1}}],["图片处理",{"0":{"296":1},"1":{"297":1,"298":1,"299":1},"2":{"298":1}}],["图片本身就不是非常大的文件",{"2":{"282":1}}],["图片可以分发到多个储存吗",{"0":{"252":1}}],["图片数据",{"2":{"235":1}}],["图片软删除",{"2":{"195":1}}],["图片鉴黄功能",{"2":{"195":1}}],["图片鉴黄分为三个级别",{"2":{"129":1}}],["图片链接额外参数",{"2":{"192":1}}],["图片水印配置说明",{"0":{"179":1}}],["图片水印以平铺的方式合成到图片中",{"2":{"42":1,"242":1}}],["图片最大上传限制兼容",{"2":{"164":1}}],["图片名称不会改变的",{"2":{"157":1}}],["图片广场",{"2":{"155":1,"229":1}}],["图片广场功能",{"2":{"52":1,"326":1}}],["图片是优先上传到你的服务器",{"2":{"116":1}}],["图片上传失败",{"0":{"112":1}}],["图片管理程序",{"2":{"323":1}}],["图片管理为什么不能批量删除",{"0":{"251":1}}],["图片管理中也出现了图片",{"0":{"96":1,"256":1,"283":1}}],["图片管理功能",{"0":{"75":1}}],["图片缩略图文件夹",{"2":{"60":1}}],["图片",{"2":{"40":1,"52":1,"240":1,"297":1,"301":1,"326":1}}],["图片审核等功能",{"2":{"52":1,"229":1}}],["图片审核",{"0":{"30":1,"218":1},"1":{"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1},"2":{"52":1}}],["jsdelivr",{"2":{"164":1,"234":1}}],["js",{"2":{"86":1,"107":3,"115":2,"266":3}}],["json",{"2":{"4":2,"6":4,"11":2,"53":1,"231":1}}],["javascript",{"2":{"60":1,"86":1}}],["jpg|jpeg|webp|avif|bmp|gif|png|tif|tiff|jp2|j2k|jpf|jpm|jpg2|j2c|jpc|jpx|heic|heif",{"2":{"310":1}}],["jpg文件进行修改",{"2":{"190":1}}],["jpg",{"2":{"41":1,"144":1,"146":1,"241":1,"355":2,"356":1,"358":1,"359":1,"360":1,"361":1,"362":2,"363":1,"364":1,"365":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"377":1,"380":1,"381":2,"382":3,"383":1}}],["jpeg",{"2":{"40":1,"41":1,"144":1,"240":1,"241":1,"297":1,"382":1,"396":1}}],["选项使用",{"2":{"358":1}}],["选项",{"2":{"40":1}}],["选择不同的驱动类型则需要填写不同的配置信息",{"2":{"400":1}}],["选择阿里云oss",{"2":{"149":1}}],["选择了none表示不验证",{"2":{"132":1}}],["选择你的自定义储存策略进行配置",{"2":{"44":1,"277":1}}],["选择后会直接在上传的原始图片上加上水印",{"2":{"40":1}}],["选择支付宝",{"2":{"21":1}}],["选择",{"2":{"15":1,"23":1,"338":1,"348":1}}],["覆盖原图",{"2":{"40":1}}],["这两个都是必须要安装的",{"2":{"396":1}}],["这对水印和边框等功能很有帮助",{"2":{"383":1}}],["这使得在各种设备上以正确的像素密度显示图像成为可能",{"2":{"368":1}}],["这使得我们可以轻松的在程序中适配多种不同厂家的对象储存",{"2":{"324":1}}],["这个时候需要您去登录程序后台",{"2":{"333":1}}],["这个操作等待时间可能会比较漫长",{"2":{"106":1,"265":1}}],["这意味着现在的兰空图床具备更高的可拓展性",{"2":{"325":1}}],["这意味着",{"2":{"322":1}}],["这样的进程管理工具",{"2":{"312":1}}],["这样会导致你无法访问网站",{"2":{"140":1}}],["这就会导致两种环境",{"2":{"308":1}}],["这可能导致上传图片的耗时更长",{"2":{"298":1}}],["这可能会占用大量内存",{"2":{"297":1}}],["这些拓展大部分都是已经安装并启用了的",{"2":{"388":1}}],["这些被禁用的函数中就包含一些程序运行时必要的函数",{"2":{"388":1}}],["这些通常需要映射到宿主机",{"2":{"317":1}}],["这些耗时任务都需要使用消息队列来执行",{"2":{"312":1}}],["这些内容",{"2":{"278":1}}],["这些可能在某些文件管理程序中被隐藏",{"2":{"86":1,"248":1}}],["这里指的是使用",{"2":{"312":1}}],["这里记录并解释一些常见的问题",{"2":{"279":1}}],["这里只表述需要注意的事项以及站点文件复制到另一个环境以后的操作",{"2":{"248":1}}],["这里有一份兰空图床实现的又拍云适配器",{"2":{"44":1,"277":1}}],["这次更新为",{"2":{"153":1}}],["这时候的实际文件路径为",{"2":{"401":1}}],["这时候您需要找到",{"2":{"388":1}}],["这时候在去",{"2":{"110":1}}],["这时候就可以在储存策略添加表单中",{"2":{"44":1,"277":1}}],["这与浏览器限制有关",{"2":{"97":1,"257":1,"284":1}}],["这是使用两个偏移百分比定义的",{"2":{"362":1}}],["这是因为图片鉴黄接口的服务器在国外",{"2":{"116":1}}],["这是由于服务器开启了防火墙",{"2":{"115":1}}],["这是",{"0":{"96":1,"256":1,"283":1}}],["这是理想的状态下",{"2":{"40":1,"240":1,"297":1}}],["这破坏了系统中很多业务流程",{"2":{"93":1,"253":1}}],["这将会占用大量内存",{"2":{"40":1,"240":1}}],["这将可能占用大量的内存使用",{"2":{"40":1,"240":1}}],["这种图片一旦使用复杂的处理规则",{"2":{"297":1}}],["这种图片一旦通过合成水印",{"2":{"40":1,"240":1}}],["这种情况下就可能会造成很多小伙伴在配置消息队列时非常困惑",{"2":{"308":1}}],["这种情况通常是因为你的程序正在从",{"2":{"102":1,"262":1,"287":1}}],["这种情况是因为运行环境接管图片资源导致的",{"2":{"99":1,"259":1}}],["这种负载压力在图片请求量",{"2":{"29":1,"214":1}}],["h=333",{"2":{"365":1}}],["h=300",{"2":{"360":1,"361":1,"362":2,"367":1}}],["h=500",{"2":{"358":1,"359":1}}],["h",{"2":{"355":1,"357":1,"359":1,"383":1}}],["hub",{"2":{"322":1}}],["hardware",{"2":{"278":1}}],["hash",{"2":{"388":1}}],["has",{"2":{"278":1}}],["hacker",{"2":{"278":1}}],["have",{"0":{"91":1,"249":1},"2":{"278":1}}],["hotpink",{"2":{"386":1}}],["honeydew",{"2":{"386":1}}],["home",{"2":{"208":1}}],["host",{"2":{"208":2,"287":2}}],["hostport",{"0":{"187":1}}],["hostname",{"0":{"184":1}}],["host=127",{"2":{"88":2,"217":1,"332":1}}],["host=redis",{"2":{"61":1,"80":1,"216":1}}],["host=数据库连接地址",{"2":{"61":1}}],["height",{"2":{"363":1}}],["held",{"2":{"278":1}}],["header",{"2":{"102":1,"174":1,"208":7,"262":1,"287":6,"351":1}}],["heads",{"2":{"64":1,"68":1}}],["hentai",{"2":{"38":1,"226":1}}],["httpd",{"2":{"312":4}}],["http",{"0":{"102":1,"262":1,"287":1},"2":{"44":1,"47":1,"61":1,"80":1,"113":2,"174":1,"208":2,"271":1,"277":1,"287":1,"319":1,"321":1,"322":1,"344":2,"353":1,"401":3}}],["https=true",{"2":{"203":1}}],["https前提条件是你的域名正确的配置了ssl证书",{"2":{"149":1}}],["https",{"0":{"102":1,"262":1,"287":1},"2":{"11":1,"14":1,"31":1,"34":1,"37":1,"44":1,"61":1,"64":1,"68":1,"78":1,"80":1,"87":1,"97":2,"102":1,"113":2,"119":1,"149":1,"194":2,"197":1,"219":1,"222":1,"225":1,"230":1,"234":1,"244":1,"257":2,"262":1,"268":1,"269":1,"277":1,"284":2,"287":1,"297":1,"337":1}}],["html",{"2":{"6":1,"11":1,"115":1,"126":1,"174":1,"209":1,"358":1,"359":1,"360":1,"361":1,"362":2,"363":1,"364":1,"365":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"380":1,"381":1,"382":1,"383":1}}],["你需要自己移动物理文件",{"2":{"235":1}}],["你需要使用",{"2":{"38":1,"44":1,"226":1,"277":1}}],["你应该先准备好你的问题",{"2":{"234":1}}],["你也可以将它设置为",{"2":{"297":1}}],["你也可以在域名前加上协议",{"2":{"149":1}}],["你也可以通过点击输入框右下角的",{"2":{"76":1}}],["你申请的图片鉴黄接口key",{"2":{"128":1}}],["你的服务器如果是在中国大陆",{"2":{"116":1}}],["你可以前往",{"2":{"234":1}}],["你可以将它作为自己的云上相册",{"2":{"228":1}}],["你可以通过在",{"2":{"108":1,"267":1}}],["你可以通过执行命令",{"2":{"106":1,"265":1}}],["你可以看到所有储存策略都是通过这个方法进行实例化的",{"2":{"44":1,"277":1}}],["你只需要按照",{"2":{"44":1,"277":1}}],["你自建的审核接口地址",{"2":{"38":1,"226":1}}],["该储存中的图片都可以使用云处理",{"2":{"352":1}}],["该背景图可以通过替换public",{"2":{"190":1}}],["该问题可能会导致站点图片被恶意跨用户删除",{"2":{"166":1}}],["该值修改后",{"2":{"147":1}}],["该配置已经移动至环境变量",{"2":{"130":1}}],["该文件下有个配置项名为",{"2":{"130":1}}],["该枚举由你的储存需要的配置而定",{"2":{"44":1,"277":1}}],["该项目地址",{"2":{"37":1,"225":1}}],["该用户容量会增加",{"2":{"26":1}}],["子配置文件",{"2":{"83":1}}],["子文件夹",{"2":{"79":1,"246":1,"248":1}}],["子用户",{"2":{"36":1,"224":1}}],["子套餐",{"2":{"26":1}}],["深圳",{"2":{"36":1,"224":1}}],["机器审核",{"2":{"35":1,"223":1}}],["业务场景对应内容安全控制台中的",{"2":{"35":1,"223":1}}],["业务场景",{"0":{"35":1,"223":1},"2":{"35":1,"223":1}}],["lnmpa",{"2":{"387":1}}],["lnmp",{"2":{"387":1}}],["lemonchiffon",{"2":{"386":1}}],["left",{"2":{"361":4}}],["legality",{"2":{"278":1}}],["l",{"2":{"329":2,"397":1}}],["lavenderblush",{"2":{"386":1}}],["lavender",{"2":{"386":1}}],["lawngreen",{"2":{"386":1}}],["laws",{"2":{"278":2}}],["law",{"2":{"278":2}}],["lang=",{"2":{"177":1}}],["layouts",{"2":{"107":1}}],["large",{"2":{"101":1,"261":1,"286":1}}],["laravel",{"0":{"199":1},"1":{"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1},"2":{"0":1,"5":1,"10":1,"11":1,"44":2,"74":1,"102":1,"199":1,"262":1,"277":2,"287":1,"323":1,"331":1,"387":1}}],["losses",{"2":{"278":7}}],["logo",{"2":{"376":1}}],["logfile",{"2":{"83":2,"209":2}}],["logfile=",{"2":{"83":2,"312":1,"394":1}}],["log",{"2":{"83":2,"99":2,"208":8,"259":2,"312":1,"394":1}}],["logs文件夹下找到错误日志",{"2":{"101":1,"261":1}}],["logs",{"2":{"83":2,"234":1,"286":1,"312":1,"317":2,"319":2,"322":1,"394":1}}],["localhost",{"2":{"319":1,"321":1,"322":1,"401":3}}],["locate",{"2":{"178":1,"179":1}}],["location",{"2":{"79":1,"99":1,"208":5,"246":1,"259":1,"310":2}}],["lock",{"2":{"60":2,"269":1}}],["limegreen",{"2":{"386":1}}],["lime",{"2":{"386":1}}],["limit",{"2":{"297":3}}],["limited",{"2":{"278":1}}],["lightyellow",{"2":{"386":1}}],["lightsteelblue",{"2":{"386":1}}],["lightslategray",{"2":{"386":1}}],["lightskyblue",{"2":{"386":1}}],["lightseagreen",{"2":{"386":1}}],["lightsalmon",{"2":{"386":1}}],["lightpink",{"2":{"386":1}}],["lightgreen",{"2":{"386":1}}],["lightgray",{"2":{"386":1}}],["lightgoldenrodyellow",{"2":{"386":1}}],["lightcyan",{"2":{"386":1}}],["lightcoral",{"2":{"386":1}}],["lightblue",{"2":{"386":1}}],["livewire",{"2":{"310":1}}],["libsqlite3",{"2":{"309":1}}],["libwebp",{"2":{"64":1}}],["linen",{"2":{"386":1}}],["link",{"2":{"332":1}}],["links",{"2":{"278":1}}],["linux",{"2":{"84":1,"392":1,"393":1}}],["liabilities",{"2":{"278":2}}],["liable",{"2":{"278":2}}],["license",{"2":{"197":1,"278":1}}],["listen",{"2":{"208":2,"310":2}}],["list",{"2":{"64":2,"78":1,"87":1}}],["lsky",{"0":{"194":1,"307":1,"323":1},"1":{"195":1,"196":1,"197":1,"198":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"324":1,"325":1,"326":1},"2":{"55":1,"56":1,"62":1,"83":6,"84":2,"89":1,"104":1,"106":1,"119":1,"194":2,"197":1,"198":1,"209":2,"228":1,"230":1,"233":1,"234":2,"244":2,"265":1,"268":2,"269":2,"309":3,"312":3,"316":1,"319":3,"321":1,"322":4,"323":1,"330":3,"331":1,"332":1,"394":2,"395":1}}],["lvwang",{"2":{"34":1,"222":1}}],["权限组改为",{"2":{"248":1}}],["权限改为",{"2":{"79":1,"246":1}}],["权限",{"2":{"33":1,"36":1,"221":1,"224":1}}],["qa",{"2":{"397":1}}],["q=25",{"2":{"381":1}}],["q",{"2":{"357":1}}],["qq",{"2":{"321":1}}],["query",{"0":{"192":1}}],["queue=emails",{"2":{"83":2}}],["queue",{"2":{"83":3,"312":3,"392":6,"393":1,"394":3}}],["quot",{"2":{"26":2,"177":2}}],["qcloudaccessfortcsrole",{"2":{"49":1,"273":1}}],["qcloudaccessfortcrrole",{"2":{"49":1,"273":1}}],["qcloudaccessfordsgcrole",{"2":{"49":1,"273":1}}],["qcloudaccessforcsgrole",{"2":{"49":1,"273":1}}],["qcloudcosreadonlyaccess",{"2":{"49":1,"273":1}}],["qcloudcosmetaaccmgmt",{"2":{"49":1,"273":1}}],["qcloudcoslistonly",{"2":{"49":1,"273":1}}],["qcloudcosfullaccess",{"2":{"49":1,"273":1}}],["qcloudcosdatawriteonly",{"2":{"49":1,"273":1}}],["qcloudcosdatareadonly",{"2":{"49":1,"273":1}}],["qcloudcosdatafullcontrol",{"2":{"49":1,"273":1}}],["qcloudimsreadonlyaccess",{"2":{"33":1,"221":1}}],["qcloudimsfullaccess",{"2":{"33":1,"221":1}}],["请查阅",{"2":{"395":1,"398":1}}],["请谨慎选择支持参数",{"2":{"356":1}}],["请谨慎使用模糊匹配筛选数据",{"2":{"76":1}}],["请务必正确填写配置后执行",{"2":{"322":1}}],["请执行安装命令安装",{"2":{"309":1}}],["请确保您已经阅读过前面的环境要求章节",{"2":{"308":1}}],["请在收到邮件后下载该安装包",{"2":{"291":1}}],["请在升级完成以后编辑本地储存策略",{"2":{"269":1}}],["请在升级之前备份该数据库文件",{"2":{"269":1}}],["请在升级前做好备份",{"2":{"62":1}}],["请保证新的环境满足兰空图床的运行要求",{"2":{"248":1}}],["请使用安装时设置的管理员账号登录新版本网站",{"2":{"239":1}}],["请填写你所绑定的域名",{"2":{"149":1}}],["请选择",{"2":{"149":1}}],["请参见",{"2":{"367":1}}],["请参考安装章节",{"2":{"305":1}}],["请参考环境变量章节",{"2":{"130":1}}],["请参考",{"2":{"119":1}}],["请参阅",{"2":{"91":1,"249":1}}],["请修改",{"2":{"114":1}}],["请仔细按照文档中描述的进行配置",{"2":{"112":1}}],["请尝试手动访问",{"2":{"174":1}}],["请尝试增加反向代理配置",{"2":{"102":1,"262":1,"287":1}}],["请尝试解禁",{"2":{"83":1}}],["请稍后重试",{"0":{"101":1,"261":1,"286":1}}],["请检查邮件垃圾箱",{"2":{"291":1}}],["请检查新环境中",{"2":{"111":1}}],["请检查是否未刷新",{"2":{"100":1,"260":1,"285":1}}],["请检查伪静态",{"2":{"92":1,"250":1,"280":1}}],["请更改",{"2":{"99":1,"259":1}}],["请不要忽略了这一步",{"2":{"334":1}}],["请不要忽略了这些文件",{"2":{"86":1,"248":1}}],["请不要将本地镜像上传至",{"2":{"322":1}}],["请不要泄露安装包",{"2":{"291":1}}],["请不要下载名为",{"2":{"269":1}}],["请不要下载名称为",{"2":{"244":1}}],["请不要视图",{"2":{"140":1}}],["请不要忘了在程序更新后手动重启队列",{"2":{"83":1}}],["请正确配置伪静态",{"2":{"79":1}}],["请先使用",{"2":{"67":1}}],["请删除",{"2":{"60":1,"248":1}}],["请注意备份该文件夹",{"2":{"269":1}}],["请注意",{"2":{"38":1,"226":1,"243":1}}],["请授予该账户以下权限",{"2":{"48":1,"49":1,"272":1,"273":1}}],["请授予该账户",{"2":{"33":1,"36":1,"221":1,"224":1}}],["请妥善保管",{"2":{"22":1,"345":1}}],["硅谷",{"2":{"33":1,"221":1}}],["美国西部",{"2":{"33":1,"221":1}}],["美国东部",{"2":{"33":1,"221":1}}],["\\tna",{"2":{"33":2,"221":2}}],["\\tap",{"2":{"33":5,"221":5}}],["弗吉尼亚",{"2":{"33":1,"221":1}}],["亚太东南",{"2":{"33":1,"221":1}}],["亚太南部",{"2":{"33":1,"221":1}}],["上安装",{"2":{"393":1}}],["上追加",{"2":{"356":1}}],["上层目录",{"2":{"180":1}}],["上述步骤完成以后",{"2":{"81":1}}],["上述",{"2":{"61":1}}],["上为",{"2":{"43":1,"276":1}}],["上海",{"2":{"33":1,"36":1,"221":1,"224":1}}],["上传完成后点击保存即可",{"2":{"345":1}}],["上传的公开文件目录",{"2":{"317":1}}],["上传的私有文件目录",{"2":{"317":1}}],["上传的图片若被判断为可疑图片则会直接拦截",{"2":{"130":1}}],["上传限制等",{"2":{"292":1}}],["上传预览",{"2":{"195":1}}],["上传时检测到违规的图片是否直接拦截",{"2":{"191":1}}],["上传已存在的文件直接返回图片地址",{"2":{"173":1}}],["上传接口返回",{"2":{"156":1}}],["上传每次可选择图片数量",{"2":{"143":1}}],["上传后安装包路径应该为",{"2":{"309":1}}],["上传后的链接不正确的",{"2":{"157":1}}],["上传后在可疑图片里",{"2":{"130":1}}],["上传后图片返回的",{"2":{"98":1,"258":1}}],["上传图片会通过鉴黄接口处理",{"2":{"127":1}}],["上传文件后提示",{"0":{"114":1}}],["上传失败有很多原因",{"2":{"101":1,"261":1,"286":1}}],["上传出现失败",{"0":{"101":1,"261":1,"286":1}}],["上传相同的图片",{"2":{"96":1,"256":1,"283":1}}],["上传到新服务器站点目录解压",{"2":{"88":1}}],["上传数量限制",{"2":{"27":1,"211":1}}],["上传频率限制",{"0":{"27":1,"211":1},"2":{"52":1,"229":1}}],["上传证书",{"0":{"22":1,"345":1}}],["上传成功后",{"2":{"20":1,"343":1}}],["孟买",{"2":{"33":1,"221":1}}],["广州",{"2":{"33":1,"221":1}}],["华南1",{"2":{"36":1,"224":1}}],["华南地区",{"2":{"33":1,"221":1}}],["华北2",{"2":{"36":1,"224":1}}],["华北地区",{"2":{"33":1,"221":1}}],["华东2",{"2":{"36":1,"224":1}}],["华东地区",{"2":{"33":1,"221":1}}],["北京",{"2":{"33":1,"36":1,"221":1,"224":1}}],["即本地",{"2":{"400":1}}],["即通过命令终端执行",{"2":{"392":1}}],["即图片的宽高设置为",{"2":{"355":1}}],["即使路径没有发生变化",{"2":{"333":1}}],["即站点的",{"2":{"310":1}}],["即表示您已阅读",{"2":{"278":1}}],["即为安装完成",{"2":{"69":1}}],["即",{"2":{"36":1,"180":1,"224":1,"332":1,"344":1,"350":1,"401":1}}],["即可访问站点首页",{"2":{"81":1}}],["即可将旧版本整站点文件夹以及文件删除",{"2":{"61":1}}],["即可",{"2":{"32":1,"113":1,"215":1,"220":1,"268":1}}],["即前后端分离架构",{"2":{"5":1}}],["固定为",{"2":{"32":1,"220":1}}],["申请地址",{"2":{"31":1,"34":1,"219":1,"222":1}}],["原理还是读取本地的文件",{"2":{"214":1}}],["原理还是从内存中读取二进制内容",{"2":{"29":1}}],["原始文件名称命名规则支持于其他规则组合使用",{"2":{"156":1}}],["原图保护功能指的是开启后",{"2":{"98":1,"258":1}}],["原图保护功能是什么",{"0":{"98":1,"258":1}}],["原图保护功能",{"2":{"52":1}}],["原图保护功能对服务器配置要求较高",{"2":{"29":1,"214":1}}],["原图保护的作用是隐藏图片的真实",{"2":{"29":1,"214":1}}],["原图保护",{"0":{"29":1,"214":1}}],["警告",{"2":{"29":1,"40":1,"214":1,"240":1,"322":1}}],["由于服务器所在地区可能无法直接访问我们的更新服务器",{"2":{"406":1}}],["由于云服务器的储存及带宽有限",{"2":{"324":1}}],["由于旧版本与新版本存在非常大的差异",{"2":{"300":1}}],["由于程序的特殊性",{"2":{"290":1}}],["由于程序使用了符号连接的方式实现其图片可以存在磁盘的任意位置",{"2":{"85":1}}],["由于",{"2":{"235":1,"308":1}}],["由于网络原因",{"2":{"110":1}}],["由于第三方储存的多样性",{"2":{"95":1,"255":1,"282":1}}],["由于兰空图床会在每次升级后安全退出队列进程",{"2":{"83":1}}],["由",{"2":{"29":1,"214":1}}],["接受",{"0":{"367":1},"2":{"358":1,"359":1,"361":1,"375":1}}],["接下来把安装包",{"2":{"406":1}}],["接下来执行命令生成符号链接",{"2":{"332":1}}],["接下来我们登录",{"2":{"309":1}}],["接下来要做的就是集成到兰空图床当中",{"2":{"44":1,"277":1}}],["接管",{"2":{"29":1,"214":1}}],["接口上传成功后返回更多的数据",{"2":{"177":1}}],["接口认证方式",{"2":{"164":1}}],["接口认为图片有一点点涉黄则会上传失败",{"2":{"129":1}}],["接口失效的",{"2":{"157":1}}],["接口增加刷新",{"2":{"152":1}}],["接口在墙外的原因",{"2":{"127":1}}],["接口支持设置权限",{"2":{"52":1}}],["接口",{"2":{"52":1,"139":1,"326":1,"396":1}}],["接口的文件属性名称",{"2":{"39":1,"227":1}}],["接口地址",{"0":{"38":1,"226":1},"2":{"6":1}}],["接口文档的",{"2":{"4":1}}],["接口文档",{"0":{"4":1}}],["开始迁移",{"0":{"238":1}}],["开始安装",{"0":{"81":1,"247":1,"311":1}}],["开发框架开发的一款",{"2":{"387":1}}],["开发",{"2":{"228":1}}],["开启鉴黄后",{"2":{"191":1}}],["开启鉴黄后图片上传很慢",{"0":{"116":1}}],["开启api",{"0":{"139":1}}],["开启图片鉴黄后会拖慢上传图片速度",{"2":{"127":1}}],["开启图片鉴黄",{"0":{"127":1}}],["开启原图保护功能后访问图片",{"0":{"99":1,"259":1}}],["开启后未登录情况下除了接口只能首页可以访问",{"2":{"190":1}}],["开启后将会开放站点的api接口",{"2":{"139":1}}],["开启后将会消耗更多的内存",{"2":{"98":1,"258":1}}],["开启后",{"2":{"127":1,"138":1}}],["开启后即关闭注册",{"2":{"120":1}}],["开启后请求该图片会通过",{"2":{"29":1,"214":1}}],["开启调试模式",{"2":{"88":1}}],["开头的配置",{"2":{"61":1}}],["开通电脑网站支付",{"0":{"16":1,"339":1}}],["路径",{"2":{"29":1,"214":1}}],["路由和视图",{"0":{"2":1}}],["提问的智慧",{"2":{"234":1}}],["提供更细粒度的样式控制",{"2":{"356":1}}],["提供的接口实现你的储存即可",{"2":{"44":1,"277":1}}],["提供了一个接口来与不同类型的文件系统进行交互",{"2":{"44":1,"277":1}}],["提示",{"2":{"29":1,"61":1,"62":1,"78":1,"84":1,"210":1,"214":1,"275":1,"388":1}}],["提高程序运行效率",{"2":{"0":1}}],["命令",{"2":{"392":1}}],["命令打开",{"2":{"332":1}}],["命令来运行消息队列",{"2":{"312":1}}],["命令来执行队列功能",{"2":{"53":1}}],["命令解压安装包",{"2":{"309":1}}],["命令进入站点根目录",{"2":{"309":1}}],["命令的解释在文档中不会详细说明",{"2":{"291":1}}],["命令行",{"2":{"83":1,"235":1}}],["命令行版本是否符合要求",{"2":{"78":1}}],["命令行配置",{"0":{"82":1},"1":{"83":1,"84":1},"2":{"62":1,"90":1}}],["命令输出并确认当前使用的",{"2":{"67":1}}],["命令查看并确认",{"2":{"78":1}}],["命令查看指定的图片格式是否支持",{"2":{"64":1}}],["命令查看所有支持的图片格式",{"2":{"64":1}}],["命令后脚本会自动处理需要移动",{"2":{"12":1}}],["命名规则",{"0":{"28":1,"212":1}}],["是一款免费的开源软件套件",{"2":{"396":1}}],["是一个独立的软件工具",{"2":{"396":1}}],["是一个使用",{"2":{"323":1}}],["是一个用于在线上传",{"2":{"228":1}}],["是一个全新的前后端分离架构",{"2":{"10":1}}],["是最接近原图片质量的",{"2":{"299":1}}],["是用来限制",{"2":{"245":1}}],["是能通过外网连接的",{"2":{"117":1}}],["是否启用了必要的函数等等",{"2":{"248":1}}],["是否启用水印功能",{"2":{"178":1,"179":1}}],["是否开启自动水印功能",{"2":{"193":1}}],["是否开启单用户站点模式",{"2":{"190":1}}],["是否开启性能分析",{"2":{"183":1}}],["是否开启",{"2":{"182":1}}],["是否开启游客上传",{"2":{"141":1}}],["是否开启了",{"2":{"117":1}}],["是否安装了",{"2":{"111":1}}],["是",{"2":{"96":1,"256":1,"283":1,"392":1,"393":1}}],["是通过输出特定的",{"2":{"351":1}}],["是通过命令行的方式启动应用程序",{"2":{"199":1}}],["是通过",{"2":{"93":1,"253":1}}],["是指七天之前到当前时间的这个范围内",{"2":{"27":1,"211":1}}],["是代表当前时间往前推这段时间内所上传的图片数量限制",{"2":{"27":1,"211":1}}],["每一个储存可以选择一个驱动",{"2":{"400":1}}],["每一个储存策略中的第一行的域名配置是什么意思",{"0":{"113":1}}],["每一个完整的步骤相当于",{"2":{"362":1}}],["每个储存都可以分别设置一个图片安全驱动",{"2":{"402":1}}],["每个角色组应该始终最少关联一个储存",{"2":{"295":1}}],["每个角色组可以关联多个储存",{"2":{"295":1}}],["每个组可以分别设置多个短信驱动",{"2":{"293":1}}],["每个策略的水印配置",{"2":{"180":1}}],["每月上传限制",{"2":{"27":1,"211":1}}],["每周上传限制",{"2":{"27":1,"211":1}}],["每天上传限制",{"2":{"27":1,"211":1}}],["每小时上传限制",{"2":{"27":1,"211":1}}],["每分钟上传限制",{"2":{"27":1,"211":1}}],["限制",{"2":{"164":1}}],["限制单张上传图片大小",{"2":{"142":1}}],["限制7天内最大上传数量",{"2":{"27":1,"211":1}}],["限制24小时内最大上传数量",{"2":{"27":1,"211":1}}],["限制一个月内最大上传数量",{"2":{"27":1,"211":1}}],["限制一小时内最大上传数量",{"2":{"27":1,"211":1}}],["限制一分钟内最大上传数量",{"2":{"27":1,"211":1}}],["限制上传时队列中同时上传图片数量的限制",{"2":{"27":1,"211":1}}],["并在",{"2":{"400":1}}],["并在上述第三步操作以后将数据库文件放置原位",{"2":{"269":1}}],["并支持多种文件格式",{"2":{"396":1}}],["并支持两种输出响应方式",{"2":{"351":1}}],["并监视所有进程",{"2":{"394":1}}],["并使用",{"2":{"387":1}}],["并裁剪任何多余的图像数据",{"2":{"360":1,"367":1}}],["并上传三份证书文件",{"2":{"345":1}}],["并将文件转移至目标服务器中的数据库或其他远程数据库",{"2":{"331":1}}],["并将程序的运行目录设置为",{"2":{"79":1}}],["并命名为",{"2":{"330":1}}],["并转而开发了收费版本",{"2":{"323":1}}],["并免费开源使用",{"2":{"198":1,"233":1}}],["并放到站点的根目录中",{"2":{"110":1}}],["并导入数据库",{"2":{"88":1}}],["并发上传优化",{"2":{"52":1}}],["并发上传限制",{"2":{"27":1,"211":1}}],["并对",{"2":{"44":1,"277":1}}],["并且这个符号链接指向的实际储存位置为",{"2":{"401":1}}],["并且不会保持输入图像的纵横比",{"2":{"367":1}}],["并且如果图像小于输出尺寸",{"2":{"367":1}}],["并且",{"2":{"353":1}}],["并且支付宝仅支持证书模式",{"2":{"335":1}}],["并且没有更改",{"2":{"332":1}}],["并且数据库是和站点是在同一个服务器中安装的",{"2":{"331":1}}],["并且在储存配置中",{"2":{"330":1}}],["并且系统只能设置一个游客组",{"2":{"210":1}}],["并且觉得对你有所帮助我愿意接受来自各方面的捐赠😃",{"2":{"198":1,"233":1}}],["并且可以通过",{"2":{"42":1,"242":1}}],["并且相同",{"2":{"28":1,"212":1}}],["并适配",{"2":{"38":1,"226":1}}],["并重命名为",{"2":{"11":1}}],["35",{"2":{"389":1}}],["3+",{"2":{"389":1}}],["3=右上角",{"2":{"178":1,"179":1}}],["38",{"2":{"175":1}}],["3版本开始",{"2":{"130":1}}],["30",{"2":{"173":1}}],["30d",{"2":{"99":1,"259":1,"353":1}}],["30w",{"2":{"76":1}}],["30mb",{"2":{"40":1,"240":1,"297":1}}],["3306",{"2":{"61":1}}],["3",{"0":{"88":1,"154":1,"176":1},"1":{"155":1,"156":1,"157":1},"2":{"52":1,"54":1,"196":1,"228":1,"229":1,"232":1,"385":1,"389":1}}],["3mb",{"2":{"40":1,"240":1,"297":1}}],["31536000",{"2":{"26":1}}],["3600",{"2":{"26":1}}],["季卡",{"2":{"26":1}}],["体验卡",{"2":{"26":1}}],["kodo",{"2":{"399":1}}],["khaki",{"2":{"386":1}}],["kayaks",{"2":{"355":2,"356":1,"358":1,"359":1,"360":1,"361":1,"362":2,"363":1,"364":1,"365":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"377":1,"380":1,"381":1,"382":1,"383":1}}],["killasgroup=true",{"2":{"312":1,"394":1}}],["kb",{"2":{"26":1,"164":1}}],["key",{"0":{"128":1},"2":{"24":1,"44":1,"62":2,"80":2,"277":1,"350":1}}],["价格",{"2":{"26":1}}],["秒",{"2":{"26":1}}],["名称+appid",{"2":{"49":1,"273":1}}],["名称",{"2":{"26":1,"357":1,"403":1}}],["下载源码",{"0":{"315":1},"2":{"291":1,"406":1}}],["下载完整的安装包",{"2":{"269":1}}],["下载正式版本请访问",{"2":{"244":1}}],["下载正式版本",{"0":{"244":1}}],["下载迁移脚本",{"2":{"237":1}}],["下载你的字体文件或水印图片放置到项目任意目录",{"2":{"180":1}}],["下载该补丁包后",{"2":{"110":1}}],["下载并解压",{"0":{"64":1,"68":1}}],["下载证书",{"0":{"20":1,"343":1}}],["下载证书生成软件",{"0":{"18":1,"341":1}}],["下列内容都是必填项",{"2":{"61":1}}],["下面是一个经典的阶梯价格示例",{"2":{"26":1}}],["此外",{"2":{"324":1,"330":1,"392":1}}],["此为未安装依赖的源码包",{"2":{"269":1}}],["此为核心源代码",{"2":{"244":1}}],["此次更新主要是为了静态文件放置本地",{"2":{"153":1}}],["此处填写的bucket域名填写的是对象储存默认的cdn域名",{"2":{"149":1}}],["此处不再赘述",{"2":{"83":1}}],["此选项默认开启",{"2":{"141":1}}],["此选项默认关闭",{"2":{"127":1,"138":1,"139":1}}],["此功能默认关闭",{"2":{"120":1}}],["此操作影响所有图片的缩略图地址",{"2":{"264":1}}],["此操作影响所以图片的缩略图地址",{"2":{"104":1}}],["此操作需要登录",{"2":{"82":1}}],["此步骤与安装教程中一致",{"2":{"62":1}}],["此时站点正常情况下已经可以访问了",{"2":{"62":1}}],["此时还差最后一步",{"2":{"62":1}}],["此时用户无法上传新的照片",{"2":{"26":1}}],["此常量值可以自定义",{"2":{"44":1,"277":1}}],["此教程不会详细的指导你如何实现该接口",{"2":{"44":1,"277":1}}],["此图片审核驱动需要自建",{"2":{"37":1,"225":1}}],["此文件夹是完整的前端工程文件",{"2":{"11":1}}],["此文件格式遵循",{"2":{"4":1}}],["购买后您会收到一封带有安装包下载链接的邮件",{"2":{"291":1}}],["购买后您将获得未加密的完整源码",{"2":{"290":1}}],["购买后不支持退款",{"2":{"290":1}}],["购买前请详细调研兰空图床生态",{"2":{"290":1}}],["购买",{"0":{"290":1}}],["购买的订阅失效后该用户可能会出现储存容量超出的情况",{"2":{"26":1}}],["购买新的套餐时",{"2":{"26":1}}],["会导致",{"2":{"298":1}}],["会导致响应速度过慢",{"2":{"251":1}}],["会出现新版本的升级信息",{"2":{"268":1}}],["会出现下图中的信息",{"2":{"69":1}}],["会以",{"2":{"213":1}}],["会以上一个套餐的结束时间作为新套餐的起始时间",{"2":{"26":1}}],["会增加图片上传的时间",{"2":{"116":1}}],["会同时显示一个补丁包的下载链接",{"2":{"110":1}}],["会将",{"2":{"388":1}}],["会将符号链接所指向的文件也打包进去",{"2":{"86":1}}],["会将文字",{"2":{"42":1,"242":1}}],["会造成系统频繁的处理图片",{"2":{"356":1}}],["会造成重定向冲突",{"2":{"118":1}}],["会造成",{"2":{"76":1}}],["会很容易导致内存溢出",{"2":{"40":1,"240":1,"297":1}}],["会自动切换为该角色组",{"2":{"26":1}}],["叠加或不叠加",{"2":{"26":1}}],["系统更新中检测新版本并在线升级",{"2":{"405":1}}],["系统套餐",{"2":{"301":1}}],["系统中可以创建多个储存",{"2":{"400":1}}],["系统中可以创建多个不同的角色组",{"2":{"293":1}}],["系统中的图片上传功能",{"2":{"294":1}}],["系统中的快捷方式",{"2":{"85":1,"401":1}}],["系统安装完成以后会默认创建一个默认的角色组",{"2":{"210":1}}],["系统不会保存原图",{"2":{"180":1}}],["系统公告",{"0":{"126":1}}],["系统升级",{"2":{"119":1}}],["系统则会在上传后自动追加",{"2":{"113":1}}],["系统图片上传的符号链接",{"2":{"86":1}}],["系统图片文件",{"2":{"86":1}}],["系统",{"2":{"86":1}}],["系统字体文件",{"2":{"86":1}}],["系统层叠式样式表",{"2":{"86":1}}],["系统所需要的图片文件夹",{"2":{"60":1}}],["系统控制",{"2":{"26":1}}],["系统设置",{"0":{"115":1},"2":{"11":1,"21":1,"26":1,"301":1,"405":1}}],["赠送容量",{"2":{"26":2}}],["单选多选",{"2":{"195":1,"229":1}}],["单次同时上传数量",{"0":{"143":1}}],["单位为像素",{"2":{"378":1}}],["单位",{"2":{"142":1,"164":1}}],["单个阶梯价格",{"2":{"26":1}}],["单页应用",{"2":{"11":1}}],["不带拓展名",{"2":{"403":1}}],["不过这是值得的",{"2":{"401":1}}],["不存在则自动创建",{"2":{"400":1}}],["不再拘泥于网页端",{"2":{"325":1}}],["不再使用第三方静态资源托管服务",{"2":{"153":1}}],["不仅如此",{"2":{"324":1}}],["不建议将保存质量设置超过",{"2":{"299":1}}],["不会增加上传耗时",{"2":{"298":1}}],["不影响其他条款的有效性和可执行性",{"2":{"278":1}}],["不能保证本产品完全没有错误",{"2":{"278":1}}],["不能",{"2":{"252":1}}],["不接受任何无厘头的提议",{"2":{"234":1}}],["不重复创建文件",{"2":{"173":1}}],["不删除图片文件",{"2":{"138":1}}],["不填则会默认使用站点域名",{"2":{"113":1}}],["不可以同时配置文字水印和图片水印",{"2":{"180":1}}],["不可以",{"2":{"94":1,"254":1,"281":1}}],["不是图片",{"2":{"93":1,"253":1}}],["不必担心会对第三方",{"2":{"75":1}}],["不需要额外处理",{"2":{"331":1}}],["不需要额外操作",{"2":{"12":1}}],["不需要重新创建",{"2":{"61":1}}],["不管是什么储存都是必须的",{"2":{"44":1,"277":1}}],["不支持安装拓展",{"2":{"243":1}}],["不支持加水印",{"2":{"93":1,"253":1}}],["不支持的数据库版本",{"2":{"91":1,"249":1}}],["不支持",{"2":{"41":1,"241":1}}],["不同的规则可以组合使用",{"2":{"28":1,"212":1}}],["不同购买不同的价格可以享受权利的时间",{"2":{"26":1}}],["不关联任何组",{"2":{"26":1}}],["阶梯价格",{"0":{"26":1}}],["主要功能",{"0":{"326":1}}],["主要特性",{"0":{"195":1,"325":1}}],["主要为介绍购买该套餐后可以享受哪些权利",{"2":{"25":1}}],["主题会以模板引擎渲染的方式实现混合部署",{"2":{"11":1}}],["主题是如何运作的",{"0":{"11":1},"2":{"13":1}}],["主题",{"0":{"10":1},"1":{"11":1,"12":1,"13":1}}],["667530e55196f",{"2":{"403":1}}],["6=右居中",{"2":{"178":1,"179":1}}],["65",{"2":{"174":1}}],["68",{"2":{"174":1}}],["63",{"2":{"174":1}}],["6379",{"2":{"61":1,"80":1}}],["69",{"2":{"172":1}}],["6+",{"2":{"52":1,"54":1,"229":1,"232":1}}],["60mb",{"2":{"297":1}}],["60",{"2":{"40":1,"240":1}}],["6",{"0":{"150":1,"154":1,"158":1,"162":1,"166":1,"171":1},"1":{"151":1,"152":1,"153":1,"155":1,"156":1,"157":1,"159":1,"160":1,"161":1,"163":1,"164":1,"165":1,"167":1,"168":1,"172":1,"173":1},"2":{"25":1,"111":1,"170":1,"196":1,"385":1}}],["建议范围为",{"2":{"362":1}}],["建议关闭旧版本网站",{"2":{"238":1}}],["建议阅读",{"2":{"234":1}}],["建议所有人更新至此版本",{"2":{"166":1}}],["建议",{"2":{"25":1}}],["和进程管理软件",{"2":{"398":1}}],["和消息队列",{"2":{"297":1}}],["和倾斜角度",{"2":{"180":1}}],["和",{"2":{"24":1,"44":1,"60":1,"108":1,"115":1,"199":1,"267":1,"269":1,"277":1,"308":1,"350":1,"359":1,"362":1,"383":1,"384":1,"389":1,"396":1,"399":1}}],["配置项",{"2":{"388":1}}],["配置云处理时推荐仅使用",{"2":{"356":1}}],["配置中即可",{"2":{"353":1}}],["配置完毕后",{"2":{"334":1}}],["配置站点运行目录以及伪静态",{"2":{"332":1}}],["配置站点访问协议",{"0":{"203":1}}],["配置消息队列",{"0":{"312":1,"334":1},"2":{"334":1}}],["配置示例",{"2":{"310":1}}],["配置伪静态",{"0":{"310":1}}],["配置好域名以后",{"2":{"247":1}}],["配置缓存",{"0":{"215":1},"1":{"216":1,"217":1}}],["配置环境变量",{"0":{"200":1},"1":{"201":1,"202":1,"203":1}}],["配置说明",{"0":{"181":1},"1":{"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1}}],["配置文件创建完毕以后",{"2":{"312":1}}],["配置文件通常存储在",{"2":{"312":1,"394":1}}],["配置文件的站点根目录应该设置为",{"2":{"310":1}}],["配置文件",{"2":{"130":1,"237":1}}],["配置文件中的数据库配置表示的是开源版本正在使用的数据库",{"2":{"61":1}}],["配置配置异步队列和计划任务",{"2":{"90":1}}],["配置异步队列和计划任务",{"0":{"90":1}}],["配置计划任务处理进程",{"0":{"84":1}}],["配置并启动进程",{"2":{"83":1,"395":1}}],["配置队列处理进程",{"0":{"83":1}}],["配置命令行",{"2":{"62":1}}],["配置及作用",{"2":{"27":1,"211":1}}],["配置",{"0":{"24":1,"349":1,"394":1},"2":{"301":1,"331":1,"353":1}}],["mydisk",{"2":{"400":2}}],["mysqli",{"2":{"164":1}}],["mysql",{"2":{"52":1,"54":1,"61":1,"77":1,"196":1,"229":1,"232":1,"309":2,"331":1,"387":2,"389":1,"391":1}}],["mnt",{"2":{"330":2,"400":2}}],["moccasin",{"2":{"386":1}}],["more",{"2":{"310":1}}],["module",{"2":{"353":1}}],["modified",{"2":{"278":1}}],["modifications",{"2":{"278":1}}],["modify",{"2":{"278":1}}],["mode",{"0":{"190":1}}],["models",{"2":{"44":1,"277":1}}],["must",{"2":{"278":1}}],["mumbai",{"2":{"33":1,"221":1}}],["mediumvioletred",{"2":{"386":1}}],["mediumturquoise",{"2":{"386":1}}],["mediumspringgreen",{"2":{"386":1}}],["mediumslateblue",{"2":{"386":1}}],["mediumseagreen",{"2":{"386":1}}],["mediumpurple",{"2":{"386":1}}],["mediumorchid",{"2":{"386":1}}],["mediumblue",{"2":{"386":1}}],["mediumaquamarine",{"2":{"386":1}}],["memory",{"2":{"297":4}}],["memcached",{"0":{"217":1},"2":{"215":1,"217":6,"229":1}}],["means",{"2":{"278":1}}],["me",{"2":{"230":1}}],["merge",{"2":{"44":1,"277":1}}],["merchant",{"2":{"23":1,"348":1}}],["mdui",{"2":{"176":1}}],["md5",{"2":{"157":1,"167":1,"177":1,"403":2}}],["mp4",{"0":{"94":1,"254":1,"281":1},"2":{"234":1}}],["m",{"2":{"78":1,"87":1,"145":1,"403":1}}],["microsoft",{"2":{"389":1}}],["mistyrose",{"2":{"386":1}}],["mintcream",{"2":{"386":1}}],["minio",{"0":{"50":1,"274":1},"2":{"44":1,"52":1,"229":1,"275":1,"277":1,"324":1,"399":2}}],["midnightblue",{"2":{"386":1}}],["mime",{"2":{"177":1}}],["migrate",{"2":{"62":1,"238":1,"269":1}}],["mbstring",{"2":{"53":1,"231":1,"388":1}}],["mb甚至更高",{"2":{"40":1,"240":1}}],["mariadb",{"2":{"389":1}}],["maroon",{"2":{"386":1}}],["magenta",{"2":{"386":1}}],["malicious",{"2":{"278":1}}],["may",{"2":{"278":2,"297":1}}],["managing",{"2":{"278":1}}],["map",{"2":{"208":1}}],["max",{"2":{"367":2}}],["maximum",{"0":{"114":1},"2":{"278":1,"297":1}}],["maxbytes=2mb",{"2":{"83":2,"209":2}}],["master",{"2":{"68":2,"197":1}}],["make",{"2":{"66":1,"69":2,"278":1}}],["main",{"2":{"64":2}}],["match",{"2":{"44":2,"277":2}}],["mac",{"2":{"43":1,"276":1}}],["mv",{"2":{"6":2}}],["文档",{"2":{"395":1,"398":1}}],["文档图片中处于沙盒环境",{"2":{"23":1,"348":1}}],["文字偏移量",{"2":{"180":1}}],["文字倾斜角度",{"2":{"178":1}}],["文字相对当前位置的偏移量",{"2":{"178":1}}],["文字水印配置说明",{"0":{"178":1}}],["文字水印",{"2":{"52":1,"229":1}}],["文件上传至站点根目录",{"2":{"406":1}}],["文件拓展名",{"2":{"403":1}}],["文件名称",{"2":{"403":1}}],["文件名称进行重写",{"2":{"28":1,"212":1}}],["文件被限制在了只能放在站点根目录",{"2":{"401":1}}],["文件被我删掉了怎么办",{"0":{"106":1,"265":1}}],["文件的用户组都是",{"2":{"332":1}}],["文件的权限改为",{"2":{"248":1}}],["文件的权限",{"2":{"79":1,"246":1}}],["文件所在路径",{"2":{"331":1}}],["文件以任何方式上传到目标服务器的站点根目录",{"2":{"330":1}}],["文件以外的所有文件夹以及文件",{"2":{"269":1}}],["文件移动到项目的根目录",{"2":{"310":1}}],["文件和",{"2":{"269":1}}],["文件大小",{"2":{"178":1}}],["文件到数据库",{"2":{"174":1}}],["文件命名规则",{"0":{"146":1}}],["文件路径命名规则",{"0":{"145":1}}],["文件同级",{"2":{"110":1,"238":1,"406":1}}],["文件中增加配置",{"2":{"108":1,"267":1}}],["文件中复制过来替换",{"2":{"61":1}}],["文件较大返回",{"2":{"101":1,"261":1,"286":1}}],["文件复制至企业版本的根目录中",{"2":{"60":1}}],["文件定位到",{"2":{"44":1,"277":1}}],["文件追加一行",{"2":{"44":1,"277":1}}],["文件内容",{"2":{"22":1,"345":1}}],["文件内容类似",{"2":{"11":1}}],["文件夹下找到错误日志",{"2":{"286":1}}],["文件夹下生成符号连接",{"2":{"269":1}}],["文件夹下",{"2":{"269":2}}],["文件夹下新增了一个",{"2":{"130":1}}],["文件夹替换掉已解压的",{"2":{"269":1}}],["文件夹分类功能",{"2":{"195":1}}],["文件夹路径命名规则",{"2":{"52":1,"195":1,"229":1}}],["文件夹复制到指定位置即可",{"2":{"13":1}}],["文件夹表示的是默认主题的唯一标识",{"2":{"11":1}}],["文件夹中新增一个文件",{"2":{"44":1,"277":1}}],["文件夹中",{"2":{"11":1,"60":2}}],["文件夹",{"2":{"11":2,"12":1,"60":2,"246":1,"269":1}}],["文件",{"2":{"6":2,"44":2,"78":1,"80":1,"86":1,"87":1,"88":1,"104":1,"105":1,"107":3,"264":1,"266":2,"277":2,"310":1,"312":1,"331":1,"332":1,"394":1,"403":2}}],["文件位置在",{"2":{"4":1}}],["文件将不会被加载",{"2":{"2":1}}],["来实现上传",{"2":{"399":1}}],["来按顺序应用多个预设",{"2":{"355":1}}],["来运行命令",{"2":{"312":1}}],["来保证消息队列进程能一直常驻运行",{"2":{"312":1}}],["来保持进程持续运行",{"2":{"83":1}}],["来下载最新的安装包",{"2":{"291":1}}],["来指定库",{"2":{"108":1,"267":1}}],["来重新生成所有图片的缩略图",{"2":{"106":1,"265":1}}],["来使该命令在后台运行",{"2":{"83":1}}],["来启动队列处理进程",{"2":{"83":1}}],["来调整水印距离",{"2":{"42":1,"242":1}}],["来创建一个应用",{"2":{"23":1,"348":1}}],["来修改静态资源目录",{"2":{"11":1}}],["敏感数据",{"2":{"22":1,"345":1}}],["复制到站点伪静态配置结尾",{"2":{"353":1}}],["复制到新版本中的",{"2":{"239":1}}],["复制失败",{"0":{"97":1,"257":1,"284":1}}],["复制图片",{"0":{"97":1,"257":1,"284":1}}],["复制一份并重命名为",{"2":{"61":1,"80":1}}],["复制嵌入式代码",{"2":{"52":1,"326":1}}],["复制",{"2":{"22":1,"229":1,"345":1}}],["复制支付异步回调地址",{"2":{"21":1}}],["证书",{"2":{"17":1,"340":1}}],["产品开通状态",{"2":{"16":1,"339":1}}],["产品绑定",{"2":{"15":1,"338":1}}],["绑定完成后",{"2":{"16":1,"339":1}}],["绑定支付宝支付产品",{"0":{"15":1,"338":1}}],["电脑网站支付",{"2":{"15":1,"338":1}}],["前往开发者中心",{"2":{"14":1,"337":1}}],["前端工程请求静态资源的路径需要修改",{"2":{"11":1}}],["前端使用",{"2":{"5":1,"10":1}}],["创建或编辑储存时",{"2":{"400":1}}],["创建成功后我们会在列表看到",{"2":{"350":1}}],["创建成功后自动跳转到控制台",{"2":{"148":1}}],["创建一个",{"2":{"350":1}}],["创建好新站点后",{"2":{"329":1}}],["创建好应用后进入应用",{"2":{"15":1,"338":1}}],["创建新站点",{"0":{"328":1}}],["创建数据目录",{"0":{"317":1}}],["创建站点",{"0":{"309":1}}],["创建文件夹等一系列问题",{"2":{"246":1}}],["创建储存空间",{"0":{"148":1}}],["创建配置文件后",{"2":{"83":1,"395":1}}],["创建应用",{"0":{"23":1,"348":1}}],["创建网页移动应用",{"2":{"14":1,"337":1}}],["创建支付应用",{"0":{"14":1,"337":1}}],["创建主题配置文件",{"2":{"11":1}}],["或其他数据库",{"2":{"331":1}}],["或其他接口管理软件中",{"2":{"4":1}}],["或打包后分发",{"2":{"322":1}}],["或下划线",{"2":{"322":1}}],["或图片处理规则比较复杂",{"2":{"298":1}}],["或更高",{"2":{"297":1,"299":1}}],["或者你也可以选择其他任务你熟悉的进程管理软件",{"2":{"392":1}}],["或者复制到",{"2":{"353":1}}],["或者",{"2":{"140":1}}],["或在系统公告中使用了",{"2":{"115":1}}],["或在水印功能中选择",{"2":{"40":1}}],["或按住",{"2":{"84":1}}],["或第三方储存账号没有权限所导致",{"2":{"112":1}}],["或第三方储存",{"2":{"40":1,"240":1}}],["或",{"2":{"13":1,"43":1,"99":1,"119":1,"215":1,"245":1,"259":1,"276":1,"312":3,"331":1,"332":2,"358":1,"361":1,"375":1,"381":1,"382":1,"383":1,"398":1,"399":1}}],["构建本地镜像",{"0":{"316":1}}],["构建后不要忘记将以下目录重新上传到您的服务器站点中",{"2":{"12":1}}],["构建前端代码",{"0":{"7":1}}],["中默认都是未选择的",{"2":{"356":1}}],["中了",{"2":{"331":1}}],["中就已经一同打包进",{"2":{"331":1}}],["中横线",{"2":{"322":1}}],["中文名",{"2":{"228":1,"323":1}}],["中等",{"2":{"129":1}}],["中不是图片的真实路径",{"2":{"98":1,"258":1}}],["中可以看到六个名称为限制结尾的输入框",{"2":{"27":1,"211":1}}],["中可以配置",{"2":{"11":1}}],["中",{"2":{"26":1,"310":1,"312":1,"322":1}}],["中的",{"2":{"12":1,"47":1,"84":1,"86":1,"271":1}}],["要在",{"2":{"393":1}}],["要求",{"0":{"388":1}}],["要使用相对维度",{"2":{"383":1}}],["要使用云处理",{"2":{"352":1}}],["要将兰空图床迁移到另一台服务器上",{"2":{"328":1}}],["要获取",{"2":{"312":1}}],["要么清空自定义",{"2":{"115":1}}],["要么关闭防火墙",{"2":{"115":1}}],["要修改主题",{"2":{"12":1}}],["要切换主题",{"2":{"11":1}}],["gray",{"2":{"386":1}}],["greenyellow",{"2":{"386":1}}],["green",{"2":{"386":1}}],["greyscale",{"2":{"375":1}}],["grep",{"2":{"64":1,"78":1,"87":1,"397":2}}],["goldenrod",{"2":{"386":1}}],["gold",{"2":{"386":1}}],["ghostwhite",{"2":{"386":1}}],["gainsboro",{"2":{"386":1}}],["gam=1",{"2":{"371":1}}],["gam",{"2":{"357":1}}],["gambling",{"2":{"278":1}}],["gz",{"2":{"330":3,"331":1,"332":1}}],["guarantee",{"2":{"278":2}}],["guarantees",{"2":{"278":1}}],["guangzhou",{"2":{"33":1,"221":1}}],["generate",{"2":{"62":1,"80":1}}],["get",{"2":{"393":1}}],["getenv",{"2":{"53":1,"231":1}}],["getadapter",{"2":{"44":2,"277":2}}],["gitee",{"2":{"234":1}}],["github",{"2":{"11":1,"37":1,"44":1,"64":1,"68":1,"76":1,"97":1,"119":1,"194":1,"197":1,"225":1,"234":2,"244":2,"257":1,"268":1,"269":1,"277":1,"284":1,"290":1}}],["gif|jpg|jpeg|png|bmp|swf",{"2":{"99":1,"259":1,"353":1}}],["gif",{"2":{"41":1,"144":1,"241":1,"382":1,"396":1}}],["gt",{"0":{"115":1},"2":{"11":2,"15":1,"21":1,"26":1,"35":3,"53":1,"86":3,"223":3,"231":1,"298":3,"338":1,"388":1,"405":3}}],["渲染页面",{"2":{"11":1}}],["w=5w",{"2":{"383":1}}],["w=500",{"2":{"364":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"377":1,"380":1,"381":1,"382":1}}],["w=400",{"2":{"376":1}}],["w=250",{"2":{"368":1}}],["w=300",{"2":{"360":1,"361":1,"362":2,"367":1}}],["w=1000",{"2":{"356":1}}],["w",{"2":{"355":1,"356":2,"357":1,"383":1}}],["wq",{"2":{"332":1}}],["wheat",{"2":{"386":1}}],["whitesmoke",{"2":{"386":1}}],["white",{"2":{"386":1}}],["while",{"2":{"278":1}}],["which",{"2":{"278":2}}],["why",{"2":{"40":1,"240":1}}],["watch",{"2":{"268":1}}],["watermark",{"0":{"193":1}}],["warning",{"2":{"26":1,"33":1,"36":1,"44":1,"53":1,"79":1,"221":1,"224":1,"277":1,"300":1,"322":1}}],["w3c",{"2":{"97":1,"257":1,"284":1}}],["workers",{"0":{"205":1}}],["worker",{"2":{"83":2,"312":4,"394":3,"395":1}}],["work",{"2":{"83":3,"312":3,"392":5,"393":1,"394":3}}],["width",{"2":{"363":1}}],["will",{"2":{"278":1}}],["with",{"2":{"278":3}}],["windows",{"2":{"43":1,"75":1,"85":1,"276":1,"401":1}}],["wisp",{"2":{"11":1}}],["wwwroot",{"2":{"83":4,"84":2,"309":3,"310":2,"312":2,"330":1,"394":2,"401":4}}],["www",{"2":{"34":1,"60":1,"61":1,"79":3,"83":4,"84":2,"194":1,"209":1,"222":1,"246":3,"248":2,"309":3,"310":2,"312":3,"319":6,"330":1,"332":2,"394":2,"401":4,"406":1}}],["webhook",{"0":{"350":1},"2":{"350":5}}],["webdav",{"2":{"52":1,"229":1,"275":1,"399":1}}],["webp",{"2":{"41":1,"64":2,"213":1,"241":1,"381":1,"382":1}}],["web",{"2":{"4":1,"6":2,"8":2,"11":1,"12":2,"44":1,"79":1,"109":1,"110":1,"199":1,"246":1,"268":1,"277":1,"291":1,"310":1,"312":3,"323":1,"332":1,"351":1,"387":5,"388":1,"398":1,"406":1}}],["默认值",{"2":{"367":1}}],["默认值为",{"2":{"358":1,"361":1,"368":1,"381":1,"382":1}}],["默认是",{"2":{"312":1}}],["默认是使用混合部署的方式",{"2":{"5":1}}],["默认",{"2":{"299":1,"380":1}}],["默认组或游客组同时只能存在一个",{"2":{"293":1}}],["默认组设置为禁止删除",{"2":{"177":1}}],["默认情况下会将数据库文件放置",{"2":{"269":1}}],["默认该文件夹名称为",{"2":{"269":1}}],["默认该限定符会以降序",{"2":{"76":1}}],["默认以文件的方式缓存",{"2":{"229":1}}],["默认0",{"2":{"178":2}}],["默认使用的是http",{"2":{"149":1}}],["默认5242880",{"2":{"142":1}}],["默认smtp",{"2":{"131":1}}],["默认的搜索输入框中",{"2":{"76":1}}],["默认为成人",{"2":{"129":1}}],["默认为",{"2":{"61":5,"80":3,"130":1,"144":1,"145":1,"146":1,"147":1,"322":1}}],["默认主题内置了打包脚本",{"2":{"12":1}}],["默认主题",{"2":{"11":1}}],["然后进入后台更新页面",{"2":{"406":1}}],["然后进入后台编辑本地策略",{"2":{"248":1}}],["然后将安装包重命名为",{"2":{"406":1}}],["然后将其填入支付宝的授权回调地址中",{"2":{"21":1}}],["然后设置为",{"2":{"400":1}}],["然后我们就可以通过图片的",{"2":{"355":1}}],["然后通过服务器内部重定向",{"2":{"351":1}}],["然后通过程序输出到客户端",{"2":{"351":1}}],["然后按住键盘",{"2":{"332":1}}],["然后按照以下步骤进行升级",{"2":{"269":1}}],["然后修改",{"2":{"331":1}}],["然后修改对应的配置值",{"2":{"80":1}}],["然后映射必要的文件到宿主机",{"2":{"322":1}}],["然后可以访问",{"2":{"322":1}}],["然后把源码上传至安装了",{"2":{"315":1}}],["然后运行",{"2":{"315":1}}],["然后根据脚本提示安装即可",{"2":{"311":1}}],["然后根据提示内容",{"2":{"306":1}}],["然后继续设置伪静态",{"2":{"310":1}}],["然后使用终端登录服务器",{"2":{"315":1}}],["然后使用",{"2":{"309":1}}],["然后使用新版本替换",{"2":{"61":1}}],["然后图片会进入消息队列",{"2":{"298":1}}],["然后点击",{"2":{"268":1}}],["然后点击右上角的",{"2":{"268":1}}],["然后点击显示你的",{"2":{"149":1}}],["然后为",{"2":{"245":1}}],["然后编辑脚本根目录下的",{"2":{"237":1}}],["然后编辑这个文件",{"2":{"61":1}}],["然后以极快的速度向它提供请求",{"2":{"199":1}}],["然后鉴黄服务器通过你的图片链接进行抓取图片",{"2":{"116":1}}],["然后删除",{"2":{"104":1}}],["然后执行安装脚本",{"2":{"311":1}}],["然后执行迁移命令",{"2":{"238":1}}],["然后执行",{"2":{"104":1}}],["然后执行重新生成符号链接命令",{"2":{"89":1}}],["然后执行构建命令",{"2":{"7":1}}],["然后配置站点伪静态",{"2":{"88":1}}],["然后确保你的",{"2":{"117":1}}],["然后确保新服务器已安装",{"2":{"87":1}}],["然后确认该",{"2":{"87":1}}],["然后备份数据库",{"2":{"86":1}}],["然后",{"2":{"84":1}}],["然后关闭站点的防跨站攻击功能",{"2":{"79":1}}],["然后打开",{"2":{"78":1,"87":1}}],["然后打开刚刚由证书生成软件生成的证书目录",{"2":{"22":1,"345":1}}],["然后上传接口必须返回以下结构",{"2":{"38":1,"226":1}}],["然后就可以愉快的修改样式了",{"2":{"12":1}}],["然后后续请求都由前端工程以",{"2":{"11":1}}],["然后在根目录",{"2":{"11":1}}],["在此示例中",{"2":{"394":1}}],["在此目录中",{"2":{"312":1,"394":1}}],["在正式安装之前",{"2":{"392":1}}],["在生产环境中",{"2":{"392":1}}],["在任何其他调整大小操作之前",{"2":{"363":1}}],["在程序将图片上传到对象储存之前",{"2":{"324":1}}],["在开源版本的基础上增加了利于商业化的功能",{"2":{"323":1}}],["在开始安装之前",{"2":{"308":1}}],["在本次教程中",{"2":{"309":1}}],["在用户中心可以切换不同的储存上传图片",{"2":{"295":1}}],["在接下来的",{"2":{"291":1}}],["在了解后确认兰空图床大概率是一款可以令您愉悦的产品后再考虑下单",{"2":{"290":1}}],["在修改后继续使用本软件将视为您接受和同意修改后的免责声明",{"2":{"278":1}}],["在适用法律允许的最大范围内",{"2":{"278":1}}],["在后续的使用过程中可能会因为权限导致文件无法读取",{"2":{"246":1}}],["在迁移过程中需要获取图片信息",{"2":{"235":1}}],["在线功能可能因为你的服务器无法请求",{"2":{"119":1}}],["在线更新失败",{"0":{"119":1}}],["在线升级功能",{"2":{"163":1}}],["在线升级",{"0":{"109":1,"268":1,"405":1}}],["在里面可以添加任何代码",{"2":{"107":1}}],["在同一个储存策略下",{"2":{"96":1,"256":1,"283":1}}],["在站点根目录下执行命令",{"2":{"83":1}}],["在图片管理页面中",{"2":{"75":1}}],["在企业版本的根目录下依次执行下面的命令进行升级",{"2":{"62":1}}],["在企业版本根目录",{"2":{"61":1}}],["在兰空图床后台的储存策略表单中请分开填写",{"2":{"49":1,"273":1}}],["在",{"2":{"44":4,"107":1,"228":1,"266":1,"277":4}}],["在处理中可能会占用到",{"2":{"40":1,"240":1,"297":1}}],["在创建",{"2":{"27":1,"43":1,"211":1,"276":1}}],["在您执行",{"2":{"12":1}}],["在执行构建后会触发打包脚本",{"2":{"11":1}}],["在我们的程序根目录",{"2":{"11":1}}],["使其正常运作",{"2":{"392":1}}],["使其可以商业化",{"2":{"51":1}}],["使这个图片应用这个预设",{"2":{"355":1}}],["使用兰空图床",{"2":{"387":1}}],["使用焦点",{"2":{"362":1}}],["使用一套程序管理不同厂家的对象储存中的图片资源",{"2":{"324":1}}],["使用场景",{"0":{"324":1}}],["使用其他数据库请跳过",{"2":{"309":1}}],["使用图片处理功能",{"2":{"296":1}}],["使用第三方软件备份时需要额外注意",{"2":{"331":1}}],["使用第三方",{"2":{"164":1}}],["使用oss对象储存需要用到阿里云账号的accesskeys",{"2":{"149":1}}],["使用自定义",{"2":{"123":1}}],["使用反向代理并且域名使用了",{"0":{"102":1,"262":1,"287":1}}],["使用命令查看",{"2":{"87":1}}],["使用命令确保已经安装必要的拓展",{"2":{"78":1}}],["使用",{"0":{"216":1,"217":1,"353":1},"2":{"64":2,"74":2,"78":1,"199":1,"238":1,"269":1,"309":1,"332":1,"353":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"398":1}}],["使用终端进入根目录中的",{"2":{"12":1}}],["使用了",{"2":{"1":1}}],["使得样式一致",{"2":{"10":1}}],["uuid",{"2":{"403":2}}],["ubuntu",{"2":{"393":1,"397":1,"398":1}}],["ubuntucentos",{"2":{"309":1}}],["utf",{"2":{"208":1}}],["unless",{"2":{"319":1}}],["understood",{"2":{"278":1}}],["undergone",{"2":{"278":1}}],["under",{"2":{"278":2}}],["unauthorized",{"2":{"278":1}}],["uniqid",{"2":{"146":1,"403":1}}],["unzip",{"2":{"64":1,"68":1,"309":1}}],["uss",{"2":{"399":1}}],["using",{"2":{"278":1}}],["usage",{"2":{"278":1}}],["us",{"2":{"50":1,"274":1,"278":1}}],["user=www",{"2":{"312":2,"394":1}}],["user=root",{"2":{"83":1,"209":1}}],["users",{"2":{"278":5}}],["user",{"0":{"190":1},"2":{"278":1,"312":1}}],["username=",{"2":{"217":1,"319":1,"321":1}}],["username=root",{"2":{"88":1,"332":1}}],["username=数据库连接账号",{"2":{"61":1}}],["username",{"0":{"185":1},"2":{"44":5,"277":5,"322":1}}],["use",{"2":{"44":1,"277":1,"278":5}}],["up",{"2":{"321":1}}],["upload",{"0":{"114":1}}],["uploads",{"2":{"47":2,"60":1,"86":4,"239":1,"271":2,"317":3,"319":2,"401":2}}],["upgrade",{"2":{"110":1,"208":6,"287":3,"406":2}}],["update",{"2":{"83":1,"174":2,"312":1,"395":1}}],["upyun",{"2":{"44":1,"277":1}}],["url=",{"2":{"319":1,"321":1}}],["url=站点域名",{"2":{"61":1,"80":1}}],["url=http",{"2":{"6":1}}],["url",{"0":{"192":1},"2":{"11":1,"12":1,"29":1,"44":3,"98":1,"176":1,"214":1,"235":1,"258":1,"277":3,"298":1,"322":2,"324":1,"351":1,"355":1,"356":1,"401":1,"402":1}}],["uid",{"2":{"403":1}}],["ui",{"2":{"10":2}}],["ngx",{"2":{"353":1}}],["nginxapache",{"2":{"312":1}}],["nginxlocation",{"2":{"310":1,"353":1}}],["nginxserver",{"2":{"310":1}}],["nginxproxy",{"2":{"287":1}}],["nginx",{"0":{"208":1,"391":1},"2":{"77":1,"79":1,"99":2,"208":1,"245":1,"246":1,"259":2,"310":4,"312":6,"351":1,"353":5,"387":2,"391":1,"398":1}}],["numprocs",{"2":{"394":1}}],["numprocs=1",{"2":{"83":1,"209":1,"312":1,"394":1}}],["num",{"2":{"83":1,"209":1,"312":1,"394":1}}],["null",{"2":{"2":1,"61":1,"80":1,"84":1,"99":2,"259":2}}],["no",{"2":{"319":1,"322":1}}],["no=",{"2":{"319":1,"321":1}}],["no=购买后得到的序列号",{"2":{"61":1,"80":1}}],["nor",{"2":{"278":1}}],["none",{"2":{"132":1}}],["not",{"0":{"97":1,"257":1},"2":{"208":3,"278":8}}],["nohup",{"2":{"83":1}}],["node",{"2":{"38":1,"226":1}}],["nodejs",{"2":{"10":1,"12":1}}],["network",{"2":{"319":1}}],["net",{"2":{"78":1,"87":1,"297":1}}],["new",{"2":{"44":1,"277":1}}],["neutral",{"2":{"38":1,"226":1}}],["nsfwjs",{"0":{"37":1,"225":1},"1":{"38":1,"39":1,"226":1,"227":1},"2":{"37":1,"38":1,"225":1,"226":1}}],["navy",{"2":{"386":1}}],["navajowhite",{"2":{"386":1}}],["navicat",{"2":{"331":1}}],["navigator",{"2":{"97":1,"257":1,"284":1}}],["name=",{"2":{"83":1,"209":1,"312":1,"319":1,"321":1,"394":1}}],["names",{"2":{"78":1,"87":1}}],["namespace",{"2":{"44":1,"277":1}}],["name",{"2":{"11":1,"83":1,"208":1,"209":1,"269":1,"310":1,"312":1,"319":1,"322":1,"394":1}}],["native",{"2":{"10":2,"335":1}}],["后跟",{"2":{"383":1}}],["后因个人精力有限",{"2":{"323":1}}],["后续的源代码或其他文件",{"2":{"322":1}}],["后续操作",{"0":{"239":1}}],["后端以及前端源码",{"2":{"290":1}}],["后端使用",{"2":{"10":1}}],["后又经历了数个版本的迭代",{"2":{"228":1}}],["后点击下一页数据被重置的",{"2":{"161":1}}],["后台图片管理增加筛选访客图片选项",{"2":{"176":1}}],["后台增加控制台",{"2":{"176":1}}],["后台显示用户注册时间",{"2":{"152":1}}],["后台管理使用了",{"2":{"1":1}}],["后面注册的用户才会生效",{"2":{"147":1}}],["后保存",{"2":{"115":1}}],["后回车保存",{"2":{"84":1}}],["后",{"2":{"84":1,"199":1,"353":1}}],["后缀对应的是",{"2":{"47":1,"271":1}}],["25",{"2":{"362":2,"369":1}}],["2592000",{"2":{"26":1}}],["270",{"2":{"358":1}}],["2=上居中",{"2":{"178":1,"179":1}}],["2=图片水印",{"2":{"178":1,"179":1}}],["24",{"2":{"174":1,"403":1}}],["263",{"2":{"152":1}}],["2>",{"2":{"84":1}}],["2+",{"2":{"77":1,"245":1}}],["21+",{"2":{"77":1}}],["200x400",{"2":{"355":1}}],["200",{"2":{"355":1,"362":1}}],["2022",{"2":{"228":1}}],["2021",{"0":{"150":1},"1":{"151":1,"152":1,"153":1},"2":{"228":1}}],["20240104",{"2":{"403":1}}],["2024",{"2":{"4":1,"403":1}}],["2017",{"2":{"228":1}}],["2017+",{"2":{"52":1,"54":1,"229":1,"232":1,"389":1}}],["2018",{"2":{"145":1,"323":1}}],["2097152",{"2":{"26":1}}],["20",{"0":{"150":1},"1":{"151":1,"152":1,"153":1},"2":{"26":1,"160":1}}],["2",{"0":{"84":1,"87":1,"177":1,"305":1},"2":{"10":1,"11":1,"51":1,"58":1,"228":1,"231":1,"235":2,"236":1,"269":1,"289":1,"300":2,"305":1,"306":1,"325":1,"362":2,"388":1}}],["届时需要使用独立部署的前端站点域名您的图床网站首页",{"2":{"8":1}}],["状态",{"2":{"8":1}}],["将那些函数从这个配置项中移除",{"2":{"388":1}}],["将图片编码为特定格式",{"2":{"382":1}}],["将图片处理成自己想要的格式",{"2":{"324":1}}],["将图像裁剪到特定尺寸",{"2":{"363":1}}],["将图像编码为指定格式",{"2":{"357":1}}],["将任意一个储存关联该云处理驱动器即可",{"2":{"352":1}}],["将文件直接输出给客户端",{"2":{"351":1}}],["将储存配置的储存目录路径",{"2":{"333":1}}],["将数据配置更新为您的新站点需要的数据库",{"2":{"332":1}}],["将数据导入到新版本数据库中",{"2":{"306":1}}],["将符号链接删除",{"2":{"329":1}}],["将您精选的图片分享给亲友",{"2":{"324":1}}],["将以下命令中的配置替换正确后执行",{"2":{"319":1,"321":1}}],["将以上配置修改为你的环境对应配置值",{"2":{"88":1}}],["将内容复制后",{"2":{"310":1}}],["将安装包文件上传至站点根目录下",{"2":{"309":1}}],["将安装包上传至站点目录然后解压",{"2":{"246":1}}],["将安装包上传至站点目录中",{"2":{"79":1}}],["将必要的环境配置好",{"2":{"308":1}}],["将它的值改为",{"2":{"297":1}}],["将它放置到",{"2":{"180":1}}],["将备份的缩略图文件夹放到",{"2":{"269":1}}],["将备份的",{"2":{"269":1}}],["将站点的运行目录指向程序的",{"2":{"246":1}}],["将脚本解压至已安装",{"2":{"237":1}}],["将其填入支付宝的授权回调地址中",{"2":{"344":1}}],["将其填写到兰空图床后台配置中",{"2":{"22":1,"345":1}}],["将其保存在内存中",{"2":{"199":1}}],["将所有静态资源放置本地",{"2":{"152":1}}],["将该文件中的旧版本数据库",{"2":{"237":1}}],["将该配置值修改为",{"2":{"130":1}}],["将该值清空",{"2":{"78":1,"87":1}}],["将会在首页显示的公告内容",{"2":{"126":1}}],["将补丁包重命名为",{"2":{"110":1}}],["将这段代码注释掉即可",{"2":{"99":1,"259":1}}],["将打包后的代码和数据库文件",{"2":{"88":1}}],["将打包后的所有静态文件",{"2":{"11":1}}],["将程序所在目录的所有文件夹",{"2":{"79":1,"246":1}}],["将",{"2":{"61":1,"330":1,"331":1}}],["将开源版本中根目录的",{"2":{"60":1}}],["将开源版本中的",{"2":{"60":2}}],["将应用的",{"2":{"24":1,"350":1}}],["将刚刚下载的三份证书文件上传至兰空图床程序中的",{"2":{"22":1}}],["将证书全部下载",{"2":{"20":1,"343":1}}],["将入口文件",{"2":{"11":1}}],["将显示",{"2":{"8":1}}],["将此目录中的所有文件上传至站点中即可",{"2":{"8":1}}],["8=下居中",{"2":{"178":1,"179":1}}],["83f7",{"2":{"403":1}}],["83",{"2":{"170":1}}],["85",{"2":{"155":1}}],["8080",{"2":{"319":1,"321":1,"322":2}}],["80",{"2":{"102":1,"208":2,"262":1,"287":1,"310":2,"319":1}}],["8000$suffix",{"2":{"208":1}}],["8000",{"2":{"6":1}}],["8+",{"2":{"52":1,"54":1,"229":1,"232":1,"269":1}}],["8",{"2":{"25":1,"52":1,"53":1,"54":1,"77":1,"78":1,"208":1,"229":1,"231":1,"232":1,"245":1,"368":1,"385":1,"388":1}}],["8910111213注释以后访问站点域名",{"2":{"8":1}}],["xzvf",{"2":{"332":1}}],["xml",{"2":{"53":1,"93":1,"231":1,"253":1,"388":1}}],["xxxx",{"0":{"103":2,"263":2,"288":2}}],["xxx",{"2":{"44":1,"277":1}}],["x",{"0":{"194":1,"305":1,"353":1},"1":{"195":1,"196":1,"197":1,"198":1},"2":{"10":1,"11":1,"42":1,"51":1,"52":1,"58":1,"102":2,"153":1,"208":2,"229":1,"235":3,"242":1,"262":2,"287":4,"289":1,"300":3,"305":1,"306":1,"325":1,"351":2,"353":2,"362":2,"363":1}}],["x3c",{"2":{"8":1,"44":1,"277":1,"358":1,"359":1,"360":1,"361":1,"362":2,"363":1,"364":1,"365":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"380":1,"381":1,"382":1,"383":1}}],["x26",{"2":{"6":8,"66":2,"68":2,"69":4,"84":3,"312":4,"317":4,"358":1,"359":1,"360":2,"361":2,"362":4,"367":2,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"380":1,"381":1,"382":1}}],["行为佳",{"2":{"25":1}}],["行",{"2":{"8":1}}],["打包完成后",{"2":{"330":1}}],["打包文件",{"0":{"330":1},"2":{"331":1}}],["打包时请注意程序中",{"2":{"86":1,"248":1}}],["打包压缩程序目录时",{"2":{"86":1}}],["打包程序目录",{"2":{"86":1}}],["打包",{"0":{"86":1}}],["打包后的静态文件默认在",{"2":{"8":1}}],["打开后访客无需登录也可以上传图片",{"2":{"141":1}}],["打开根目录",{"2":{"88":1}}],["打开兰空图床后台",{"2":{"21":1}}],["打开",{"2":{"6":1,"44":5,"277":5}}],["1f0a",{"2":{"403":1}}],["140",{"2":{"384":1}}],["1=左上角",{"2":{"178":1,"179":1}}],["1=文字水印",{"2":{"178":1,"179":1}}],["16",{"2":{"177":1}}],["167",{"2":{"151":1}}],["1718956160",{"2":{"403":1}}],["17",{"2":{"177":1}}],["179",{"2":{"157":1}}],["1+",{"2":{"174":1}}],["155",{"2":{"363":1}}],["159",{"2":{"157":1}}],["156",{"2":{"157":1}}],["157",{"2":{"156":1}}],["180",{"2":{"156":1,"358":1}}],["186",{"2":{"155":1}}],["138",{"2":{"155":1}}],["194",{"2":{"157":1}}],["192",{"2":{"155":1}}],["196",{"2":{"155":1}}],["199",{"2":{"26":1}}],["1g",{"2":{"147":1,"297":1}}],["112",{"2":{"161":1}}],["118",{"2":{"161":1}}],["11",{"2":{"44":1,"277":1}}],["1000",{"2":{"374":1}}],["100+",{"2":{"325":1}}],["100",{"2":{"299":2,"362":2,"363":1,"369":1,"370":1,"372":1,"373":1,"381":1,"383":1}}],["10",{"2":{"228":1,"362":1,"389":2}}],["1073741824",{"2":{"147":1}}],["1064",{"0":{"91":1,"249":1}}],["1048576",{"2":{"26":2}}],["102400",{"2":{"26":1}}],["128",{"2":{"161":1}}],["128mb",{"2":{"40":1,"240":1,"297":1}}],["121",{"2":{"159":1}}],["126",{"2":{"133":1}}],["123456",{"2":{"321":1}}],["123",{"2":{"47":1,"271":1}}],["12",{"0":{"150":1},"1":{"151":1,"152":1,"153":1},"2":{"8":1}}],["127",{"2":{"6":1,"61":2,"80":1,"140":3,"208":1}}],["1",{"0":{"83":1,"86":1,"150":1,"158":2,"162":1,"166":1},"1":{"151":1,"152":1,"153":1,"159":2,"160":2,"161":2,"163":1,"164":1,"165":1,"167":1,"168":1},"2":{"6":1,"26":1,"36":1,"38":1,"50":1,"53":1,"61":2,"77":1,"78":1,"80":1,"84":1,"88":2,"140":1,"153":1,"175":1,"208":3,"217":1,"224":1,"226":1,"235":1,"274":1,"287":2,"299":2,"300":1,"323":1,"332":1,"362":2,"368":1,"371":1,"403":1}}],["04",{"2":{"145":1,"403":1}}],["01",{"2":{"145":1,"403":1}}],["02d",{"2":{"83":1,"209":1,"312":1,"394":1}}],["0+",{"2":{"77":1,"87":1,"389":2}}],["0755",{"2":{"61":1,"79":1,"246":1,"248":1,"406":1}}],["00",{"2":{"26":4}}],["0xxb",{"2":{"11":1,"44":1,"194":1,"197":1,"277":1}}],["0",{"0":{"162":1,"166":1},"1":{"163":1,"164":1,"165":1,"167":1,"168":1},"2":{"6":2,"11":1,"38":6,"61":4,"80":2,"88":4,"140":3,"208":2,"217":2,"226":6,"228":1,"231":1,"236":1,"245":1,"269":1,"332":2,"358":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"381":1,"383":1}}],["azure",{"2":{"386":1}}],["aquamarine",{"2":{"386":1}}],["aqua",{"2":{"386":1}}],["amount",{"2":{"297":1}}],["above",{"2":{"278":1}}],["agreed",{"2":{"278":1}}],["agreement",{"2":{"278":1}}],["after",{"2":{"278":1}}],["affect",{"2":{"278":1}}],["activities",{"2":{"278":1}}],["acceptance",{"2":{"278":1}}],["access",{"0":{"91":1,"249":1},"2":{"99":1,"208":3,"259":1}}],["accesskeysecret",{"2":{"149":1}}],["accesskey",{"2":{"36":1,"224":1}}],["accuracy",{"2":{"278":3}}],["avif",{"2":{"381":1,"382":1}}],["avi",{"2":{"234":1}}],["antiquewhite",{"2":{"386":1}}],["android",{"2":{"368":1}}],["and",{"2":{"278":12}}],["angle",{"2":{"178":1,"180":1}}],["an",{"0":{"91":1,"249":1}}],["any",{"2":{"8":6,"278":6}}],["auto",{"2":{"358":3}}],["autostart=true",{"2":{"312":1,"394":1}}],["autorestart=true",{"2":{"83":1,"209":1,"312":1,"394":1}}],["author",{"2":{"11":1}}],["attacks",{"2":{"278":1}}],["at",{"2":{"76":2,"278":2}}],["a",{"2":{"75":1,"78":1,"87":1,"278":1,"297":1,"327":1}}],["aws",{"2":{"52":1,"229":1,"275":1,"399":2}}],["argb",{"2":{"385":2}}],["are",{"2":{"278":3}}],["arising",{"2":{"278":1}}],["archive",{"2":{"64":1,"68":1}}],["array",{"2":{"44":1,"277":1}}],["artisan",{"2":{"1":1,"2":2,"55":1,"56":1,"57":1,"62":5,"71":1,"72":1,"73":1,"80":1,"83":3,"84":1,"89":1,"104":1,"106":1,"204":1,"205":1,"206":1,"207":1,"209":1,"265":1,"269":2,"306":1,"312":2,"332":1,"392":1,"394":1}}],["addr",{"2":{"208":2}}],["added",{"0":{"151":1,"155":1,"159":1,"163":1,"172":1}}],["add",{"2":{"44":2,"208":1,"277":2,"287":1}}],["admin",{"2":{"44":3,"277":3,"319":5,"321":5,"322":3}}],["adapter",{"2":{"44":1,"277":1}}],["all",{"2":{"278":3}}],["allows",{"2":{"78":1,"87":1}}],["alpha",{"2":{"179":1,"384":1,"385":2}}],["alarm",{"2":{"83":1}}],["alt",{"2":{"43":1,"75":1,"276":1}}],["aliceblue",{"2":{"386":1}}],["aliyunossreadonlyaccess",{"2":{"48":1,"272":1}}],["aliyunossfullaccess",{"2":{"48":1,"272":1}}],["aliyunyundungreenwebfullaccess",{"2":{"36":1,"224":1}}],["aliyun",{"2":{"34":1,"222":1}}],["alipay",{"2":{"14":1,"337":1}}],["as",{"2":{"278":3}}],["asc",{"2":{"76":1}}],["ashburn",{"2":{"33":1,"221":1}}],["assetsdir",{"2":{"11":1}}],["apt",{"2":{"309":1,"393":1,"398":1}}],["apache2",{"2":{"312":2}}],["apache",{"2":{"99":1,"245":1,"259":1,"312":2,"387":1,"398":1}}],["ap",{"2":{"36":1,"224":1}}],["api接口协议的储存",{"2":{"399":1}}],["apis",{"2":{"97":1,"257":1,"284":1}}],["api",{"2":{"6":2,"12":1,"119":1,"324":1}}],["apple",{"2":{"368":1}}],["applicable",{"2":{"278":3}}],["applicability",{"2":{"278":1}}],["apply",{"2":{"268":1}}],["app",{"0":{"182":1,"183":1},"2":{"6":2,"12":1,"22":1,"23":2,"44":7,"60":4,"61":3,"80":3,"86":3,"88":1,"190":1,"239":1,"269":1,"277":7,"306":1,"309":3,"310":3,"312":2,"319":8,"321":5,"322":8,"330":1,"348":2,"394":2,"401":2}}],["ivory",{"2":{"386":1}}],["illegal",{"2":{"278":1}}],["if",{"2":{"208":1,"278":3}}],["ico",{"2":{"144":1,"208":1,"213":1}}],["icons",{"2":{"1":2}}],["io",{"2":{"97":1,"214":1,"257":1,"284":1}}],["issues",{"2":{"234":1,"278":1}}],["is",{"0":{"97":1,"257":1},"2":{"278":5}}],["i",{"2":{"84":1,"86":3,"235":1,"298":1,"332":1,"351":1}}],["its",{"2":{"278":1}}],["it",{"2":{"78":1,"87":1,"278":4}}],["iqy",{"2":{"61":1,"80":1}}],["ip",{"2":{"50":1,"52":1,"140":1,"157":1,"163":1,"176":1,"274":1}}],["important",{"2":{"398":1}}],["import",{"2":{"306":1}}],["implicit",{"2":{"278":1}}],["img",{"2":{"86":1,"358":1,"359":1,"360":1,"361":1,"362":2,"363":1,"364":1,"365":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"380":1,"381":1,"382":1,"383":1}}],["imagick",{"0":{"67":1,"68":1},"1":{"68":1,"69":1},"2":{"53":1,"68":5,"69":1,"78":1,"231":1,"248":1,"294":1,"388":1,"396":3}}],["images",{"2":{"83":2,"190":1,"278":1}}],["imageservice",{"2":{"44":1,"277":1}}],["imagemagick",{"0":{"396":1,"397":1},"1":{"397":1,"398":1},"2":{"64":5,"294":1,"396":7,"397":2,"398":5}}],["imageimagick",{"0":{"63":1,"64":1},"1":{"64":1,"65":1,"66":1},"2":{"64":1}}],["image",{"2":{"39":1,"227":1}}],["ims",{"2":{"31":1,"32":1,"219":1,"220":1}}],["identify",{"2":{"64":2}}],["id",{"2":{"24":1,"156":1,"350":3}}],["invalid",{"2":{"278":1}}],["involves",{"2":{"278":1}}],["including",{"2":{"278":1}}],["indigo",{"2":{"386":1}}],["indianred",{"2":{"386":1}}],["indicate",{"2":{"278":1}}],["indirect",{"2":{"278":1}}],["index",{"2":{"6":2,"11":2,"79":1,"208":5,"246":1,"310":5}}],["in",{"2":{"278":2}}],["input",{"2":{"176":1}}],["inidb",{"2":{"331":1}}],["ini",{"2":{"78":1,"83":1,"87":1,"243":1,"297":2,"312":1,"332":1,"394":1}}],["inivite",{"2":{"6":1}}],["ink",{"2":{"61":1,"80":1}}],["internet",{"2":{"278":2}}],["intercept",{"0":{"191":1},"2":{"130":1}}],["intangible",{"2":{"278":1}}],["int",{"2":{"44":2,"277":2}}],["installed",{"2":{"60":1,"269":1}}],["install",{"2":{"44":1,"66":1,"69":1,"174":1,"277":1,"309":2,"311":3,"393":1,"398":2}}],["infinitered",{"2":{"37":1,"225":1}}],["information",{"2":{"278":1}}],["info",{"2":{"8":1,"289":1}}],["dpr=2",{"2":{"368":1}}],["dpr",{"2":{"357":1,"368":1}}],["dynamodb",{"2":{"229":1}}],["data=",{"2":{"321":1}}],["data",{"2":{"278":1,"317":9,"319":5,"321":1,"322":3,"330":2,"332":1,"401":2}}],["database",{"0":{"184":1,"185":1,"186":1,"187":1,"188":1,"189":1},"2":{"269":1,"317":2,"319":3,"330":2,"331":4}}],["database=laravel",{"2":{"331":1}}],["database=lsky",{"2":{"88":1,"332":1}}],["database=数据库名称",{"2":{"61":1}}],["darkviolet",{"2":{"386":1}}],["darkturquoise",{"2":{"386":1}}],["darkslategray",{"2":{"386":1}}],["darkslateblue",{"2":{"386":1}}],["darkseagreen",{"2":{"386":1}}],["darksalmon",{"2":{"386":1}}],["darkred",{"2":{"386":1}}],["darkorchid",{"2":{"386":1}}],["darkorange",{"2":{"386":1}}],["darkolivegreen",{"2":{"386":1}}],["darkmagenta",{"2":{"386":1}}],["darkkhaki",{"2":{"386":1}}],["darkgreen",{"2":{"386":1}}],["darkgray",{"2":{"386":1}}],["darkgoldenrod",{"2":{"386":1}}],["darkcyan",{"2":{"386":1}}],["darkblue",{"2":{"386":1}}],["dark",{"2":{"163":1,"195":1}}],["d",{"2":{"145":1,"312":2,"319":1,"321":1,"394":1,"403":1}}],["dodgerblue",{"2":{"386":1}}],["dockerfile",{"2":{"316":1}}],["docker",{"0":{"313":1,"318":1,"320":1},"1":{"314":1,"315":1,"316":1,"317":1,"318":1,"319":2,"320":1,"321":2,"322":1},"2":{"307":2,"315":1,"316":1,"321":1,"322":4}}],["docs",{"2":{"102":1,"262":1,"287":1}}],["do",{"2":{"278":1}}],["dom",{"2":{"53":1,"97":1,"231":1,"257":1,"284":1,"388":1}}],["domain",{"2":{"47":1,"208":3,"271":1}}],["dimgray",{"2":{"386":1}}],["digit",{"2":{"385":4}}],["direct",{"2":{"278":1}}],["directory=",{"2":{"83":1,"209":1}}],["directive",{"2":{"78":1,"87":1}}],["disclaimer",{"2":{"278":5}}],["discretion",{"2":{"278":1}}],["disable",{"2":{"78":4,"87":4,"388":1}}],["dist",{"2":{"6":4,"8":1}}],["db=1",{"2":{"108":1,"267":1}}],["db=0",{"2":{"108":1,"267":1}}],["db",{"2":{"57":1,"61":7,"62":1,"88":6,"332":6}}],["driver=memcached",{"2":{"217":1}}],["driver=redis",{"2":{"216":1}}],["drivers",{"2":{"44":2,"277":2}}],["drawing",{"2":{"38":1,"226":1}}],["deepskyblue",{"2":{"386":1}}],["deeppink",{"2":{"386":1}}],["deemed",{"2":{"278":1}}],["debiancentos",{"2":{"397":1,"398":1}}],["debian",{"2":{"309":1}}],["debug=true",{"2":{"88":1}}],["debug",{"0":{"182":1},"2":{"60":1,"182":1}}],["detailed",{"2":{"278":1}}],["defined",{"0":{"97":1,"257":1}}],["default",{"2":{"6":3,"11":4,"208":1,"312":1}}],["delimited",{"2":{"78":1,"87":1}}],["devel",{"2":{"309":1}}],["developers",{"2":{"278":7}}],["developed",{"2":{"278":1}}],["develop",{"2":{"14":1,"337":1}}],["dev",{"2":{"6":1,"12":2,"84":1,"99":2,"259":2,"309":1}}],["rbg",{"2":{"384":1}}],["rgb",{"2":{"384":1,"385":2}}],["rhel",{"2":{"309":1,"397":1,"398":1}}],["royalblue",{"2":{"386":1}}],["rosybrown",{"2":{"386":1}}],["rotate",{"2":{"355":1}}],["robots",{"2":{"208":1}}],["root",{"2":{"208":1,"310":1,"312":1,"400":1}}],["roadrunner",{"0":{"201":1},"2":{"199":1}}],["router",{"2":{"10":1}}],["route",{"2":{"8":2,"72":1}}],["routes",{"2":{"8":1}}],["right",{"2":{"278":1,"361":3}}],["risks",{"2":{"278":1}}],["ri",{"2":{"69":1}}],["rules",{"2":{"44":1,"277":1,"278":1}}],["run",{"2":{"6":3,"12":2,"84":1,"319":1}}],["ram",{"2":{"36":1,"48":1,"224":1,"272":1}}],["red",{"2":{"386":1}}],["redirect",{"2":{"312":1,"394":1}}],["redis",{"0":{"108":1,"216":1,"267":1},"2":{"53":2,"61":3,"77":1,"78":1,"80":3,"87":1,"88":6,"108":2,"215":1,"216":6,"229":1,"267":2}}],["rebeccapurple",{"2":{"386":1}}],["retina",{"2":{"368":1}}],["return",{"2":{"44":1,"277":1}}],["remove",{"2":{"278":1}}],["remote",{"2":{"208":1}}],["regulations",{"2":{"278":2}}],["regarding",{"2":{"278":1}}],["region",{"2":{"50":1,"274":1}}],["related",{"2":{"278":1}}],["reliability",{"2":{"278":2}}],["releases",{"2":{"244":1,"268":1,"269":1}}],["reload",{"2":{"205":1}}],["reserve",{"2":{"278":1}}],["resolved",{"2":{"278":1}}],["resources",{"2":{"6":2,"11":2,"12":1,"44":2,"107":1,"277":2}}],["resulting",{"2":{"278":1}}],["responsible",{"2":{"278":2}}],["restart",{"2":{"84":1,"319":1,"392":1}}],["reread",{"2":{"83":1,"312":1,"395":1}}],["receives",{"2":{"78":1,"87":1}}],["refs",{"2":{"64":1,"68":1}}],["read",{"2":{"278":1}}],["readlink",{"2":{"53":1,"231":1}}],["react",{"2":{"13":1}}],["request",{"2":{"101":1,"261":1,"286":1}}],["requests",{"2":{"44":1,"102":1,"262":1,"277":1,"287":1}}],["required",{"2":{"44":3,"277":3}}],["r",{"2":{"6":1,"317":1}}],["rf",{"2":{"6":2}}],["rmi",{"2":{"322":1}}],["rm",{"2":{"6":2,"322":1,"329":1}}],["f3e97f4f4bfa",{"2":{"403":1}}],["ffcc33",{"2":{"380":1}}],["fm=gif",{"2":{"382":1}}],["fm",{"2":{"357":1}}],["floralwhite",{"2":{"386":1}}],["flip=v",{"2":{"359":1}}],["flip",{"2":{"357":1}}],["flysystem",{"2":{"44":6,"103":1,"263":1,"277":6,"288":1}}],["f",{"2":{"316":1,"322":3,"329":1}}],["fuchsia",{"2":{"386":1}}],["full",{"2":{"278":1}}],["functionality",{"2":{"278":1}}],["function",{"2":{"78":1,"87":1}}],["functions",{"2":{"78":4,"87":4,"388":1}}],["free",{"2":{"278":1}}],["fraud",{"2":{"278":1}}],["from",{"2":{"278":2}}],["fpm",{"2":{"252":1,"308":1}}],["failures",{"2":{"278":1}}],["facilitate",{"2":{"278":1}}],["favicon",{"2":{"208":1}}],["false",{"2":{"130":1}}],["faq",{"0":{"45":1,"153":1,"180":1},"1":{"46":1,"47":1,"48":1,"49":1,"50":1},"2":{"174":1}}],["feature",{"0":{"96":1,"256":1,"283":1},"2":{"96":1,"256":1,"283":1}}],["found",{"2":{"208":2,"278":1}}],["font",{"2":{"178":1}}],["fonts",{"2":{"86":1}}],["folder",{"2":{"104":1,"264":1}}],["forestgreen",{"2":{"386":1}}],["for",{"2":{"208":2,"278":5,"287":2}}],["forge",{"2":{"208":1}}],["forwarded",{"2":{"102":1,"208":2,"262":1,"287":3}}],["format",{"2":{"64":2}}],["force",{"2":{"6":1}}],["ftp",{"0":{"117":1},"2":{"52":1,"78":1,"117":3,"157":1,"163":1,"195":1,"196":2,"229":1,"275":1,"399":1}}],["firebrick",{"2":{"386":1}}],["fit=stretch",{"2":{"367":1}}],["fit=crop",{"2":{"360":1,"361":1,"362":2}}],["fit",{"2":{"357":1}}],["fixes",{"0":{"161":1,"165":1,"167":1,"170":1}}],["fixed",{"0":{"157":1}}],["fill",{"2":{"367":2}}],["filter",{"2":{"388":1}}],["filt=sepia",{"2":{"375":1}}],["filt",{"2":{"357":1}}],["filename",{"2":{"403":1}}],["file",{"0":{"114":1}}],["files",{"2":{"79":1,"208":2,"246":1,"310":3}}],["fileinfo|mysqli|curl|mbstring|imagick|openssl|pdo|redis|session",{"2":{"78":1,"87":1}}],["fileinfo",{"2":{"53":1,"78":1,"111":1,"196":1,"231":1,"248":1,"388":1}}],["filament",{"2":{"1":2}}],["final",{"2":{"44":1,"277":1}}],["turquoise",{"2":{"386":1}}],["tan",{"2":{"386":1}}],["tar",{"2":{"330":3,"331":1,"332":1}}],["tailwind",{"2":{"10":1}}],["t",{"2":{"230":1,"316":1}}],["ttf",{"2":{"180":2}}],["teal",{"2":{"386":1}}],["terms",{"2":{"278":1}}],["technical",{"2":{"278":1}}],["telegram",{"2":{"230":1}}],["testing",{"2":{"278":1}}],["test=123",{"2":{"192":1}}],["test",{"2":{"180":2,"321":2,"401":5}}],["text",{"2":{"178":1}}],["tencentcloudapi",{"2":{"32":1,"220":1}}],["tencent",{"2":{"31":1,"219":1}}],["tls",{"2":{"132":1}}],["trojans",{"2":{"278":1}}],["transmission",{"2":{"278":1}}],["trace",{"0":{"183":1}}],["true",{"2":{"130":1}}],["trusted",{"2":{"102":1,"262":1,"287":1}}],["try",{"2":{"79":1,"208":2,"246":1,"310":3}}],["through",{"2":{"278":1}}],["threats",{"2":{"278":1}}],["that",{"2":{"278":2}}],["third",{"2":{"278":2}}],["thinkphp",{"2":{"176":1,"228":1}}],["thistle",{"2":{"386":1}}],["this",{"2":{"78":1,"87":1,"278":4}}],["they",{"2":{"278":1}}],["the",{"0":{"114":1},"2":{"278":39}}],["themes",{"2":{"6":3,"11":3,"12":2}}],["thumbnail=false",{"2":{"105":1}}],["thumbnail",{"2":{"104":1,"264":1}}],["thumbnails",{"2":{"55":1,"60":2,"83":2,"86":4,"106":1,"265":1,"269":1}}],["tomato",{"2":{"386":1}}],["top",{"2":{"361":3}}],["touch",{"2":{"317":1}}],["tool",{"2":{"278":1}}],["too",{"2":{"101":1,"261":1,"286":1}}],["to",{"2":{"78":1,"87":1,"278":13}}],["tokens",{"2":{"208":1}}],["tokenizer",{"2":{"53":1,"231":1,"388":1}}],["token",{"2":{"52":1,"152":1,"156":1,"164":1,"174":1}}],["todo",{"2":{"9":1,"346":1}}],["time",{"2":{"278":1,"403":1}}],["tiff",{"2":{"396":1}}],["tif",{"2":{"41":2,"241":2}}],["tip",{"2":{"37":1,"83":1,"84":1,"199":1,"213":1,"215":1,"225":1,"291":1,"322":1,"332":1}}],["title=lsky",{"2":{"6":1}}],["txt",{"2":{"22":1,"208":1,"345":1}}],["ts",{"2":{"6":2}}],["tsc",{"2":{"6":1}}],["typescript",{"2":{"10":1}}],["type",{"2":{"6":3,"23":1,"178":1,"179":1,"329":2,"348":1}}],["v3",{"2":{"335":1}}],["volume",{"2":{"322":2}}],["vp",{"2":{"317":1}}],["v5",{"2":{"175":1}}],["v1",{"0":{"154":1,"169":1,"171":1,"174":1,"175":1,"176":1,"177":1,"194":1},"1":{"155":1,"156":1,"157":1,"170":1,"172":1,"173":1,"175":1,"195":1,"196":1,"197":1,"198":1},"2":{"130":1,"170":1,"323":1}}],["validity",{"2":{"278":1}}],["value",{"0":{"114":1},"2":{"269":1}}],["various",{"2":{"278":1}}],["var",{"2":{"44":5,"208":1,"277":5,"319":6}}],["v",{"2":{"51":1,"58":1,"67":1,"78":1,"87":1,"269":1,"319":6,"359":1}}],["version",{"2":{"11":1,"208":1,"269":1,"287":1,"309":1}}],["v2",{"2":{"6":1}}],["violet",{"2":{"386":1}}],["violations",{"2":{"278":1}}],["violation",{"0":{"91":1,"249":1}}],["vi",{"2":{"332":1}}],["viruses",{"2":{"278":2}}],["vim",{"2":{"84":1,"332":1}}],["view",{"2":{"73":1}}],["views",{"2":{"6":2,"11":2,"12":1,"44":2,"107":1,"277":2}}],["vip",{"2":{"26":1}}],["vite",{"2":{"6":4,"10":1,"11":1,"12":1}}],["vue3",{"2":{"10":2}}],["vue",{"2":{"6":1,"10":1,"13":1}}],["odbc",{"2":{"389":1}}],["olivedrab",{"2":{"386":1}}],["olive",{"2":{"386":1}}],["oldlace",{"2":{"386":1}}],["overlay",{"2":{"377":1,"380":1}}],["obtain",{"2":{"278":1}}],["occur",{"2":{"278":1}}],["octane",{"0":{"199":1},"1":{"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1},"2":{"74":2,"199":4,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":3,"209":1}}],["other",{"2":{"278":5}}],["ota",{"2":{"163":1}}],["own",{"2":{"278":1}}],["orchid",{"2":{"386":1}}],["orangered",{"2":{"386":1}}],["orange",{"2":{"386":1}}],["or=90",{"2":{"358":1}}],["org",{"2":{"234":1,"244":1,"268":1,"269":1}}],["or",{"0":{"91":1,"249":1},"2":{"278":14,"357":1}}],["order",{"2":{"76":2}}],["out",{"2":{"83":1}}],["off",{"2":{"208":6,"310":1}}],["offset",{"2":{"178":1,"180":1}}],["of",{"2":{"78":1,"87":1,"278":16,"297":1}}],["o",{"2":{"64":1,"68":1,"298":1,"351":1}}],["oss",{"0":{"48":1,"272":1},"2":{"52":1,"195":1,"229":1,"275":1,"324":1,"399":1,"400":1}}],["only",{"2":{"6":3}}],["openssl",{"2":{"53":1,"78":1,"231":1,"388":1}}],["open",{"2":{"14":1,"199":1,"245":2,"337":1}}],["openapi",{"2":{"4":3,"6":2}}],["opcache",{"0":{"3":1},"2":{"3":2,"74":2}}],["optimize",{"2":{"2":2,"62":1,"269":1}}],["b2",{"2":{"399":2}}],["brown",{"2":{"386":1}}],["bri=",{"2":{"369":1}}],["bri",{"2":{"357":1}}],["bridge",{"2":{"319":1}}],["bisque",{"2":{"386":1}}],["bottom",{"2":{"361":3}}],["both",{"2":{"359":1}}],["border=10",{"2":{"377":1,"380":1}}],["border",{"2":{"357":1}}],["bootstrap",{"2":{"176":2}}],["beige",{"2":{"386":1}}],["beijing",{"2":{"33":1,"36":1,"221":1,"224":1}}],["be",{"2":{"278":6}}],["by",{"2":{"278":4}}],["backblaze",{"2":{"399":2}}],["basedir",{"2":{"245":2}}],["ban",{"2":{"140":1}}],["blueviolet",{"2":{"386":1}}],["blue",{"2":{"386":1}}],["blur=5",{"2":{"373":1}}],["blur",{"2":{"357":1}}],["blanchedalmond",{"2":{"386":1}}],["black",{"2":{"386":1}}],["blade",{"2":{"1":1,"6":1,"11":2,"44":4,"107":1,"277":4}}],["blob",{"2":{"197":1}}],["bg=black",{"2":{"376":1}}],["bg",{"2":{"190":1,"357":1}}],["b",{"2":{"142":1,"327":1}}],["bcmath",{"2":{"53":1,"231":1}}],["burlywood",{"2":{"386":1}}],["business",{"2":{"278":1}}],["but",{"2":{"278":3}}],["bug",{"0":{"96":1,"256":1,"283":1},"2":{"157":5,"161":3,"165":1,"167":2,"170":1,"173":1,"174":3,"176":1,"234":1}}],["bucket地域可根据你的服务器地域来决定",{"2":{"148":1}}],["bucket",{"0":{"148":1},"2":{"44":5,"277":5}}],["build",{"2":{"6":11,"7":1,"11":1,"12":3,"316":1}}],["bmp",{"2":{"41":2,"213":1,"241":2}}],["兰空图床可以通过后台管理",{"2":{"405":1}}],["兰空图床依赖",{"2":{"396":1}}],["兰空图床是使用",{"2":{"387":1}}],["兰空图床当前仅支持官方支付宝电脑网站支付",{"2":{"335":1}}],["兰空图床付费版本升级",{"2":{"325":1}}],["兰空图床通常适用于博客",{"2":{"324":1}}],["兰空图床首个版本可以追溯到",{"2":{"323":1}}],["兰空图床不支持虚拟主机搭建",{"2":{"387":1}}],["兰空图床不支持共享型虚拟主机",{"2":{"243":1}}],["兰空图床不提供构建好的镜像",{"2":{"315":1}}],["兰空图床推荐您使用",{"2":{"312":1}}],["兰空图床在生成缩略图",{"2":{"312":1}}],["兰空图床提供了两种安装方式",{"2":{"307":1}}],["兰空图床中的储存策略是整个系统的核心部分之一",{"2":{"275":1}}],["兰空图床中的角色组是整个系统的核心部分之一",{"2":{"210":1}}],["兰空图床始于",{"2":{"228":1}}],["兰空图床支持在线",{"2":{"404":1}}],["兰空图床支持",{"2":{"215":1}}],["兰空图床支持九种图片类型的文件上传",{"2":{"213":1}}],["兰空图床支持从",{"2":{"109":1,"268":1}}],["兰空图床只会对主流的",{"2":{"103":1,"263":1,"288":1}}],["兰空图床企业版需要通过",{"2":{"82":1}}],["兰空图床的数据库使用了外键约束",{"2":{"331":1}}],["兰空图床的核心功能是角色组",{"2":{"325":1}}],["兰空图床的目的就是将这些不同厂家的储存集中起来",{"2":{"324":1}}],["兰空图床的每个版本都是通过",{"2":{"244":1}}],["兰空图床的高级搜索功能",{"2":{"76":1}}],["兰空图床的图片管理功能是程序的一大亮点",{"2":{"75":1}}],["兰空图床的储存是由",{"2":{"44":1,"103":1,"263":1,"277":1,"288":1}}],["兰空图床并不推荐使用你使用水印功能",{"2":{"40":1,"240":1}}],["兰空图床",{"2":{"10":1,"228":1,"323":1}}],["兰空图床为了实现最小化安装",{"2":{"5":1}}],["兰空图床使用消息队列来异步运行程序中的耗时任务",{"2":{"392":1}}],["兰空图床使用",{"2":{"0":1}}],["您应更改配置中的",{"2":{"394":1}}],["您应该确保您的",{"2":{"388":1}}],["您必须拥有",{"2":{"387":1}}],["您必须指定宽度",{"2":{"368":1}}],["您必须要创建一个新站点安装",{"2":{"305":1}}],["您完全可以使用控制面板更方便快捷的的文件管理来编辑该文件",{"2":{"332":1}}],["您只需将该文件转移到目标服务器的指定位置",{"2":{"331":1}}],["您将储存根目录设置为程序运行目录以外的文件夹",{"2":{"330":1}}],["您还可以选择通过提供第三个值来放大焦点",{"2":{"362":1}}],["您还可以更具体地指定确切的裁剪位置",{"2":{"362":1}}],["您还可以通过添加裁剪位置来设置图像的裁剪位置",{"2":{"361":1}}],["您还可以执行以下命令查看服务运行日志",{"2":{"322":1}}],["您还可以修改环境变量文件",{"2":{"12":1}}],["您永远不应该尝试将",{"2":{"310":1}}],["您的",{"2":{"310":1}}],["您的服务器可能无法从兰空图床的服务接口中下载补丁包",{"2":{"110":1}}],["您可能还需要删除",{"2":{"353":1}}],["您可能还需要创建一个",{"2":{"309":1}}],["您可以通过登录官网个人中心",{"2":{"406":1}}],["您可以通俗的将符号链接理解为",{"2":{"401":1}}],["您可以使用以下命令",{"2":{"393":1}}],["您可以使用以下命令更新",{"2":{"83":1,"395":1}}],["您可以创建任意数量的配置文件",{"2":{"312":1,"394":1}}],["您可以在登录到个人中心",{"2":{"291":1}}],["您可以注释掉目标文件",{"2":{"8":1}}],["您可以将这个文件导入至",{"2":{"4":1}}],["您提供钱",{"2":{"291":1}}],["您现在阅读的文档是兰空图床付费版本",{"2":{"289":1}}],["您需要配置一个进程监视器",{"2":{"392":1}}],["您需要一种方法来保持您的",{"2":{"392":1}}],["您需要解压后",{"2":{"332":1}}],["您需要在您的电脑上安装",{"2":{"12":1}}],["您需要熟悉以下前端技术",{"2":{"10":1}}],["您也需要编辑所有的储存",{"2":{"333":1}}],["您也需要为您的主题设置一个唯一标识",{"2":{"11":1}}],["您也可以手动创建",{"2":{"317":1}}],["您也可以选择付费安装",{"2":{"291":1}}],["您也可以获取开源版本",{"2":{"290":1}}],["您也可以不使用脚本",{"2":{"11":1}}],["您也可以访问在线文档查看最新的内容",{"2":{"4":1}}],["规范",{"2":{"4":1}}],["snow",{"2":{"386":1}}],["slategray",{"2":{"386":1}}],["slateblue",{"2":{"386":1}}],["skyblue",{"2":{"386":1}}],["sandybrown",{"2":{"386":1}}],["salmon",{"2":{"386":1}}],["salacity",{"0":{"191":1},"2":{"130":1}}],["saddlebrown",{"2":{"386":1}}],["src=",{"2":{"358":1,"359":1,"360":1,"361":1,"362":2,"363":1,"364":1,"365":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"380":1,"381":1,"382":1,"383":1}}],["small",{"2":{"355":1}}],["smtp连接端口",{"2":{"136":1}}],["smtp端口",{"0":{"136":1}}],["smtp登录密码",{"2":{"135":1}}],["smtp登录用户名",{"2":{"134":1}}],["smtp密码",{"0":{"135":1}}],["smtp用户名",{"0":{"134":1}}],["smtp",{"2":{"133":1,"301":1}}],["smtp主机地址",{"0":{"133":1},"2":{"133":1}}],["smtp验证方式",{"0":{"132":1}}],["software",{"2":{"278":16}}],["source",{"2":{"179":1,"244":1,"269":1}}],["southeast",{"2":{"36":1,"224":1}}],["swoole",{"0":{"202":1},"2":{"199":2}}],["ssl",{"2":{"132":1}}],["ssh",{"2":{"82":1,"84":1,"87":1,"89":1,"238":1,"291":1,"306":1,"309":1,"312":1}}],["svg",{"0":{"93":1,"253":1},"2":{"93":2,"253":2}}],["svip",{"2":{"26":1}}],["systems",{"2":{"278":1}}],["system",{"0":{"190":1,"191":1,"192":1,"193":1}}],["syntax",{"0":{"91":1,"249":1}}],["symlinks",{"2":{"56":1,"62":1,"89":1,"104":1}}],["symlink",{"2":{"53":1,"231":1}}],["scheme",{"2":{"208":1,"287":1}}],["schedule",{"2":{"84":1}}],["script",{"2":{"297":1}}],["scripts",{"2":{"6":1}}],["screen",{"2":{"83":1}}],["support",{"2":{"278":1}}],["supervisorctl",{"2":{"83":3,"312":3,"395":3}}],["supervisor",{"0":{"209":1,"392":1,"393":1,"394":1,"395":1},"1":{"393":1,"394":1,"395":1},"2":{"77":1,"83":7,"312":5,"392":2,"393":3,"394":4,"395":3}}],["such",{"2":{"278":1}}],["subject",{"2":{"278":1}}],["sudo",{"2":{"83":3,"312":2,"395":2}}],["sqlstate",{"0":{"91":1,"249":1}}],["sqlsrv",{"2":{"61":1,"389":2}}],["sql",{"2":{"52":1,"54":1,"76":2,"174":1,"229":1,"232":1,"331":1,"389":2}}],["sqlite3",{"2":{"78":1,"309":4,"330":1,"331":1,"332":3,"391":1}}],["sqlite",{"2":{"52":1,"54":1,"61":1,"78":1,"229":1,"232":1,"269":2,"309":2,"317":2,"319":2,"330":1,"331":3,"389":1}}],["sftp",{"2":{"52":1,"229":1,"275":1,"399":1}}],["s3",{"2":{"52":1,"229":1,"275":1,"324":1,"399":2,"400":1}}],["sdk",{"2":{"50":1,"274":1}}],["steelblue",{"2":{"386":1}}],["stopped",{"2":{"319":1}}],["stopwaitsecs=3600",{"2":{"312":1,"394":1}}],["stopasgroup=true",{"2":{"312":1,"394":1}}],["stop",{"2":{"206":1,"322":1}}],["storage",{"2":{"22":1,"60":4,"83":2,"86":3,"234":1,"239":1,"269":4,"286":1,"312":1,"319":4,"332":1,"394":1}}],["status",{"2":{"207":1}}],["static",{"2":{"190":1}}],["start",{"2":{"83":1,"204":1,"209":1,"238":2,"312":1,"395":1}}],["startretries=3",{"2":{"83":1,"209":1}}],["startsecs=3",{"2":{"83":1,"209":1}}],["stderr=true",{"2":{"312":1,"394":1}}],["stderr",{"2":{"83":2,"209":1}}],["stdout",{"2":{"83":2,"209":1,"312":1,"394":1}}],["stretch",{"2":{"367":1}}],["string",{"2":{"44":4,"79":1,"208":1,"246":1,"277":4,"310":3}}],["strategyrequest",{"2":{"44":1,"277":1}}],["strategykey",{"2":{"44":4,"277":4}}],["strategy",{"2":{"44":6,"277":6}}],["silver",{"2":{"386":1}}],["siliconvalley",{"2":{"33":1,"221":1}}],["sienna",{"2":{"386":1}}],["single",{"0":{"190":1}}],["singapore",{"2":{"33":1,"221":1}}],["site",{"2":{"130":1}}],["size",{"0":{"114":1},"2":{"177":1,"178":1}}],["signal",{"2":{"83":1}}],["session",{"2":{"388":1}}],["seashell",{"2":{"386":1}}],["seagreen",{"2":{"386":1}}],["sepia",{"2":{"375":1}}],["sendfile",{"0":{"353":1},"2":{"351":2,"353":3}}],["sendthemecontroller",{"2":{"8":2}}],["select",{"2":{"161":1}}],["set",{"2":{"102":1,"208":9,"262":1,"287":6}}],["serial",{"2":{"61":1,"80":1,"319":2,"321":1,"322":1}}],["server=swoole",{"2":{"202":1}}],["server=roadrunner",{"2":{"201":1}}],["server",{"2":{"52":1,"54":1,"208":4,"229":1,"232":1,"310":1,"389":1}}],["services",{"2":{"44":1,"277":1,"278":1}}],["seed",{"2":{"57":1,"62":2,"269":1}}],["sexy",{"2":{"38":1,"226":1}}],["secret=",{"2":{"319":1,"321":1}}],["secret=许可证的密钥",{"2":{"61":1,"80":1}}],["secret",{"2":{"24":1,"319":1,"322":1,"350":1}}],["springgreen",{"2":{"386":1}}],["spa",{"2":{"11":1}}],["spec",{"2":{"4":1}}],["shrink",{"2":{"380":1}}],["sh",{"2":{"311":3}}],["sharp=15",{"2":{"372":1}}],["sharp",{"2":{"357":1}}],["shall",{"2":{"278":3}}],["sha1",{"2":{"177":1,"403":2}}],["shanghai",{"2":{"33":1,"36":1,"221":1,"224":1}}],["shift",{"2":{"75":1,"84":1,"332":1}}],["shenzhen",{"2":{"36":1,"224":1}}],["shellrpm",{"2":{"397":1}}],["shelldpkg",{"2":{"397":1}}],["shelldocker",{"2":{"316":1,"319":1,"322":3}}],["shellvim",{"2":{"332":1}}],["shelltar",{"2":{"330":1,"332":1}}],["shellfind",{"2":{"329":2}}],["shellapp",{"2":{"321":1}}],["shellmkdir",{"2":{"317":1}}],["shellmake",{"2":{"66":1}}],["shellgrep",{"2":{"312":2}}],["shellunzip",{"2":{"309":1}}],["shellchmod",{"2":{"311":1}}],["shellcd",{"2":{"309":1}}],["shellcrontab",{"2":{"84":1}}],["shellsudo",{"2":{"309":2,"312":1,"393":1,"395":1,"398":2}}],["shellsqlite3",{"2":{"309":1}}],["shellservice",{"2":{"84":1}}],["shellwget",{"2":{"64":1,"68":1}}],["shell",{"2":{"53":2,"65":1,"84":1,"231":1,"311":1}}],["shellnpm",{"2":{"12":2}}],["shellyarn",{"2":{"7":1,"12":2}}],["shellphpize",{"2":{"69":1}}],["shellphp",{"2":{"1":1,"2":1,"55":1,"56":1,"57":1,"62":5,"71":1,"72":1,"73":1,"78":1,"80":1,"83":1,"87":2,"89":1,"306":1,"332":1}}],["shx",{"2":{"6":5}}],["s",{"2":{"6":1,"61":1,"80":1,"83":1,"209":1,"278":2,"312":1,"394":1}}],["photos",{"2":{"400":2}}],["phpmyadmin",{"2":{"331":1}}],["php8",{"2":{"155":1,"235":1,"237":1}}],["php",{"0":{"67":1,"68":1,"388":1},"1":{"68":1,"69":1},"2":{"2":1,"3":2,"6":1,"8":3,"11":1,"29":2,"40":1,"44":15,"53":11,"67":3,"68":2,"69":1,"74":1,"77":1,"78":5,"79":1,"82":1,"83":2,"84":1,"87":6,"104":1,"106":1,"107":1,"111":2,"114":1,"117":1,"130":1,"196":2,"204":1,"205":1,"206":1,"207":1,"208":4,"214":2,"231":11,"238":3,"240":1,"243":1,"245":3,"246":1,"252":1,"265":1,"269":2,"277":15,"297":6,"308":4,"310":5,"312":1,"315":1,"323":1,"387":3,"388":20,"389":2,"392":2,"396":6,"398":1}}],["pdf",{"2":{"396":1}}],["pdo",{"2":{"53":1,"78":3,"164":1,"196":1,"231":1,"388":1,"389":1}}],["pcre",{"2":{"388":1}}],["pcntl",{"2":{"78":1,"83":2,"388":1}}],["plum",{"2":{"386":1}}],["plus",{"2":{"316":1,"319":2,"322":4}}],["peachpuff",{"2":{"386":1}}],["peru",{"2":{"386":1}}],["personnel",{"2":{"278":1}}],["permitted",{"2":{"278":1}}],["pjpg",{"2":{"381":1,"382":1}}],["p=small",{"2":{"355":2}}],["pgsql",{"2":{"61":1,"78":2,"389":1}}],["pink",{"2":{"386":1}}],["pinia",{"2":{"10":2}}],["pixel=5",{"2":{"374":1}}],["pixel",{"2":{"357":1}}],["pic",{"2":{"61":1,"80":1}}],["purple",{"2":{"386":1}}],["putenv",{"2":{"53":1,"231":1}}],["public",{"2":{"6":2,"11":1,"12":1,"47":1,"60":3,"79":1,"86":7,"104":1,"107":1,"180":3,"208":1,"239":1,"246":1,"248":1,"266":1,"269":4,"271":1,"310":6,"317":3,"319":2,"329":3,"400":1,"401":2}}],["papayawhip",{"2":{"386":1}}],["palevioletred",{"2":{"386":1}}],["paleturquoise",{"2":{"386":1}}],["palegreen",{"2":{"386":1}}],["palegoldenrod",{"2":{"386":1}}],["payment",{"2":{"344":2}}],["paypal",{"0":{"347":1},"1":{"348":1,"349":1,"350":1},"2":{"335":1,"350":1}}],["party",{"2":{"278":1}}],["parties",{"2":{"278":1}}],["pass",{"2":{"208":1}}],["password=",{"2":{"217":1,"319":1,"321":1}}],["password=null",{"2":{"88":1,"216":1}}],["password=root",{"2":{"88":1,"332":1}}],["password=redis",{"2":{"61":1,"80":1}}],["password=数据库连接密码",{"2":{"61":1}}],["password",{"0":{"186":1},"2":{"44":5,"277":5,"319":1,"322":1}}],["page",{"2":{"208":1}}],["path=your",{"2":{"104":1,"264":1}}],["package",{"2":{"6":1}}],["psd",{"2":{"41":2,"213":1,"241":2}}],["png",{"2":{"41":2,"47":1,"144":1,"213":1,"241":2,"271":1,"376":1,"382":1,"396":1,"401":5,"403":1}}],["powderblue",{"2":{"386":1}}],["port",{"2":{"208":2,"322":1}}],["port=",{"2":{"321":1}}],["port=11211",{"2":{"217":1}}],["port=6379",{"2":{"88":1,"216":1}}],["port=3306",{"2":{"88":1,"332":1}}],["port=redis",{"2":{"61":1,"80":1}}],["port=数据库连接端口",{"2":{"61":1}}],["pornography",{"2":{"278":1}}],["porn",{"2":{"38":1,"226":1}}],["postgresql",{"2":{"52":1,"54":1,"229":1,"232":1,"389":1}}],["post",{"2":{"6":2}}],["postman",{"2":{"4":1}}],["pm",{"2":{"14":1,"337":1}}],["private",{"2":{"317":2}}],["priority=999",{"2":{"209":1}}],["pr",{"2":{"103":1,"263":1,"288":1}}],["provisions",{"2":{"278":1}}],["provision",{"2":{"278":1}}],["provided",{"2":{"278":1}}],["provide",{"2":{"278":1}}],["problem",{"2":{"278":1}}],["prohibited",{"2":{"278":1}}],["profit",{"2":{"278":1}}],["pro的开发和更新等",{"2":{"198":1}}],["pro管理后台",{"2":{"149":1}}],["proto",{"2":{"102":1,"262":1,"287":1}}],["proxy",{"2":{"102":1,"208":9,"262":1,"287":6}}],["proxies",{"2":{"102":1,"262":1,"287":1}}],["process",{"2":{"83":2,"209":2,"312":2,"394":2}}],["programs",{"2":{"278":1}}],["program",{"2":{"83":2,"209":2,"312":2,"394":2}}],["pro",{"0":{"194":1},"1":{"195":1,"196":1,"197":1,"198":1},"2":{"83":6,"84":2,"88":1,"119":1,"194":2,"197":1,"228":1,"230":1,"233":1,"234":1,"244":1,"268":1,"269":1,"309":3,"312":3,"316":1,"319":2,"322":4,"330":3,"331":1,"332":2,"394":2,"395":1}}],["product",{"2":{"31":1,"34":1,"219":1,"222":1,"278":4}}],["production",{"2":{"6":1}}],["pro+",{"0":{"307":1,"323":1},"1":{"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"324":1,"325":1,"326":1},"2":{"6":1,"319":1,"321":1,"323":1}}],["prefix",{"0":{"189":1}}],["preview",{"2":{"6":2}}],["pre",{"2":{"6":2}}],["p",{"2":{"6":2,"319":1}}],["代码存储在内存中",{"2":{"3":1}}],["的功能",{"2":{"396":1}}],["的一个扩展库",{"2":{"396":1}}],["的更多信息",{"2":{"395":1,"398":1}}],["的部分函数禁用",{"2":{"388":1}}],["的最大值为",{"2":{"368":1}}],["的最大上传文件大小限制",{"2":{"114":1}}],["的比例查看图像",{"2":{"362":1}}],["的放大",{"2":{"362":1}}],["的版本和拓展必须达到要求",{"2":{"398":1}}],["的版本",{"2":{"355":1}}],["的目录",{"2":{"322":1}}],["的服务器中",{"2":{"315":1}}],["的主配置文件",{"2":{"312":1}}],["的脚本内存限制设置",{"2":{"297":1}}],["的使用文档",{"2":{"289":1}}],["的压缩包",{"2":{"244":1,"269":1}}],["的组合",{"2":{"235":1}}],["的开发和更新等",{"2":{"233":1}}],["的文件",{"2":{"167":1}}],["的链接",{"2":{"113":1}}],["的情况下",{"0":{"102":1,"262":1,"287":1}}],["的缓存",{"2":{"100":1,"260":1,"285":1}}],["的配置文件",{"2":{"297":1,"388":1}}],["的配置",{"2":{"99":1,"259":1}}],["的步骤请自行搜索相关文档",{"2":{"83":1}}],["的方式访问",{"2":{"97":1,"257":1,"284":1}}],["的方式启动队列",{"2":{"82":1}}],["的方式对数据进行排序",{"2":{"76":1}}],["的方式显示页面交互",{"2":{"11":1}}],["的编程基础",{"2":{"44":1,"277":1}}],["的格式输出",{"2":{"41":1,"241":1}}],["的默认内存限制在",{"2":{"40":1,"240":1,"297":1}}],["的图片",{"2":{"40":1,"240":1,"297":1}}],["的第",{"2":{"8":1}}],["的模板引擎渲染前端",{"2":{"5":1}}],["的",{"2":{"3":1,"11":1,"40":1,"83":1,"196":1,"240":1,"269":1,"297":1,"392":1,"396":1}}],["拓展是",{"2":{"396":1}}],["拓展和",{"2":{"396":1}}],["拓展的详细说明请查阅",{"2":{"294":1}}],["拓展控制",{"2":{"294":1}}],["拓展可以将已编译的",{"2":{"3":1}}],["拓展",{"0":{"3":1},"2":{"3":1,"53":3,"74":2,"111":1,"117":1,"196":4,"231":2,"248":1,"388":3,"389":2,"396":1}}],["cyan",{"2":{"386":1}}],["cccccc",{"2":{"385":1}}],["ccc",{"2":{"385":1}}],["center",{"2":{"361":2}}],["certain",{"2":{"78":1,"87":1}}],["certs",{"2":{"22":1}}],["czvf",{"2":{"330":1}}],["ca083d36",{"2":{"403":1}}],["cadetblue",{"2":{"386":1}}],["callback",{"2":{"344":2}}],["can",{"2":{"278":3}}],["cannot",{"2":{"278":2}}],["caused",{"2":{"278":1}}],["cache",{"2":{"1":1,"71":1,"72":1,"73":1,"108":1,"216":1,"217":1,"267":1,"317":2,"319":2}}],["chocolate",{"2":{"386":1}}],["choose",{"2":{"278":1}}],["chmod",{"2":{"317":1}}],["chartreuse",{"2":{"386":1}}],["charset",{"0":{"188":1},"2":{"208":1}}],["changed",{"0":{"152":1,"156":1,"160":1,"164":1,"168":1,"173":1}}],["check",{"2":{"6":3}}],["crimson",{"2":{"386":1}}],["crop=100",{"2":{"363":1}}],["crop",{"0":{"363":1},"2":{"357":1,"361":11,"362":1,"367":2}}],["crond",{"2":{"84":1}}],["crontab",{"2":{"84":2}}],["created",{"2":{"76":2}}],["create",{"2":{"14":1,"23":2,"337":1,"348":2}}],["curl",{"2":{"78":1,"196":1,"388":1}}],["customadapter",{"2":{"44":1,"277":1}}],["customoption",{"2":{"44":6,"277":6}}],["custom",{"2":{"44":7,"107":2,"266":1,"268":1,"277":7}}],["cd",{"2":{"64":1,"68":1,"84":1,"238":1,"309":1}}],["cdn",{"2":{"40":1,"75":1,"100":2,"164":1,"240":1,"260":2,"285":2}}],["ctype",{"2":{"53":1,"231":1,"388":1}}],["ctrl",{"2":{"43":1,"276":1}}],["cn",{"2":{"36":3,"177":1,"224":3}}],["cny",{"2":{"26":1}}],["cornsilk",{"2":{"386":1}}],["cornflowerblue",{"2":{"386":1}}],["coral",{"2":{"386":1}}],["code",{"2":{"244":1,"269":1,"319":1}}],["coding",{"2":{"160":1}}],["color",{"2":{"178":1}}],["cos",{"0":{"49":1,"273":1},"2":{"52":1,"195":1,"229":1,"275":1,"324":1,"399":1}}],["con=25",{"2":{"370":1}}],["con",{"2":{"357":1}}],["conf",{"2":{"310":1,"312":11,"394":2}}],["configuring",{"2":{"102":1,"262":1,"287":1}}],["configure",{"2":{"65":1,"69":1}}],["configs",{"2":{"44":3,"269":1,"277":3}}],["config",{"2":{"6":2,"11":1,"71":1,"130":1,"237":1}}],["conditions",{"2":{"278":1}}],["continuing",{"2":{"278":1}}],["continued",{"2":{"278":1}}],["contact",{"2":{"278":1}}],["contain",{"2":{"278":1,"367":1}}],["control",{"2":{"278":1}}],["content",{"2":{"278":2}}],["connection",{"2":{"208":1,"278":1,"287":1}}],["connection=mysql",{"2":{"88":1,"332":1}}],["connection=",{"2":{"61":1}}],["consume",{"2":{"297":1}}],["consequences",{"2":{"278":1}}],["console",{"2":{"183":1}}],["const",{"2":{"44":6,"277":6}}],["communications",{"2":{"278":1}}],["comma",{"2":{"78":1,"87":1}}],["command=php",{"2":{"83":1,"209":1,"312":1,"394":1}}],["command+a",{"2":{"75":1}}],["command",{"2":{"43":1,"276":1,"394":1}}],["compose",{"0":{"320":1},"1":{"321":1},"2":{"321":1}}],["composer",{"2":{"44":2,"277":2}}],["compatibility",{"2":{"278":3}}],["comply",{"2":{"278":2}}],["completeness",{"2":{"278":2}}],["computer",{"2":{"278":1}}],["com",{"2":{"11":1,"14":1,"31":1,"32":1,"34":1,"37":1,"44":1,"47":1,"64":1,"68":1,"102":1,"133":1,"194":1,"197":1,"208":3,"219":1,"220":1,"222":1,"225":1,"234":1,"244":1,"262":1,"268":1,"269":1,"271":1,"277":1,"287":1,"309":3,"310":3,"312":2,"319":1,"321":1,"330":1,"337":1,"344":2,"394":2,"401":2}}],["css",{"2":{"10":1,"86":1,"115":2,"123":2,"368":1}}],["claims",{"2":{"278":1}}],["class=upgradefromfreeseeder",{"2":{"62":1}}],["class=correctstatseeder",{"2":{"57":1}}],["class",{"2":{"8":2,"44":1,"277":1}}],["close",{"2":{"208":1}}],["cloud",{"2":{"31":1,"219":1}}],["clipboard",{"2":{"97":2,"257":2,"284":2}}],["clipboarditem",{"0":{"97":1,"257":1}}],["cli",{"2":{"67":1,"78":1,"82":1,"235":1,"308":1,"392":1}}],["client",{"2":{"24":1,"350":1}}],["clear",{"2":{"2":1,"62":1,"269":1}}],["cp",{"2":{"6":1}}],["它提供了",{"2":{"396":1}}],["它提供了一些很方便的缓存命令",{"2":{"0":1}}],["它可用于创建",{"2":{"396":1}}],["它将自动重启它们",{"2":{"393":1}}],["它们分别都集成了",{"2":{"387":1}}],["它们相互依赖",{"2":{"325":1}}],["它们依次是多对多的关系",{"2":{"325":1}}],["它在缓存时有更好的性能",{"2":{"1":1}}],["包括游客",{"2":{"294":1}}],["包括管理员",{"2":{"292":1}}],["包括但不限于",{"2":{"291":1}}],["包括但不限于业务损失",{"2":{"278":1}}],["包括程序在线更新后",{"2":{"199":1}}],["包括",{"2":{"199":1,"396":1,"399":1}}],["包括已上传的图片",{"2":{"104":1,"264":1}}],["包",{"2":{"1":1}}],["而如果我们在站点根目录创建了一个符号链接",{"2":{"401":1}}],["而这种路径拼接的方式",{"2":{"401":1}}],["而启动消息队列服务",{"2":{"392":1}}],["而虚拟主机没有这样的条件",{"2":{"387":1}}],["而不会裁剪或扭曲图像",{"2":{"367":1}}],["而不会裁剪",{"2":{"367":3}}],["而不会扭曲图像",{"2":{"360":1,"367":1}}],["而不是指本周内",{"2":{"27":1,"211":1}}],["而您的储存设置的根目录为",{"2":{"330":1}}],["而角色组与储存同时可以拥有多个驱动器",{"2":{"325":1}}],["而可上传的图片格式由",{"2":{"294":1}}],["而是其他原因",{"2":{"286":1}}],["而是外在原因",{"2":{"101":1,"261":1}}],["而是一串随机字符串",{"2":{"98":1,"258":1}}],["而",{"2":{"1":1,"40":1,"240":1,"297":1,"312":1,"356":1,"396":1}}],["缓存目录",{"2":{"317":1}}],["缓存驱动名称",{"2":{"216":1,"217":1}}],["缓存后",{"2":{"2":1}}],["缓存后台管理页面图标",{"0":{"1":1}}],["缓存配置",{"0":{"2":1}}],["缓存",{"0":{"0":1},"1":{"1":1,"2":1,"3":1},"2":{"60":1,"317":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/VPLocalSearchBox.DylDKewj.js b/assets/chunks/VPLocalSearchBox.DylDKewj.js new file mode 100644 index 00000000..61b10ea7 --- /dev/null +++ b/assets/chunks/VPLocalSearchBox.DylDKewj.js @@ -0,0 +1,7 @@ +var Ft=Object.defineProperty;var Ot=(a,e,t)=>e in a?Ft(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Me=(a,e,t)=>Ot(a,typeof e!="symbol"?e+"":e,t);import{V as Rt,p as ie,h as me,ah as et,ai as Ct,aj as Mt,q as $e,ak as At,d as Lt,D as xe,al as tt,am as Dt,an as zt,s as Pt,ao as jt,v as Ae,P as he,O as Se,ap as Vt,aq as $t,W as Bt,R as Wt,$ as Kt,o as H,b as Jt,j as S,a0 as Ut,k as L,ar as qt,as as Gt,at as Ht,c as Z,n as st,e as _e,C as nt,F as it,a as fe,t as pe,au as Qt,av as rt,aw as Yt,a6 as Zt,ac as Xt,ax as es,_ as ts}from"./framework.DPuwY6B9.js";import{u as ss,c as ns}from"./theme.Db2-LkiB.js";const is={root:()=>Rt(()=>import("./@localSearchIndexroot.YYQKFke3.js"),[])};/*! +* tabbable 6.2.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var mt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=mt.join(","),gt=typeof Element>"u",ae=gt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Fe=!gt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Oe=function a(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&a(e.parentNode);return i},rs=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},bt=function(e,t,s){if(Oe(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ae.call(e,Ne)&&n.unshift(e),n=n.filter(s),n},yt=function a(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!Oe(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=a(l,!0,s);s.flatten?n.push.apply(n,c):n.push({scopeParent:i,candidates:c})}else{var h=ae.call(i,Ne);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var m=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),f=!Oe(m,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(m&&f){var b=a(m===!0?i.children:m.children,!0,s);s.flatten?n.push.apply(n,b):n.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return n},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},re=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||rs(e))&&!wt(e)?0:e.tabIndex},as=function(e,t){var s=re(e);return s<0&&t&&!wt(e)?0:s},os=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},xt=function(e){return e.tagName==="INPUT"},ls=function(e){return xt(e)&&e.type==="hidden"},cs=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},us=function(e,t){for(var s=0;s如果您继续使用本软件,即表示您已阅读、理解并同意遵守上述许可证和免责声明中的所有条款和条件。
By continuing to use the Software, you indicate that you have read, understood, and agreed to comply with all the terms and conditions in the above license and disclaimer.
',6)]))}const p=t(r,[["render",s]]);export{f as __pageData,p as default}; diff --git a/assets/guide_declaration.md.CjxFhrbX.lean.js b/assets/guide_declaration.md.CjxFhrbX.lean.js new file mode 100644 index 00000000..3cb41e63 --- /dev/null +++ b/assets/guide_declaration.md.CjxFhrbX.lean.js @@ -0,0 +1 @@ +import{_ as t,c as i,a2 as o,o as a}from"./chunks/framework.DPuwY6B9.js";const f=JSON.parse('{"title":"免责声明","description":"","frontmatter":{},"headers":[],"relativePath":"guide/declaration.md","filePath":"zh/guide/declaration.md","lastUpdated":1732670620000}'),r={name:"guide/declaration.md"};function s(l,e,n,c,d,h){return a(),i("div",null,e[0]||(e[0]=[o('如果您继续使用本软件,即表示您已阅读、理解并同意遵守上述许可证和免责声明中的所有条款和条件。
By continuing to use the Software, you indicate that you have read, understood, and agreed to comply with all the terms and conditions in the above license and disclaimer.
',6)]))}const p=t(r,[["render",s]]);export{f as __pageData,p as default}; diff --git a/assets/guide_faq.md.Cp4RWM49.js b/assets/guide_faq.md.Cp4RWM49.js new file mode 100644 index 00000000..2db10812 --- /dev/null +++ b/assets/guide_faq.md.Cp4RWM49.js @@ -0,0 +1,7 @@ +import{_ as e,c as s,a2 as t,o as i}from"./chunks/framework.DPuwY6B9.js";const k=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/faq.md","filePath":"zh/guide/faq.md","lastUpdated":1732588535000}'),r={name:"guide/faq.md"};function h(n,a,p,l,o,d){return i(),s("div",null,a[0]||(a[0]=[t(`这里记录并解释一些常见的问题。
请检查伪静态、站点运行目录是否设置正确,如果确认正确请尝试重启。
不可以,程序定位就是管理图片,未做任何图片以外格式的文件支持。
其一,由于第三方储存的多样性,有些第三方储存通过客户端直传后程序拿不到需要的数据,其二,图片本身就不是非常大的文件。
是 feature,在同一个储存策略下,上传相同的图片,程序不会重复的写入文件,但会创建文件记录,多条记录指向同一个物理文件。
这与浏览器限制有关,跨域问题或站点必须以 https 的方式访问。了解更多 https://w3c.github.io/clipboard-apis/#dom-navigator-clipboard
如果你使用了 cdn,请检查是否未刷新 cdn 的缓存。
上传失败有很多原因,比如配置错误、文件较大返回 423 Request Entity Too Large 等等,出现错误通常情况下可以在 storage/logs
文件夹下找到错误日志,如果没有则表示错误并不是发生在程序中,而是其他原因。
这种情况通常是因为你的程序正在从 80 端口进行转发流量,详细解释和解决方法:https://laravel.com/docs/9.x/requests#configuring-trusted-proxies 请尝试增加反向代理配置:
proxy_http_version 1.1;
+proxy_set_header Host $http_host;
+proxy_set_header Scheme $scheme;
+proxy_set_header X-Forwarded-Proto $scheme;
+proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+proxy_set_header Upgrade $http_upgrade;
+proxy_set_header Connection $connection_upgrade;
市面上各种厂家的产品层出不穷,兰空图床只会对主流的、具备相应接口的产品作适配,兰空图床的储存是由 flysystem 实现,欢迎你提交 PR!
`,21)]))}const x=e(r,[["render",h]]);export{k as __pageData,x as default}; diff --git a/assets/guide_faq.md.Cp4RWM49.lean.js b/assets/guide_faq.md.Cp4RWM49.lean.js new file mode 100644 index 00000000..2db10812 --- /dev/null +++ b/assets/guide_faq.md.Cp4RWM49.lean.js @@ -0,0 +1,7 @@ +import{_ as e,c as s,a2 as t,o as i}from"./chunks/framework.DPuwY6B9.js";const k=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/faq.md","filePath":"zh/guide/faq.md","lastUpdated":1732588535000}'),r={name:"guide/faq.md"};function h(n,a,p,l,o,d){return i(),s("div",null,a[0]||(a[0]=[t(`这里记录并解释一些常见的问题。
请检查伪静态、站点运行目录是否设置正确,如果确认正确请尝试重启。
不可以,程序定位就是管理图片,未做任何图片以外格式的文件支持。
其一,由于第三方储存的多样性,有些第三方储存通过客户端直传后程序拿不到需要的数据,其二,图片本身就不是非常大的文件。
是 feature,在同一个储存策略下,上传相同的图片,程序不会重复的写入文件,但会创建文件记录,多条记录指向同一个物理文件。
这与浏览器限制有关,跨域问题或站点必须以 https 的方式访问。了解更多 https://w3c.github.io/clipboard-apis/#dom-navigator-clipboard
如果你使用了 cdn,请检查是否未刷新 cdn 的缓存。
上传失败有很多原因,比如配置错误、文件较大返回 423 Request Entity Too Large 等等,出现错误通常情况下可以在 storage/logs
文件夹下找到错误日志,如果没有则表示错误并不是发生在程序中,而是其他原因。
这种情况通常是因为你的程序正在从 80 端口进行转发流量,详细解释和解决方法:https://laravel.com/docs/9.x/requests#configuring-trusted-proxies 请尝试增加反向代理配置:
proxy_http_version 1.1;
+proxy_set_header Host $http_host;
+proxy_set_header Scheme $scheme;
+proxy_set_header X-Forwarded-Proto $scheme;
+proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+proxy_set_header Upgrade $http_upgrade;
+proxy_set_header Connection $connection_upgrade;
市面上各种厂家的产品层出不穷,兰空图床只会对主流的、具备相应接口的产品作适配,兰空图床的储存是由 flysystem 实现,欢迎你提交 PR!
`,21)]))}const x=e(r,[["render",h]]);export{k as __pageData,x as default}; diff --git a/assets/guide_getting-started.md.iUmwqjx1.js b/assets/guide_getting-started.md.iUmwqjx1.js new file mode 100644 index 00000000..aa2a8032 --- /dev/null +++ b/assets/guide_getting-started.md.iUmwqjx1.js @@ -0,0 +1 @@ +import{_ as r,c as t,a2 as a,o as l}from"./chunks/framework.DPuwY6B9.js";const k=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"zh/guide/getting-started.md","lastUpdated":1734915337000}'),s={name:"guide/getting-started.md"};function o(p,e,i,n,c,d){return l(),t("div",null,e[0]||(e[0]=[a('INFO
您现在阅读的文档是兰空图床付费版本 2.x 的使用文档。
如果您还没有购买,可点击购买来获取兰空图床付费版本。您也可以获取开源版本,虽然它已经停止了更新和支持,但依旧是一个可用且功能强大的系统。
付费版本一个授权仅支持一个主域名和三个子域名(必须是该主域名的子域名),同一个账号可以拥有多个授权,多次购买授权时填写的邮箱相同,那么购买的授权则会归于相同的邮箱名下。
购买后您将获得未加密的完整源码(后端以及前端源码)。禁止传播或二次售卖源码,否则我们有权删除许可证或加入黑名单。
购买前请详细调研兰空图床生态(官网、Github、论坛、演示站),在了解后确认兰空图床大概率是一款可以令您愉悦的产品后再考虑下单。
注意
由于程序的特殊性、买断制规则,购买后不支持退款,敬请谅解。
如果您已经购买了兰空图床付费版本,购买后您会收到一封带有安装包下载链接的邮件,请在收到邮件后下载该安装包。如果您没有收到邮件,请检查邮件垃圾箱。也可以通过购买时所填写的邮箱和密码,登录到个人中心后点击「下载源码」来下载最新的安装包。
注意
请不要泄露安装包、许可证编号以及许可证密钥。
程序安装需要您掌握一定的编程基础,包括但不限于:
在接下来的「入门」栏目中,我们会假设您是一名具备了一定基础知识的帅气站长,一些我们认为非常简单的东西或专业术语、命令的解释在文档中不会详细说明(但还是会尽量说明)。
如果您在安装或使用过程中遇到实在无法解决的问题,您可以在登录到个人中心,点击其他服务页面找到QQ群号,添加群后虚心请教群内小伙伴。
TIP
我们也提供了付费安装或迁移,您也可以选择付费安装,您提供钱,我们提供技术与时间。
如果您准备好了,就开始吧!
',17)]))}const f=r(s,[["render",o]]);export{k as __pageData,f as default}; diff --git a/assets/guide_getting-started.md.iUmwqjx1.lean.js b/assets/guide_getting-started.md.iUmwqjx1.lean.js new file mode 100644 index 00000000..aa2a8032 --- /dev/null +++ b/assets/guide_getting-started.md.iUmwqjx1.lean.js @@ -0,0 +1 @@ +import{_ as r,c as t,a2 as a,o as l}from"./chunks/framework.DPuwY6B9.js";const k=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"zh/guide/getting-started.md","lastUpdated":1734915337000}'),s={name:"guide/getting-started.md"};function o(p,e,i,n,c,d){return l(),t("div",null,e[0]||(e[0]=[a('INFO
您现在阅读的文档是兰空图床付费版本 2.x 的使用文档。
如果您还没有购买,可点击购买来获取兰空图床付费版本。您也可以获取开源版本,虽然它已经停止了更新和支持,但依旧是一个可用且功能强大的系统。
付费版本一个授权仅支持一个主域名和三个子域名(必须是该主域名的子域名),同一个账号可以拥有多个授权,多次购买授权时填写的邮箱相同,那么购买的授权则会归于相同的邮箱名下。
购买后您将获得未加密的完整源码(后端以及前端源码)。禁止传播或二次售卖源码,否则我们有权删除许可证或加入黑名单。
购买前请详细调研兰空图床生态(官网、Github、论坛、演示站),在了解后确认兰空图床大概率是一款可以令您愉悦的产品后再考虑下单。
注意
由于程序的特殊性、买断制规则,购买后不支持退款,敬请谅解。
如果您已经购买了兰空图床付费版本,购买后您会收到一封带有安装包下载链接的邮件,请在收到邮件后下载该安装包。如果您没有收到邮件,请检查邮件垃圾箱。也可以通过购买时所填写的邮箱和密码,登录到个人中心后点击「下载源码」来下载最新的安装包。
注意
请不要泄露安装包、许可证编号以及许可证密钥。
程序安装需要您掌握一定的编程基础,包括但不限于:
在接下来的「入门」栏目中,我们会假设您是一名具备了一定基础知识的帅气站长,一些我们认为非常简单的东西或专业术语、命令的解释在文档中不会详细说明(但还是会尽量说明)。
如果您在安装或使用过程中遇到实在无法解决的问题,您可以在登录到个人中心,点击其他服务页面找到QQ群号,添加群后虚心请教群内小伙伴。
TIP
我们也提供了付费安装或迁移,您也可以选择付费安装,您提供钱,我们提供技术与时间。
如果您准备好了,就开始吧!
',17)]))}const f=r(s,[["render",o]]);export{k as __pageData,f as default}; diff --git a/assets/guide_group.md.KGjS9baC.js b/assets/guide_group.md.KGjS9baC.js new file mode 100644 index 00000000..aff73ccf --- /dev/null +++ b/assets/guide_group.md.KGjS9baC.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as r,o}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"角色组","description":"","frontmatter":{},"headers":[],"relativePath":"guide/group.md","filePath":"zh/guide/group.md","lastUpdated":1732501360000}'),i={name:"guide/group.md"};function d(n,a,p,l,s,c){return o(),t("div",null,a[0]||(a[0]=[r('角色组是兰空图床最重要的组成部分,所有用户(包括管理员)都受角色组控制,我们可以通过角色组控制用户的可使用的储存、发件驱动、支付方式、上传限制等。
系统中可以创建多个不同的角色组,默认组或游客组同时只能存在一个,新注册用户将默认归属为默认角色组,未登录用户则使用游客组。
每个组可以分别设置多个短信驱动、邮件驱动、支付驱动。其中短信驱动与邮件驱动,程序支持故障转移功能,按顺序发件如果出现错误,则自动切换到下一个可用驱动发件。
系统中的图片上传功能,包括游客,都是通过角色组控制上传的频率、格式,而可上传的图片格式由 imagick 拓展控制。
有关 ImageMagick 拓展的详细说明请查阅 环境要求 章节。
每个角色组可以关联多个储存,属于该角色组的用户将拥有已关联的所有储存,在用户中心可以切换不同的储存上传图片。按照惯例,每个角色组应该始终最少关联一个储存。
',10)]))}const m=e(i,[["render",d]]);export{u as __pageData,m as default}; diff --git a/assets/guide_group.md.KGjS9baC.lean.js b/assets/guide_group.md.KGjS9baC.lean.js new file mode 100644 index 00000000..aff73ccf --- /dev/null +++ b/assets/guide_group.md.KGjS9baC.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as r,o}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"角色组","description":"","frontmatter":{},"headers":[],"relativePath":"guide/group.md","filePath":"zh/guide/group.md","lastUpdated":1732501360000}'),i={name:"guide/group.md"};function d(n,a,p,l,s,c){return o(),t("div",null,a[0]||(a[0]=[r('角色组是兰空图床最重要的组成部分,所有用户(包括管理员)都受角色组控制,我们可以通过角色组控制用户的可使用的储存、发件驱动、支付方式、上传限制等。
系统中可以创建多个不同的角色组,默认组或游客组同时只能存在一个,新注册用户将默认归属为默认角色组,未登录用户则使用游客组。
每个组可以分别设置多个短信驱动、邮件驱动、支付驱动。其中短信驱动与邮件驱动,程序支持故障转移功能,按顺序发件如果出现错误,则自动切换到下一个可用驱动发件。
系统中的图片上传功能,包括游客,都是通过角色组控制上传的频率、格式,而可上传的图片格式由 imagick 拓展控制。
有关 ImageMagick 拓展的详细说明请查阅 环境要求 章节。
每个角色组可以关联多个储存,属于该角色组的用户将拥有已关联的所有储存,在用户中心可以切换不同的储存上传图片。按照惯例,每个角色组应该始终最少关联一个储存。
',10)]))}const m=e(i,[["render",d]]);export{u as __pageData,m as default}; diff --git a/assets/guide_handle.md.CAJf2WN9.js b/assets/guide_handle.md.CAJf2WN9.js new file mode 100644 index 00000000..67146e1c --- /dev/null +++ b/assets/guide_handle.md.CAJf2WN9.js @@ -0,0 +1,7 @@ +import{_ as s,c as e,a2 as i,o as n}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"图片处理","description":"","frontmatter":{},"headers":[],"relativePath":"guide/handle.md","filePath":"zh/guide/handle.md","lastUpdated":1732588535000}'),t={name:"guide/handle.md"};function l(p,a,h,o,r,d){return n(),e("div",null,a[0]||(a[0]=[i(`使用图片处理功能,可以直接修改上传的原图,对原图进行诸如裁切、调整尺寸、增加滤镜、添加水印、改变图片格式等修改。
一个 3MB 的 jpeg 图片,在处理中可能会占用到 60MB 甚至更高,这是理想的状态下。但通常情况下,甚至会有可能达到 30MB 的图片。这种图片一旦使用复杂的处理规则,加上合成水印时所使用的字体文件或图片,这可能会占用大量内存,而 PHP 的默认内存限制在 128MB,会很容易导致内存溢出。
为了避免这种情况,我们建议您修改 PHP 的脚本内存限制设置。找到对应 PHP 的配置文件(php.ini),搜索配置项名称 memory_limit
,将它的值改为 512M
。如果您有处理较大图片的需求,你也可以将它设置为 1G
或更高。
...
+
+; Maximum amount of memory a script may consume
+; https://php.net/memory-limit
+memory_limit = 512M
+
+...
更改以后记得重启 PHP 和消息队列。
图片处理支持同步或异步,设置为同步后,图片处理会在图片上传那一刻处理,实时输出处理后的图片。同步处理考验服务器的内存速度、I/O 读写速度,如果图片较大,或图片处理规则比较复杂,则处理时间就会较长,这可能导致上传图片的耗时更长。
设置为异步,则在图片上传成功后直接返回图片链接,然后图片会进入消息队列,通过作业链依次执行 图片安全审核(若有)->图片处理->自动删除图片(若有)->生成缩略图,可以看到,图片安全审核在图片处理之前,也就是说,只有正常状态的图片才会进行处理。处理完成后,程序会将处理后的图片直接替换掉原图。
异步处理不影响上传时间,不会增加上传耗时,但缺点就是异步不支持自定义图片输出格式(会导致 url 被改变)。
图片保存质量取值范围为 1 到 100。
默认 75 为估算值,是最接近原图片质量的,不建议将保存质量设置超过 92 或更高,否则可能会导致图片变的非常大。
`,15)]))}const u=s(t,[["render",l]]);export{m as __pageData,u as default}; diff --git a/assets/guide_handle.md.CAJf2WN9.lean.js b/assets/guide_handle.md.CAJf2WN9.lean.js new file mode 100644 index 00000000..67146e1c --- /dev/null +++ b/assets/guide_handle.md.CAJf2WN9.lean.js @@ -0,0 +1,7 @@ +import{_ as s,c as e,a2 as i,o as n}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"图片处理","description":"","frontmatter":{},"headers":[],"relativePath":"guide/handle.md","filePath":"zh/guide/handle.md","lastUpdated":1732588535000}'),t={name:"guide/handle.md"};function l(p,a,h,o,r,d){return n(),e("div",null,a[0]||(a[0]=[i(`使用图片处理功能,可以直接修改上传的原图,对原图进行诸如裁切、调整尺寸、增加滤镜、添加水印、改变图片格式等修改。
一个 3MB 的 jpeg 图片,在处理中可能会占用到 60MB 甚至更高,这是理想的状态下。但通常情况下,甚至会有可能达到 30MB 的图片。这种图片一旦使用复杂的处理规则,加上合成水印时所使用的字体文件或图片,这可能会占用大量内存,而 PHP 的默认内存限制在 128MB,会很容易导致内存溢出。
为了避免这种情况,我们建议您修改 PHP 的脚本内存限制设置。找到对应 PHP 的配置文件(php.ini),搜索配置项名称 memory_limit
,将它的值改为 512M
。如果您有处理较大图片的需求,你也可以将它设置为 1G
或更高。
...
+
+; Maximum amount of memory a script may consume
+; https://php.net/memory-limit
+memory_limit = 512M
+
+...
更改以后记得重启 PHP 和消息队列。
图片处理支持同步或异步,设置为同步后,图片处理会在图片上传那一刻处理,实时输出处理后的图片。同步处理考验服务器的内存速度、I/O 读写速度,如果图片较大,或图片处理规则比较复杂,则处理时间就会较长,这可能导致上传图片的耗时更长。
设置为异步,则在图片上传成功后直接返回图片链接,然后图片会进入消息队列,通过作业链依次执行 图片安全审核(若有)->图片处理->自动删除图片(若有)->生成缩略图,可以看到,图片安全审核在图片处理之前,也就是说,只有正常状态的图片才会进行处理。处理完成后,程序会将处理后的图片直接替换掉原图。
异步处理不影响上传时间,不会增加上传耗时,但缺点就是异步不支持自定义图片输出格式(会导致 url 被改变)。
图片保存质量取值范围为 1 到 100。
默认 75 为估算值,是最接近原图片质量的,不建议将保存质量设置超过 92 或更高,否则可能会导致图片变的非常大。
`,15)]))}const u=s(t,[["render",l]]);export{m as __pageData,u as default}; diff --git a/assets/guide_import.md.BsuPD7ec.js b/assets/guide_import.md.BsuPD7ec.js new file mode 100644 index 00000000..7289a679 --- /dev/null +++ b/assets/guide_import.md.BsuPD7ec.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as i,o as s}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"从旧版本的数据库导入","description":"","frontmatter":{},"headers":[],"relativePath":"guide/import.md","filePath":"zh/guide/import.md","lastUpdated":1732603302000}'),l={name:"guide/import.md"};function r(o,a,h,p,n,d){return s(),t("div",null,a[0]||(a[0]=[i('如果您现在正在使用兰空图床付费版本(1.7.x),可以根据此章节将您的旧版本数据迁移至 2.x 版本中。
由于旧版本与新版本存在非常大的差异,旧版本无法直接通过在线或离线更新的方式升级到最新版本,但是我们在 2.x 版本中内置了迁移脚本。尽管如此,还是有部分数据无法完整无缝的迁移到新版本中,需要手动处理。
WARNING
迁移脚本仅迁移数据库,如果您使用了本地的储存,则需要手动将文件移动到新站点中的指定文件夹中。
系统设置、SMTP 配置、支付驱动、社会化登录驱动、角色组、储存策略、组与储存策略关联、用户、系统套餐、工单、图片、相册、分享、订单、公告、举报、违规记录、页面、意见与反馈、第三方授权。
优惠券、点赞记录、订单部分信息、页面内容、套餐内的赠送容量以及组设置。
您必须要创建一个新站点安装 2.x 版本,请参考安装章节。
登录服务器 SSH 终端,进入新站点的根目录,执行导入数据命令:
php artisan app:import
然后根据提示内容,输入旧版本的数据库连接地址等配置信息,2.x 版本程序会连接旧版本数据库,将数据导入到新版本数据库中,迁移过程中旧站点不受影响,可以正常运行。
迁移完毕后即可使用旧版本中的管理员账号,登录新站点的后台。
',18)]))}const m=e(l,[["render",r]]);export{u as __pageData,m as default}; diff --git a/assets/guide_import.md.BsuPD7ec.lean.js b/assets/guide_import.md.BsuPD7ec.lean.js new file mode 100644 index 00000000..7289a679 --- /dev/null +++ b/assets/guide_import.md.BsuPD7ec.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as i,o as s}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"从旧版本的数据库导入","description":"","frontmatter":{},"headers":[],"relativePath":"guide/import.md","filePath":"zh/guide/import.md","lastUpdated":1732603302000}'),l={name:"guide/import.md"};function r(o,a,h,p,n,d){return s(),t("div",null,a[0]||(a[0]=[i('如果您现在正在使用兰空图床付费版本(1.7.x),可以根据此章节将您的旧版本数据迁移至 2.x 版本中。
由于旧版本与新版本存在非常大的差异,旧版本无法直接通过在线或离线更新的方式升级到最新版本,但是我们在 2.x 版本中内置了迁移脚本。尽管如此,还是有部分数据无法完整无缝的迁移到新版本中,需要手动处理。
WARNING
迁移脚本仅迁移数据库,如果您使用了本地的储存,则需要手动将文件移动到新站点中的指定文件夹中。
系统设置、SMTP 配置、支付驱动、社会化登录驱动、角色组、储存策略、组与储存策略关联、用户、系统套餐、工单、图片、相册、分享、订单、公告、举报、违规记录、页面、意见与反馈、第三方授权。
优惠券、点赞记录、订单部分信息、页面内容、套餐内的赠送容量以及组设置。
您必须要创建一个新站点安装 2.x 版本,请参考安装章节。
登录服务器 SSH 终端,进入新站点的根目录,执行导入数据命令:
php artisan app:import
然后根据提示内容,输入旧版本的数据库连接地址等配置信息,2.x 版本程序会连接旧版本数据库,将数据导入到新版本数据库中,迁移过程中旧站点不受影响,可以正常运行。
迁移完毕后即可使用旧版本中的管理员账号,登录新站点的后台。
',18)]))}const m=e(l,[["render",r]]);export{u as __pageData,m as default}; diff --git a/assets/guide_install.md.DwBnLf5d.js b/assets/guide_install.md.DwBnLf5d.js new file mode 100644 index 00000000..c4f41ea4 --- /dev/null +++ b/assets/guide_install.md.DwBnLf5d.js @@ -0,0 +1,60 @@ +import{_ as i,c as a,a2 as l,o as e}from"./chunks/framework.DPuwY6B9.js";const c=JSON.parse('{"title":"安装 Lsky Pro+","description":"","frontmatter":{},"headers":[],"relativePath":"guide/install.md","filePath":"zh/guide/install.md","lastUpdated":1733385877000}'),n={name:"guide/install.md"};function t(p,s,h,k,d,r){return e(),a("div",null,s[0]||(s[0]=[l(`兰空图床提供了两种安装方式,普通安装和 docker 安装,推荐使用 docker 安装。
在开始安装之前,请确保您已经阅读过前面的环境要求章节,将必要的环境配置好。
注意,本次安装教程是在没有安装服务器控制面板的情况下进行的,仅供参考,如果您使用控制面板进行操作,实际情况可能有所不同。
为什么没有可视化安装页面?
由于 PHP 存在两种运行方式:FPM 和 CLI,通常情况下服务器这两种环境中的 PHP 版本是一致的,但是由于集成环境软件存在多个不同版本的 PHP,这就会导致两种环境 PHP 版本不一致,这种情况下就可能会造成很多小伙伴在配置消息队列时非常困惑。
首先我们必须创建一个新的站点,用来搭建兰空图床,如果您需要使用 mysql,您可能还需要创建一个 mysql 数据库。在本次教程中,我们使用推荐的 sqlite3 数据库。
检查是否安装:
sqlite3 --version
如果没有安装,请执行安装命令安装 sqlite3:
sudo apt install sqlite3 libsqlite3-dev
sudo yum install sqlite sqlite-devel
站点配置完毕以后,将安装包文件上传至站点根目录下,现在我们假设我们的站点根目录为 /www/wwwroot/app.com
,我们的安装包文件名为 lsky-pro.zip
,上传后安装包路径应该为 /www/wwwroot/app.com/lsky-pro.zip
。
接下来我们登录 SSH 终端,使用 cd
命令进入站点根目录:
cd /www/wwwroot/app.com
然后使用 unzip
命令解压安装包:
unzip lsky-pro.zip
我们需要将程序的运行目录配置为 public
,即站点的 Nginx 配置文件的站点根目录应该设置为 /www/wwwroot/app.com/public
,配置示例:
server {
+ listen 80;
+ listen [::]:80;
+ server_name app.com;
+ root /www/wwwroot/app.com/public;
+
+ # more ...
+}
为什么运行目录需要设置为 public
?
您的 Web 服务器应该将所有请求定向到您的应用程序的 public/index.php
文件。您永远不应该尝试将 index.php 文件移动到项目的根目录,因为从项目根目录提供应用程序将会将许多敏感的配置文件暴露给公共互联网。
然后继续设置伪静态,程序的 Nginx 伪静态配置示例文件位置在 public/nginx.conf
中。
location / {
+ try_files $uri $uri/ /index.php?$query_string;
+}
+
+location ~ ^/livewire {
+ expires off;
+ try_files $uri $uri/ /index.php?$query_string;
+}
+
+location ~ .*\\.(jpg|jpeg|webp|avif|bmp|gif|png|tif|tiff|jp2|j2k|jpf|jpm|jpg2|j2c|jpc|jpx|heic|heif)$ {
+ try_files $uri $uri/ /index.php?$query_string;
+}
将内容复制后,添加到站点的 nginx 伪静态配置文件中。
解压后的站点根目录存在一个安装脚本文件 install.sh
,我们给该脚本赋予可执行权限:
chmod +x install.sh
然后执行安装脚本:
./install.sh
然后根据脚本提示安装即可。
兰空图床在生成缩略图、图片处理以及发送邮件等等功能中,这些耗时任务都需要使用消息队列来执行,我们可以使用 php artisan queue:work
命令来运行消息队列。
但是这个命令在我们关闭 SSH 终端窗口后就会停止运行,所以我们需要用到 Supervisor
这样的进程管理工具,来保证消息队列进程能一直常驻运行。
Supervisor 配置文件通常存储在 /etc/supervisor/conf.d
目录中。在此目录中,您可以创建任意数量的配置文件,指示 supervisor 如何监视您的进程。例如,让我们创建一个 lsky-pro-worker.conf
文件,用来启动和监视 queue:work
进程:
[program:lsky-pro-worker]
+process_name=%(program_name)s_%(process_num)02d
+command=php /www/wwwroot/app.com/artisan queue:work
+autostart=true
+autorestart=true
+stopasgroup=true
+killasgroup=true
+user=www
+numprocs=1
+redirect_stderr=true
+stdout_logfile=/www/wwwroot/app.com/storage/logs/worker.log
+stopwaitsecs=3600
注意上面配置文件中的黄色高亮部分,尤其是 user=www
,这里指的是使用 Web 环境的运行用户 www
来运行命令,默认是 root
。
兰空图床推荐您使用 Web 服务器所使用的用户运行,避免使用最高权限的账号。没有绝对的安全,如果应用代码被攻击者利用,可能导致系统级权限被滥用,危害整个服务器。
要获取 Web 环境的执行用户,我们可以找到 Nginx 或 Apache 的主配置文件。
通常是 /etc/nginx/nginx.conf
或 /etc/nginx/conf.d/default.conf
,而 Apache 通常是在 /etc/httpd/conf/httpd.conf
或 /etc/apache2/apache2.conf
中。
执行以下命令查看用户:
grep "user" /etc/nginx/nginx.conf
grep -E "^User|^Group" /etc/httpd/conf/httpd.conf
配置文件创建完毕以后,我们重启 Supervisor:
sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start "lsky-pro-worker:*"
至此,程序安装完成。
因 PHP 源码的特殊性,兰空图床不提供构建好的镜像,需要通过本地构建镜像,然后运行。
我们需要下载源码,然后把源码上传至安装了 docker 的服务器中,然后使用终端登录服务器,进入源码根目录。
注意
以下命令都需要在目标服务器站点的根目录执行。
docker build -t lsky-pro-plus -f docker/Dockerfile .
为了方便查看上传文件、缓存、日志、数据库等,这些通常需要映射到宿主机。
执行以下命令快速创建程序运行时需要的文件夹和数据库文件(您也可以手动创建,但是不能不创建):
mkdir -vp data/{cache,logs,private,public,uploads} \\
+&& touch data/database.sqlite \\
+&& chmod -R 777 data/{public,uploads}
目录和文件解释:
data/cache
缓存目录data/logs
日志文件存放目录data/private
上传的私有文件目录,例如支付证书文件等data/public
上传的公开文件目录,例如头像等data/uploads
自定义储存上传的图片data/database.sqlite
数据库文件将以下命令中的配置替换正确后执行。
docker run -d \\
+ --name lsky-pro-plus \\
+ --env APP_NAME="Lsky Pro+" \\
+ --env APP_URL="http://localhost" \\
+ --env APP_SERIAL_NO="your_serial_no" \\
+ --env APP_SECRET="your_secret" \\
+ --env ADMIN_USERNAME="admin" \\
+ --env ADMIN_EMAIL="admin@example.com" \\
+ --env ADMIN_PASSWORD="password" \\
+ -p 8080:80 \\
+ -v app-code:/var/www \\
+ -v ./data/logs:/var/www/storage/logs \\
+ -v ./data/cache:/var/www/storage/app/cache \\
+ -v ./data/public:/var/www/storage/app/public \\
+ -v ./data/uploads:/var/www/storage/app/uploads \\
+ -v ./data/database.sqlite:/var/www/database/database.sqlite \\
+ --network bridge \\
+ --restart unless-stopped \\
+ lsky-pro-plus
将以下命令中的配置替换正确后执行。
APP_DATA="./data" \\
+APP_PORT="8080" \\
+APP_NAME="Lsky Pro+" \\
+APP_URL="http://localhost" \\
+APP_SERIAL_NO="test" \\
+APP_SECRET="test" \\
+ADMIN_USERNAME="admin" \\
+ADMIN_EMAIL="admin@qq.com" \\
+ADMIN_PASSWORD="123456" \\
+docker-compose up -d
APP_DATA
持久化数据储存位置,可以是绝对路径或相对路径APP_PORT
宿主机运行端口,默认为 8080APP_NAME
应用名称APP_URL
站点 urlAPP_SERIAL_NO
许可证编号APP_SECRET
许可证密钥ADMIN_USERNAME
管理员用户名,只能包含英文字母、数字、中横线(-)或下划线(_)ADMIN_EMAIL
管理员邮箱ADMIN_PASSWORD
管理员密码WARNING
请务必正确填写配置后执行,否则会导致安装失败,如果安装失败,可能需要删除容器后重启执行运行步骤。
docker stop lsky-pro-plus
+docker rm lsky-pro-plus
有时候你还可能需要删除镜像和储存卷:
docker rmi -f lsky-pro-plus
您还可以执行以下命令查看服务运行日志,便于排查问题:
docker logs -f lsky-pro-plus
-f 参数用于实时跟踪日志输出。
然后可以访问 http://localhost:8080 预览站点。通过反向代理提供对外服务。
TIP
成功运行后当前目录的程序文件会持久化储存在 Docker Volume 中,然后映射必要的文件到宿主机(APP_DATA 定义的位置)。
这意味着,若后续不需要重新构建容器了,除了您设置的 APP_DATA
的目录,则其他程序文件都可以删除,节省服务器储存。后续的源代码或其他文件,都通过 Docker Volume 管理。
警告
请不要将本地镜像上传至 docker hub 或打包后分发,否则可能会泄漏许可证编号或密钥等隐私数据。
兰空图床提供了两种安装方式,普通安装和 docker 安装,推荐使用 docker 安装。
在开始安装之前,请确保您已经阅读过前面的环境要求章节,将必要的环境配置好。
注意,本次安装教程是在没有安装服务器控制面板的情况下进行的,仅供参考,如果您使用控制面板进行操作,实际情况可能有所不同。
为什么没有可视化安装页面?
由于 PHP 存在两种运行方式:FPM 和 CLI,通常情况下服务器这两种环境中的 PHP 版本是一致的,但是由于集成环境软件存在多个不同版本的 PHP,这就会导致两种环境 PHP 版本不一致,这种情况下就可能会造成很多小伙伴在配置消息队列时非常困惑。
首先我们必须创建一个新的站点,用来搭建兰空图床,如果您需要使用 mysql,您可能还需要创建一个 mysql 数据库。在本次教程中,我们使用推荐的 sqlite3 数据库。
检查是否安装:
sqlite3 --version
如果没有安装,请执行安装命令安装 sqlite3:
sudo apt install sqlite3 libsqlite3-dev
sudo yum install sqlite sqlite-devel
站点配置完毕以后,将安装包文件上传至站点根目录下,现在我们假设我们的站点根目录为 /www/wwwroot/app.com
,我们的安装包文件名为 lsky-pro.zip
,上传后安装包路径应该为 /www/wwwroot/app.com/lsky-pro.zip
。
接下来我们登录 SSH 终端,使用 cd
命令进入站点根目录:
cd /www/wwwroot/app.com
然后使用 unzip
命令解压安装包:
unzip lsky-pro.zip
我们需要将程序的运行目录配置为 public
,即站点的 Nginx 配置文件的站点根目录应该设置为 /www/wwwroot/app.com/public
,配置示例:
server {
+ listen 80;
+ listen [::]:80;
+ server_name app.com;
+ root /www/wwwroot/app.com/public;
+
+ # more ...
+}
为什么运行目录需要设置为 public
?
您的 Web 服务器应该将所有请求定向到您的应用程序的 public/index.php
文件。您永远不应该尝试将 index.php 文件移动到项目的根目录,因为从项目根目录提供应用程序将会将许多敏感的配置文件暴露给公共互联网。
然后继续设置伪静态,程序的 Nginx 伪静态配置示例文件位置在 public/nginx.conf
中。
location / {
+ try_files $uri $uri/ /index.php?$query_string;
+}
+
+location ~ ^/livewire {
+ expires off;
+ try_files $uri $uri/ /index.php?$query_string;
+}
+
+location ~ .*\\.(jpg|jpeg|webp|avif|bmp|gif|png|tif|tiff|jp2|j2k|jpf|jpm|jpg2|j2c|jpc|jpx|heic|heif)$ {
+ try_files $uri $uri/ /index.php?$query_string;
+}
将内容复制后,添加到站点的 nginx 伪静态配置文件中。
解压后的站点根目录存在一个安装脚本文件 install.sh
,我们给该脚本赋予可执行权限:
chmod +x install.sh
然后执行安装脚本:
./install.sh
然后根据脚本提示安装即可。
兰空图床在生成缩略图、图片处理以及发送邮件等等功能中,这些耗时任务都需要使用消息队列来执行,我们可以使用 php artisan queue:work
命令来运行消息队列。
但是这个命令在我们关闭 SSH 终端窗口后就会停止运行,所以我们需要用到 Supervisor
这样的进程管理工具,来保证消息队列进程能一直常驻运行。
Supervisor 配置文件通常存储在 /etc/supervisor/conf.d
目录中。在此目录中,您可以创建任意数量的配置文件,指示 supervisor 如何监视您的进程。例如,让我们创建一个 lsky-pro-worker.conf
文件,用来启动和监视 queue:work
进程:
[program:lsky-pro-worker]
+process_name=%(program_name)s_%(process_num)02d
+command=php /www/wwwroot/app.com/artisan queue:work
+autostart=true
+autorestart=true
+stopasgroup=true
+killasgroup=true
+user=www
+numprocs=1
+redirect_stderr=true
+stdout_logfile=/www/wwwroot/app.com/storage/logs/worker.log
+stopwaitsecs=3600
注意上面配置文件中的黄色高亮部分,尤其是 user=www
,这里指的是使用 Web 环境的运行用户 www
来运行命令,默认是 root
。
兰空图床推荐您使用 Web 服务器所使用的用户运行,避免使用最高权限的账号。没有绝对的安全,如果应用代码被攻击者利用,可能导致系统级权限被滥用,危害整个服务器。
要获取 Web 环境的执行用户,我们可以找到 Nginx 或 Apache 的主配置文件。
通常是 /etc/nginx/nginx.conf
或 /etc/nginx/conf.d/default.conf
,而 Apache 通常是在 /etc/httpd/conf/httpd.conf
或 /etc/apache2/apache2.conf
中。
执行以下命令查看用户:
grep "user" /etc/nginx/nginx.conf
grep -E "^User|^Group" /etc/httpd/conf/httpd.conf
配置文件创建完毕以后,我们重启 Supervisor:
sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start "lsky-pro-worker:*"
至此,程序安装完成。
因 PHP 源码的特殊性,兰空图床不提供构建好的镜像,需要通过本地构建镜像,然后运行。
我们需要下载源码,然后把源码上传至安装了 docker 的服务器中,然后使用终端登录服务器,进入源码根目录。
注意
以下命令都需要在目标服务器站点的根目录执行。
docker build -t lsky-pro-plus -f docker/Dockerfile .
为了方便查看上传文件、缓存、日志、数据库等,这些通常需要映射到宿主机。
执行以下命令快速创建程序运行时需要的文件夹和数据库文件(您也可以手动创建,但是不能不创建):
mkdir -vp data/{cache,logs,private,public,uploads} \\
+&& touch data/database.sqlite \\
+&& chmod -R 777 data/{public,uploads}
目录和文件解释:
data/cache
缓存目录data/logs
日志文件存放目录data/private
上传的私有文件目录,例如支付证书文件等data/public
上传的公开文件目录,例如头像等data/uploads
自定义储存上传的图片data/database.sqlite
数据库文件将以下命令中的配置替换正确后执行。
docker run -d \\
+ --name lsky-pro-plus \\
+ --env APP_NAME="Lsky Pro+" \\
+ --env APP_URL="http://localhost" \\
+ --env APP_SERIAL_NO="your_serial_no" \\
+ --env APP_SECRET="your_secret" \\
+ --env ADMIN_USERNAME="admin" \\
+ --env ADMIN_EMAIL="admin@example.com" \\
+ --env ADMIN_PASSWORD="password" \\
+ -p 8080:80 \\
+ -v app-code:/var/www \\
+ -v ./data/logs:/var/www/storage/logs \\
+ -v ./data/cache:/var/www/storage/app/cache \\
+ -v ./data/public:/var/www/storage/app/public \\
+ -v ./data/uploads:/var/www/storage/app/uploads \\
+ -v ./data/database.sqlite:/var/www/database/database.sqlite \\
+ --network bridge \\
+ --restart unless-stopped \\
+ lsky-pro-plus
将以下命令中的配置替换正确后执行。
APP_DATA="./data" \\
+APP_PORT="8080" \\
+APP_NAME="Lsky Pro+" \\
+APP_URL="http://localhost" \\
+APP_SERIAL_NO="test" \\
+APP_SECRET="test" \\
+ADMIN_USERNAME="admin" \\
+ADMIN_EMAIL="admin@qq.com" \\
+ADMIN_PASSWORD="123456" \\
+docker-compose up -d
APP_DATA
持久化数据储存位置,可以是绝对路径或相对路径APP_PORT
宿主机运行端口,默认为 8080APP_NAME
应用名称APP_URL
站点 urlAPP_SERIAL_NO
许可证编号APP_SECRET
许可证密钥ADMIN_USERNAME
管理员用户名,只能包含英文字母、数字、中横线(-)或下划线(_)ADMIN_EMAIL
管理员邮箱ADMIN_PASSWORD
管理员密码WARNING
请务必正确填写配置后执行,否则会导致安装失败,如果安装失败,可能需要删除容器后重启执行运行步骤。
docker stop lsky-pro-plus
+docker rm lsky-pro-plus
有时候你还可能需要删除镜像和储存卷:
docker rmi -f lsky-pro-plus
您还可以执行以下命令查看服务运行日志,便于排查问题:
docker logs -f lsky-pro-plus
-f 参数用于实时跟踪日志输出。
然后可以访问 http://localhost:8080 预览站点。通过反向代理提供对外服务。
TIP
成功运行后当前目录的程序文件会持久化储存在 Docker Volume 中,然后映射必要的文件到宿主机(APP_DATA 定义的位置)。
这意味着,若后续不需要重新构建容器了,除了您设置的 APP_DATA
的目录,则其他程序文件都可以删除,节省服务器储存。后续的源代码或其他文件,都通过 Docker Volume 管理。
警告
请不要将本地镜像上传至 docker hub 或打包后分发,否则可能会泄漏许可证编号或密钥等隐私数据。
Lsky Pro+ 是一个使用 PHP 语言,采用 Laravel 框架开发的一款 Web 图片管理程序,中文名:兰空图床。
程序的设计初衷是为了使用户的图片在互联网中可以更方便的被储存、管理、处理。兰空图床首个版本可以追溯到 2018 年(v1.1)。后因个人精力有限,于2023年3月份趋于稳定后停止了开源版本更新,并转而开发了收费版本,在开源版本的基础上增加了利于商业化的功能。
已经了解过了?跳到快速开始。
兰空图床通常适用于博客、档案和营销网站,由于云服务器的储存及带宽有限,我们会使用第三方对象储存来储存图片以提高图片的访问速度,例如阿里云 OSS、腾讯云 COS,亦或者是自建的 Minio 储存。
对象储存是现代互联网云服务储存静态资源的最佳方式之一,大部分对象储存都实现了开放的、统一的接口协议(S3 API),这使得我们可以轻松的在程序中适配多种不同厂家的对象储存,兰空图床的目的就是将这些不同厂家的储存集中起来,使用一套程序管理不同厂家的对象储存中的图片资源。
不仅如此,在程序将图片上传到对象储存之前,我们可以利用程序中强大的图片处理功能,将图片处理成自己想要的格式,例如调整尺寸、缩放、滤镜、水印等等...此外,我们还集成了图片安全服务,防止站点被上传不健康的图片;加密分享功能,将您精选的图片分享给亲友、同事、小伙伴;图片云处理服务,可以通过 url 参数自定义规则来访问某个图片的不同版本(适用于所有已适配的对象储存)。
兰空图床的核心功能是角色组、储存、驱动器。角色组顾名思义,给用户分配不同的权限或限制;储存则代表第三方对象储存;驱动器分为多种:图片安全、社会化登录、云处理、支付、邮件、短信等等...
它们依次是多对多的关系,一个角色组可以拥有多个储存,而角色组与储存同时可以拥有多个驱动器,同时一个驱动器归属多个角色组或储存。它们相互依赖,共同实现了一套完整的图片处理流程。
兰空图床付费版本升级 2.x 版本后,实现了 100+ 个接口,这意味着现在的兰空图床具备更高的可拓展性,支持开发者适配原生或跨平台的客户端,不再拘泥于网页端。
Lsky Pro+ 是一个使用 PHP 语言,采用 Laravel 框架开发的一款 Web 图片管理程序,中文名:兰空图床。
程序的设计初衷是为了使用户的图片在互联网中可以更方便的被储存、管理、处理。兰空图床首个版本可以追溯到 2018 年(v1.1)。后因个人精力有限,于2023年3月份趋于稳定后停止了开源版本更新,并转而开发了收费版本,在开源版本的基础上增加了利于商业化的功能。
已经了解过了?跳到快速开始。
兰空图床通常适用于博客、档案和营销网站,由于云服务器的储存及带宽有限,我们会使用第三方对象储存来储存图片以提高图片的访问速度,例如阿里云 OSS、腾讯云 COS,亦或者是自建的 Minio 储存。
对象储存是现代互联网云服务储存静态资源的最佳方式之一,大部分对象储存都实现了开放的、统一的接口协议(S3 API),这使得我们可以轻松的在程序中适配多种不同厂家的对象储存,兰空图床的目的就是将这些不同厂家的储存集中起来,使用一套程序管理不同厂家的对象储存中的图片资源。
不仅如此,在程序将图片上传到对象储存之前,我们可以利用程序中强大的图片处理功能,将图片处理成自己想要的格式,例如调整尺寸、缩放、滤镜、水印等等...此外,我们还集成了图片安全服务,防止站点被上传不健康的图片;加密分享功能,将您精选的图片分享给亲友、同事、小伙伴;图片云处理服务,可以通过 url 参数自定义规则来访问某个图片的不同版本(适用于所有已适配的对象储存)。
兰空图床的核心功能是角色组、储存、驱动器。角色组顾名思义,给用户分配不同的权限或限制;储存则代表第三方对象储存;驱动器分为多种:图片安全、社会化登录、云处理、支付、邮件、短信等等...
它们依次是多对多的关系,一个角色组可以拥有多个储存,而角色组与储存同时可以拥有多个驱动器,同时一个驱动器归属多个角色组或储存。它们相互依赖,共同实现了一套完整的图片处理流程。
兰空图床付费版本升级 2.x 版本后,实现了 100+ 个接口,这意味着现在的兰空图床具备更高的可拓展性,支持开发者适配原生或跨平台的客户端,不再拘泥于网页端。
本文将指导您如何将兰空图床从 A 服务器迁移到 B 服务器。
要将兰空图床迁移到另一台服务器上,需要先在目标服务器上创建新的站点,同样的,目标服务器的运行环境需要达到安装要求,具体请查看环境要求章节。
注意
以下命令都需要在旧版本的根目录执行。
创建好新站点后,我们需要登录终端,进入要迁移的服务器站点根目录,第一步我们需要移除 public
目录下的符号链接。
执行命令查看符号链接:
find public -type l
执行后会输出所有符号链接,将符号链接删除:
find public -type l -exec rm -f {} +
为什么需要删除符号链接?
如果您使用 sqlite3,数据库文件默认位置为 database/database.sqlite
。
执行打包命令,压缩根目录中所有文件,并命名为 lsky-pro.tar.gz
:
tar -czvf lsky-pro.tar.gz ./
打包完成后,将 lsky-pro.tar.gz
文件以任何方式上传到目标服务器的站点根目录。
此外,如果您使用了本地储存,并且在储存配置中,您将储存根目录设置为程序运行目录以外的文件夹;举例:假如您的站点目录为 /www/wwwroot/app.com
,而您的储存设置的根目录为 /mnt/data
,那么您还需要将目录 /mnt/data
压缩并转移到目标服务器。
如果您使用的是 sqlite3,数据库文件默认位置为 database/database.sqlite
,只要您没有调整这个文件的位置,那么在上一步「打包文件」中就已经一同打包进 lsky-pro.tar.gz
中了,不需要额外处理。
相反,如果您修改了该文件位置,您只需将该文件转移到目标服务器的指定位置,然后修改 .env
配置:
DB_DATABASE=laravel # 将 laravel 替换成您的 sqlite 文件所在路径,例如:database/database.sqlite
如果您使用的是 mysql 或其他数据库,并且数据库是和站点是在同一个服务器中安装的,那么您可以登录数据库管理软件或使用终端的方式,导出数据库文件,并将文件转移至目标服务器中的数据库或其他远程数据库。
注意
兰空图床的数据库使用了外键约束,使用第三方软件备份时需要额外注意,有可能会因为外键约束这个特性造成了部分数据表丢失的情况。推荐使用 navicat 或 phpmyadmin 导出 sql 文件。
注意
以下命令都需要在目标服务器站点的根目录执行。
确保数据库、相关文件都转移到目标服务器后,我们需要使用终端进入目标服务器的站点根目录,执行解压命令:
tar -xzvf lsky-pro.tar.gz
如果您使用的是 sqlite3,并且没有更改 sqlite3 数据库的文件位置。那么您可以不做任何改动。
如果您使用的是 sqlite3 以外的数据库,您需要解压后,使用 vi
或 vim
命令打开 .env
文件:
vim ./.env
执行后按下键盘 i
键进入编辑模式,将数据配置更新为您的新站点需要的数据库(需提前导入):
...
+
+DB_CONNECTION=mysql # 数据库连接类型
+DB_HOST=127.0.0.1 # 数据库连接地址
+DB_PORT=3306 # 数据库连接端口
+DB_DATABASE=lsky_pro # 数据库名称
+DB_USERNAME=root # 数据库连接账号
+DB_PASSWORD=root # 数据库连接密码
+
+...
编辑完毕后,按 esc
退出编辑模式,然后按住键盘 shift
+ :
输入 wq
以保存并退出。
TIP
如果您使用了服务器控制面板,您完全可以使用控制面板更方便快捷的的文件管理来编辑该文件。
接下来执行命令生成符号链接:
php artisan storage:link
别急,还没完,我们还需要像教程安装章节中那样,配置站点运行目录以及伪静态。
另外我们的新站点,记得确保根目录以及子目录的文件夹、文件的用户组都是 web 服务器运行的用户,即 www
或 www-data
。
如果您使用了本地储存,本地储存的储存目录配置也许会在您迁移了新的服务器后路径发生了变化,这个时候需要您去登录程序后台,将储存配置的储存目录路径,修改成现在所在服务器的储存根路径。
即使路径没有发生变化,您也需要编辑所有的储存,重新保存一下以生成符号链接。
除此之外:
最后一步,请不要忽略了这一步。我们需要像教程安装章节中那样,配置消息队列。
配置完毕后,通过新站点的域名访问前端,测试功能是否正常。
`,47)]))}const g=a(l,[["render",p]]);export{r as __pageData,g as default}; diff --git a/assets/guide_migrate.md.ByrKD35n.lean.js b/assets/guide_migrate.md.ByrKD35n.lean.js new file mode 100644 index 00000000..09458fb6 --- /dev/null +++ b/assets/guide_migrate.md.ByrKD35n.lean.js @@ -0,0 +1,10 @@ +import{_ as a,c as i,a2 as e,o as t}from"./chunks/framework.DPuwY6B9.js";const r=JSON.parse('{"title":"迁移","description":"","frontmatter":{},"headers":[],"relativePath":"guide/migrate.md","filePath":"zh/guide/migrate.md","lastUpdated":1732603302000}'),l={name:"guide/migrate.md"};function p(n,s,h,d,o,k){return t(),i("div",null,s[0]||(s[0]=[e(`本文将指导您如何将兰空图床从 A 服务器迁移到 B 服务器。
要将兰空图床迁移到另一台服务器上,需要先在目标服务器上创建新的站点,同样的,目标服务器的运行环境需要达到安装要求,具体请查看环境要求章节。
注意
以下命令都需要在旧版本的根目录执行。
创建好新站点后,我们需要登录终端,进入要迁移的服务器站点根目录,第一步我们需要移除 public
目录下的符号链接。
执行命令查看符号链接:
find public -type l
执行后会输出所有符号链接,将符号链接删除:
find public -type l -exec rm -f {} +
为什么需要删除符号链接?
如果您使用 sqlite3,数据库文件默认位置为 database/database.sqlite
。
执行打包命令,压缩根目录中所有文件,并命名为 lsky-pro.tar.gz
:
tar -czvf lsky-pro.tar.gz ./
打包完成后,将 lsky-pro.tar.gz
文件以任何方式上传到目标服务器的站点根目录。
此外,如果您使用了本地储存,并且在储存配置中,您将储存根目录设置为程序运行目录以外的文件夹;举例:假如您的站点目录为 /www/wwwroot/app.com
,而您的储存设置的根目录为 /mnt/data
,那么您还需要将目录 /mnt/data
压缩并转移到目标服务器。
如果您使用的是 sqlite3,数据库文件默认位置为 database/database.sqlite
,只要您没有调整这个文件的位置,那么在上一步「打包文件」中就已经一同打包进 lsky-pro.tar.gz
中了,不需要额外处理。
相反,如果您修改了该文件位置,您只需将该文件转移到目标服务器的指定位置,然后修改 .env
配置:
DB_DATABASE=laravel # 将 laravel 替换成您的 sqlite 文件所在路径,例如:database/database.sqlite
如果您使用的是 mysql 或其他数据库,并且数据库是和站点是在同一个服务器中安装的,那么您可以登录数据库管理软件或使用终端的方式,导出数据库文件,并将文件转移至目标服务器中的数据库或其他远程数据库。
注意
兰空图床的数据库使用了外键约束,使用第三方软件备份时需要额外注意,有可能会因为外键约束这个特性造成了部分数据表丢失的情况。推荐使用 navicat 或 phpmyadmin 导出 sql 文件。
注意
以下命令都需要在目标服务器站点的根目录执行。
确保数据库、相关文件都转移到目标服务器后,我们需要使用终端进入目标服务器的站点根目录,执行解压命令:
tar -xzvf lsky-pro.tar.gz
如果您使用的是 sqlite3,并且没有更改 sqlite3 数据库的文件位置。那么您可以不做任何改动。
如果您使用的是 sqlite3 以外的数据库,您需要解压后,使用 vi
或 vim
命令打开 .env
文件:
vim ./.env
执行后按下键盘 i
键进入编辑模式,将数据配置更新为您的新站点需要的数据库(需提前导入):
...
+
+DB_CONNECTION=mysql # 数据库连接类型
+DB_HOST=127.0.0.1 # 数据库连接地址
+DB_PORT=3306 # 数据库连接端口
+DB_DATABASE=lsky_pro # 数据库名称
+DB_USERNAME=root # 数据库连接账号
+DB_PASSWORD=root # 数据库连接密码
+
+...
编辑完毕后,按 esc
退出编辑模式,然后按住键盘 shift
+ :
输入 wq
以保存并退出。
TIP
如果您使用了服务器控制面板,您完全可以使用控制面板更方便快捷的的文件管理来编辑该文件。
接下来执行命令生成符号链接:
php artisan storage:link
别急,还没完,我们还需要像教程安装章节中那样,配置站点运行目录以及伪静态。
另外我们的新站点,记得确保根目录以及子目录的文件夹、文件的用户组都是 web 服务器运行的用户,即 www
或 www-data
。
如果您使用了本地储存,本地储存的储存目录配置也许会在您迁移了新的服务器后路径发生了变化,这个时候需要您去登录程序后台,将储存配置的储存目录路径,修改成现在所在服务器的储存根路径。
即使路径没有发生变化,您也需要编辑所有的储存,重新保存一下以生成符号链接。
除此之外:
最后一步,请不要忽略了这一步。我们需要像教程安装章节中那样,配置消息队列。
配置完毕后,通过新站点的域名访问前端,测试功能是否正常。
`,47)]))}const g=a(l,[["render",p]]);export{r as __pageData,g as default}; diff --git a/assets/guide_payment.md.w7gQBnKH.js b/assets/guide_payment.md.w7gQBnKH.js new file mode 100644 index 00000000..8fa7b6e2 --- /dev/null +++ b/assets/guide_payment.md.w7gQBnKH.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as p,o as r}from"./chunks/framework.DPuwY6B9.js";const o="/payment/alipay/1.png",l="/payment/alipay/2.png",n="/payment/alipay/3.png",i="/payment/alipay/4.png",h="/payment/alipay/5.png",c="/payment/alipay/6.png",s="/payment/alipay/7.png",m="/payment/alipay/8.png",d="/payment/alipay/10.png",y="/payment/alipay/11.png",b="/payment/paypal/1.png",_="/payment/paypal/2.png",u="/payment/paypal/3.png",g="/payment/paypal/4.png",D=JSON.parse('{"title":"支付驱动","description":"","frontmatter":{},"headers":[],"relativePath":"guide/payment.md","filePath":"zh/guide/payment.md","lastUpdated":1734183345000}'),k={name:"guide/payment.md"};function f(q,a,P,x,W,v){return r(),t("div",null,a[0]||(a[0]=[p('兰空图床当前仅支持官方支付宝电脑网站支付、微信 Native 支付,PayPal,并且支付宝仅支持证书模式、微信仅支持 V3 版本。
前往开发者中心,点击 https://open.alipay.com/develop/pm/create 创建网页移动应用。
创建好应用后进入应用,点击「产品绑定」,选择「支付」-> 「电脑网站支付」
绑定完成后,如果显示「产品开通状态」显示为「未开通」则需要根据支付宝的指引去开通,否则支付功能无法使用。
加签方式选择第二项「证书」
上传成功后,将证书全部下载。
回调地址固定为 站点域名 + payment/callback
,假设站点域名为 http://example.com
,即:http://example.com/payment/callback
将其填入支付宝的授权回调地址中。
然后打开刚刚由证书生成软件生成的证书目录,复制 应用私钥RSA2048-敏感数据,请妥善保管.txt
文件内容,将其填写到兰空图床后台配置中,并上传三份证书文件。
上传完成后点击保存即可。
todo
进入开发者中心,点击 Create App 来创建一个应用,注意,文档图片中处于沙盒环境。
Type 选择 Merchant
点击 Create App 确认创建。
同样的,PayPal 我们也需要配置回调,即 Webhook。我们点击进应用详情,滚动到最底部,找到 Webhook 那一栏,创建一个 Webhook。
创建成功后我们会在列表看到 Webhook ID。
将应用的 Client ID 和 Secret key 以及 WebHook ID 填入兰空图片后台支付配置中既可。
',45)]))}const I=e(k,[["render",f]]);export{D as __pageData,I as default}; diff --git a/assets/guide_payment.md.w7gQBnKH.lean.js b/assets/guide_payment.md.w7gQBnKH.lean.js new file mode 100644 index 00000000..8fa7b6e2 --- /dev/null +++ b/assets/guide_payment.md.w7gQBnKH.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a2 as p,o as r}from"./chunks/framework.DPuwY6B9.js";const o="/payment/alipay/1.png",l="/payment/alipay/2.png",n="/payment/alipay/3.png",i="/payment/alipay/4.png",h="/payment/alipay/5.png",c="/payment/alipay/6.png",s="/payment/alipay/7.png",m="/payment/alipay/8.png",d="/payment/alipay/10.png",y="/payment/alipay/11.png",b="/payment/paypal/1.png",_="/payment/paypal/2.png",u="/payment/paypal/3.png",g="/payment/paypal/4.png",D=JSON.parse('{"title":"支付驱动","description":"","frontmatter":{},"headers":[],"relativePath":"guide/payment.md","filePath":"zh/guide/payment.md","lastUpdated":1734183345000}'),k={name:"guide/payment.md"};function f(q,a,P,x,W,v){return r(),t("div",null,a[0]||(a[0]=[p('兰空图床当前仅支持官方支付宝电脑网站支付、微信 Native 支付,PayPal,并且支付宝仅支持证书模式、微信仅支持 V3 版本。
前往开发者中心,点击 https://open.alipay.com/develop/pm/create 创建网页移动应用。
创建好应用后进入应用,点击「产品绑定」,选择「支付」-> 「电脑网站支付」
绑定完成后,如果显示「产品开通状态」显示为「未开通」则需要根据支付宝的指引去开通,否则支付功能无法使用。
加签方式选择第二项「证书」
上传成功后,将证书全部下载。
回调地址固定为 站点域名 + payment/callback
,假设站点域名为 http://example.com
,即:http://example.com/payment/callback
将其填入支付宝的授权回调地址中。
然后打开刚刚由证书生成软件生成的证书目录,复制 应用私钥RSA2048-敏感数据,请妥善保管.txt
文件内容,将其填写到兰空图床后台配置中,并上传三份证书文件。
上传完成后点击保存即可。
todo
进入开发者中心,点击 Create App 来创建一个应用,注意,文档图片中处于沙盒环境。
Type 选择 Merchant
点击 Create App 确认创建。
同样的,PayPal 我们也需要配置回调,即 Webhook。我们点击进应用详情,滚动到最底部,找到 Webhook 那一栏,创建一个 Webhook。
创建成功后我们会在列表看到 Webhook ID。
将应用的 Client ID 和 Secret key 以及 WebHook ID 填入兰空图片后台支付配置中既可。
',45)]))}const I=e(k,[["render",f]]);export{D as __pageData,I as default}; diff --git a/assets/guide_process.md.ypCnhOGt.js b/assets/guide_process.md.ypCnhOGt.js new file mode 100644 index 00000000..94847bb4 --- /dev/null +++ b/assets/guide_process.md.ypCnhOGt.js @@ -0,0 +1,4 @@ +import{_ as a,c as s,a2 as l,o as t}from"./chunks/framework.DPuwY6B9.js";const c=JSON.parse('{"title":"云处理","description":"","frontmatter":{},"headers":[],"relativePath":"guide/process.md","filePath":"zh/guide/process.md","lastUpdated":1732945508000}'),e={name:"guide/process.md"};function h(d,i,p,n,o,r){return t(),s("div",null,i[0]||(i[0]=[l(`云处理功能是一个通过 url 参数实时修改图片样式并输出的功能,支持任何已适配的储存。处理后的图片会自动缓存在本地服务器中,并支持两种输出响应方式(流输出、X-Sendfile)。
流输出是通过程序加载缓存文件到内存中,然后通过程序输出到客户端,对服务器有着较高的 I/O 性能要求。
X-Sendfile 是通过输出特定的 Header 告诉 Web 服务器文件所在位置,然后通过服务器内部重定向,将文件直接输出给客户端,推荐使用该方式(当前仅支持 Nginx,需配置伪静态使用)。
要使用云处理,需要先创建云处理驱动器,设置一个文件缓存目录后,将任意一个储存关联该云处理驱动器即可,该储存中的图片都可以使用云处理。
使用 X-Sendfile 能够极大的提高图片访问速度,当前仅支持 Nginx,并且 nginx 需要安装 ngx_http_sendfile_module
模块。
编辑云处理驱动器配置,修改「云处理文件输出方式」为 X-Sendfile 后,页面会显示 Nginx 配置,我们将该配置信息,复制到站点伪静态配置结尾,或者复制到 nginx 配置中即可。
注意,如果配置后未生效,您可能还需要删除 nginx 类似这种配置:
location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
+{
+ expires 30d;
+}
通过预设一个或多个不同的版本,通过预设来处理不同的图片样式。例如我们预设一个名称为 small
的版本,其中自定义参数设置了 w
为 200,h
为 400,即图片的宽高设置为 200x400。然后我们就可以通过图片的 url 参数定义 kayaks.jpg?p=small
使这个图片应用这个预设。
我们还可以通过逗号分隔,来按顺序应用多个预设,例如:kayaks.jpg?p=small,rotate,zoom
。
支持参数是自定义程序更高的一种配置,提供更细粒度的样式控制,用户可以通过选择的支持参数自由的控制图片样式,例如我们在「支持参数」功能中允许了 w
参数,任何访客或用户都可以在 url 上追加 w
参数来控制图片宽度:kayaks.jpg?w=1000
请谨慎选择支持参数
配置云处理时推荐仅使用「预设版本」,而「支持参数」中默认都是未选择的,如果选择了,容易受到大规模图像调整大小攻击,比如使用随机参数请求图片,会造成系统频繁的处理图片,占用系统资源。
名称 | 功能 | 描述 | |
---|---|---|---|
方向 | or | 旋转图像。 | 信息 |
翻转 | flip | 翻转图像。 | 信息 |
裁剪 | crop | 裁剪图像到指定尺寸。 | 信息 |
宽度 | w | 设置图像的宽度(像素)。 | 信息 |
高度 | h | 设置图像的高度(像素)。 | 信息 |
适配 | fit | 设置图像如何适配目标尺寸。 | 信息 |
设备像素比 | dpr | 按比例调整图像大小。 | 信息 |
亮度 | bri | 调整图像亮度。 | 信息 |
对比度 | con | 调整图像对比度。 | 信息 |
伽马 | gam | 调整图像伽马值。 | 信息 |
锐化 | sharp | 锐化图像。 | 信息 |
模糊 | blur | 为图像添加模糊效果。 | 信息 |
像素化 | pixel | 为图像添加像素化效果。 | 信息 |
滤镜 | filt | 为图像应用滤镜效果。 | 信息 |
背景色 | bg | 设置图像的背景颜色。 | 信息 |
边框 | border | 为图像添加边框。 | 信息 |
质量 | q | 设置图像的质量。 | 信息 |
格式 | fm | 将图像编码为指定格式。 | 信息 |
以下是您提供的英文部分翻译成中文的内容:
旋转图像。接受 auto
、0
、90
、180
或 270
。默认值为 auto
。auto
选项使用 Exif 数据自动正确地定向图像。
<img src="kayaks.jpg?h=500&or=90">
翻转图像。接受 v
、h
和 both
。
<img src="kayaks.jpg?h=500&flip=v">
调整图像大小以填充宽度和高度边界,并裁剪任何多余的图像数据。生成的图像将匹配宽度和高度约束,而不会扭曲图像。
<img src="kayaks.jpg?w=300&h=300&fit=crop">
您还可以通过添加裁剪位置来设置图像的裁剪位置。接受 crop-top-left
、crop-top
、crop-top-right
、crop-left
、crop-center
、crop-right
、crop-bottom-left
、crop-bottom
或 crop-bottom-right
。默认值为 crop-center
,与 crop
相同。
<img src="kayaks.jpg?w=300&h=300&fit=crop-left">
除了裁剪位置,您还可以更具体地指定确切的裁剪位置,使用焦点。这是使用两个偏移百分比定义的:crop-x%-y%
。
<img src="kayaks.jpg?w=300&h=300&fit=crop-25-75">
您还可以选择通过提供第三个值来放大焦点:一个介于 1 和 100 之间的浮点数。每一个完整的步骤相当于 100% 的放大(例如,x%-y%-2
相当于以 200% 的比例查看图像)。建议范围为 1-10。
<img src="kayaks.jpg?w=300&h=300&fit=crop-25-75-2">
crop
在任何其他调整大小操作之前,将图像裁剪到特定尺寸。所需格式:width,height,x,y
。
<img src="kayaks.jpg?crop=100,100,915,155">
设置图像的宽度,以像素为单位。
<img src="kayaks.jpg?w=500">
设置图像的高度,以像素为单位。
<img src="kayaks.jpg?h=333">
设置图像如何适配目标尺寸。
contain
:默认值。调整图像大小以适应宽度和高度边界,而不会裁剪、扭曲或改变纵横比。max
:调整图像大小以适应宽度和高度边界,而不会裁剪、扭曲或改变纵横比,并且如果图像小于输出尺寸,也不会增加图像大小。fill
:调整图像大小以适应宽度和高度边界,而不会裁剪或扭曲图像,剩余空间用背景颜色填充。生成的图像将匹配约束尺寸。fill-max
:调整图像大小以适应宽度和高度边界,而不会裁剪,但如果图像较小,则会放大图像。完成的图像将在宽度或高度上有剩余空间(除非新图像的纵横比与旧图像相同)。剩余空间将用背景颜色填充。生成的图像将匹配约束尺寸。stretch
:拉伸图像以精确适应约束尺寸。生成的图像将填充尺寸,并且不会保持输入图像的纵横比。crop
:调整图像大小以填充宽度和高度边界,并裁剪任何多余的图像数据。生成的图像将匹配宽度和高度约束,而不会扭曲图像。有关更多信息,请参见 crop。<img src="kayaks.jpg?w=300&h=300&fit=stretch">
设备像素比用于轻松在 CSS 像素和设备像素之间转换。这使得在各种设备上以正确的像素密度显示图像成为可能,例如带有 Retina 显示屏的 Apple 设备和 Android 设备。您必须指定宽度、高度或两者之一才能使此参数生效。默认值为 1。dpr 的最大值为 8。
<img src="kayaks.jpg?w=250&dpr=2">
调整图像亮度。使用 -100
到 +100
之间的值,其中 0
表示不变。
<img src="kayaks.jpg?w=500&bri=-25">
调整图像对比度。使用 -100
到 +100
之间的值,其中 0
表示不变。
<img src="kayaks.jpg?w=500&con=25">
调整图像伽马值。使用 0.1
到 9.99
之间的值。
<img src="kayaks.jpg?w=500&gam=1.5">
锐化图像。使用 0
到 100
之间的值。
<img src="kayaks.jpg?w=500&sharp=15">
为图像添加模糊效果。使用 0
到 100
之间的值。
<img src="kayaks.jpg?w=500&blur=5">
为图像添加像素化效果。使用 0
到 1000
之间的值。
<img src="kayaks.jpg?w=500&pixel=5">
为图像应用滤镜效果。接受 greyscale
或 sepia
。
<img src="kayaks.jpg?w=500&filt=sepia">
设置图片的背景色。更多颜色格式信息请参阅颜色。
<img src="logo.png?w=400&bg=black">
为图片添加边框。格式要求:宽度,颜色,方式
。
<img src="kayaks.jpg?w=500&border=10,5000,overlay">
设置边框宽度,单位为像素,也可使用相对尺寸。
设置边框颜色。更多颜色格式信息请参阅颜色。
设置边框的显示方式。可用选项包括:
overlay
:边框叠加在图片上(默认)。shrink
:图片在边框内缩小(画布大小不变)。expand
:画布扩展以容纳边框。<img src="kayaks.jpg?w=500&border=10,FFCC33,expand">
定义图片的质量。取值范围为 0
至 100
,默认值为 90
。仅当格式设置为 jpg
、pjpg
、webp
或 avif
时有效。
<img src="kayaks.jpg?w=500&q=25">
将图片编码为特定格式。可选值为 jpg
、pjpg
(渐进式 jpeg)、png
、gif
、webp
或 avif
。默认值为 jpg
。
<img src="kayaks.jpg?w=500&fm=gif">
相对尺寸允许您指定宽度或高度值作为主图像的百分比。这对水印和边框等功能很有帮助。
要使用相对维度,只需提供百分比作为数字(介于“0”和“100”之间),后跟“w”(宽度)或“h”(高度)。例如,“5w”表示主图像宽度的5%。
<img src="kayaks.jpg?w=5w">
支持多种颜色格式。除了所有现代浏览器支持的 140 种颜色名称(如下所列)之外,还接受十六进制 RGB 和 RBG alpha 格式。
CCC
5CCC
CCCCCC
55CCCCCC
云处理功能是一个通过 url 参数实时修改图片样式并输出的功能,支持任何已适配的储存。处理后的图片会自动缓存在本地服务器中,并支持两种输出响应方式(流输出、X-Sendfile)。
流输出是通过程序加载缓存文件到内存中,然后通过程序输出到客户端,对服务器有着较高的 I/O 性能要求。
X-Sendfile 是通过输出特定的 Header 告诉 Web 服务器文件所在位置,然后通过服务器内部重定向,将文件直接输出给客户端,推荐使用该方式(当前仅支持 Nginx,需配置伪静态使用)。
要使用云处理,需要先创建云处理驱动器,设置一个文件缓存目录后,将任意一个储存关联该云处理驱动器即可,该储存中的图片都可以使用云处理。
使用 X-Sendfile 能够极大的提高图片访问速度,当前仅支持 Nginx,并且 nginx 需要安装 ngx_http_sendfile_module
模块。
编辑云处理驱动器配置,修改「云处理文件输出方式」为 X-Sendfile 后,页面会显示 Nginx 配置,我们将该配置信息,复制到站点伪静态配置结尾,或者复制到 nginx 配置中即可。
注意,如果配置后未生效,您可能还需要删除 nginx 类似这种配置:
location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
+{
+ expires 30d;
+}
通过预设一个或多个不同的版本,通过预设来处理不同的图片样式。例如我们预设一个名称为 small
的版本,其中自定义参数设置了 w
为 200,h
为 400,即图片的宽高设置为 200x400。然后我们就可以通过图片的 url 参数定义 kayaks.jpg?p=small
使这个图片应用这个预设。
我们还可以通过逗号分隔,来按顺序应用多个预设,例如:kayaks.jpg?p=small,rotate,zoom
。
支持参数是自定义程序更高的一种配置,提供更细粒度的样式控制,用户可以通过选择的支持参数自由的控制图片样式,例如我们在「支持参数」功能中允许了 w
参数,任何访客或用户都可以在 url 上追加 w
参数来控制图片宽度:kayaks.jpg?w=1000
请谨慎选择支持参数
配置云处理时推荐仅使用「预设版本」,而「支持参数」中默认都是未选择的,如果选择了,容易受到大规模图像调整大小攻击,比如使用随机参数请求图片,会造成系统频繁的处理图片,占用系统资源。
名称 | 功能 | 描述 | |
---|---|---|---|
方向 | or | 旋转图像。 | 信息 |
翻转 | flip | 翻转图像。 | 信息 |
裁剪 | crop | 裁剪图像到指定尺寸。 | 信息 |
宽度 | w | 设置图像的宽度(像素)。 | 信息 |
高度 | h | 设置图像的高度(像素)。 | 信息 |
适配 | fit | 设置图像如何适配目标尺寸。 | 信息 |
设备像素比 | dpr | 按比例调整图像大小。 | 信息 |
亮度 | bri | 调整图像亮度。 | 信息 |
对比度 | con | 调整图像对比度。 | 信息 |
伽马 | gam | 调整图像伽马值。 | 信息 |
锐化 | sharp | 锐化图像。 | 信息 |
模糊 | blur | 为图像添加模糊效果。 | 信息 |
像素化 | pixel | 为图像添加像素化效果。 | 信息 |
滤镜 | filt | 为图像应用滤镜效果。 | 信息 |
背景色 | bg | 设置图像的背景颜色。 | 信息 |
边框 | border | 为图像添加边框。 | 信息 |
质量 | q | 设置图像的质量。 | 信息 |
格式 | fm | 将图像编码为指定格式。 | 信息 |
以下是您提供的英文部分翻译成中文的内容:
旋转图像。接受 auto
、0
、90
、180
或 270
。默认值为 auto
。auto
选项使用 Exif 数据自动正确地定向图像。
<img src="kayaks.jpg?h=500&or=90">
翻转图像。接受 v
、h
和 both
。
<img src="kayaks.jpg?h=500&flip=v">
调整图像大小以填充宽度和高度边界,并裁剪任何多余的图像数据。生成的图像将匹配宽度和高度约束,而不会扭曲图像。
<img src="kayaks.jpg?w=300&h=300&fit=crop">
您还可以通过添加裁剪位置来设置图像的裁剪位置。接受 crop-top-left
、crop-top
、crop-top-right
、crop-left
、crop-center
、crop-right
、crop-bottom-left
、crop-bottom
或 crop-bottom-right
。默认值为 crop-center
,与 crop
相同。
<img src="kayaks.jpg?w=300&h=300&fit=crop-left">
除了裁剪位置,您还可以更具体地指定确切的裁剪位置,使用焦点。这是使用两个偏移百分比定义的:crop-x%-y%
。
<img src="kayaks.jpg?w=300&h=300&fit=crop-25-75">
您还可以选择通过提供第三个值来放大焦点:一个介于 1 和 100 之间的浮点数。每一个完整的步骤相当于 100% 的放大(例如,x%-y%-2
相当于以 200% 的比例查看图像)。建议范围为 1-10。
<img src="kayaks.jpg?w=300&h=300&fit=crop-25-75-2">
crop
在任何其他调整大小操作之前,将图像裁剪到特定尺寸。所需格式:width,height,x,y
。
<img src="kayaks.jpg?crop=100,100,915,155">
设置图像的宽度,以像素为单位。
<img src="kayaks.jpg?w=500">
设置图像的高度,以像素为单位。
<img src="kayaks.jpg?h=333">
设置图像如何适配目标尺寸。
contain
:默认值。调整图像大小以适应宽度和高度边界,而不会裁剪、扭曲或改变纵横比。max
:调整图像大小以适应宽度和高度边界,而不会裁剪、扭曲或改变纵横比,并且如果图像小于输出尺寸,也不会增加图像大小。fill
:调整图像大小以适应宽度和高度边界,而不会裁剪或扭曲图像,剩余空间用背景颜色填充。生成的图像将匹配约束尺寸。fill-max
:调整图像大小以适应宽度和高度边界,而不会裁剪,但如果图像较小,则会放大图像。完成的图像将在宽度或高度上有剩余空间(除非新图像的纵横比与旧图像相同)。剩余空间将用背景颜色填充。生成的图像将匹配约束尺寸。stretch
:拉伸图像以精确适应约束尺寸。生成的图像将填充尺寸,并且不会保持输入图像的纵横比。crop
:调整图像大小以填充宽度和高度边界,并裁剪任何多余的图像数据。生成的图像将匹配宽度和高度约束,而不会扭曲图像。有关更多信息,请参见 crop。<img src="kayaks.jpg?w=300&h=300&fit=stretch">
设备像素比用于轻松在 CSS 像素和设备像素之间转换。这使得在各种设备上以正确的像素密度显示图像成为可能,例如带有 Retina 显示屏的 Apple 设备和 Android 设备。您必须指定宽度、高度或两者之一才能使此参数生效。默认值为 1。dpr 的最大值为 8。
<img src="kayaks.jpg?w=250&dpr=2">
调整图像亮度。使用 -100
到 +100
之间的值,其中 0
表示不变。
<img src="kayaks.jpg?w=500&bri=-25">
调整图像对比度。使用 -100
到 +100
之间的值,其中 0
表示不变。
<img src="kayaks.jpg?w=500&con=25">
调整图像伽马值。使用 0.1
到 9.99
之间的值。
<img src="kayaks.jpg?w=500&gam=1.5">
锐化图像。使用 0
到 100
之间的值。
<img src="kayaks.jpg?w=500&sharp=15">
为图像添加模糊效果。使用 0
到 100
之间的值。
<img src="kayaks.jpg?w=500&blur=5">
为图像添加像素化效果。使用 0
到 1000
之间的值。
<img src="kayaks.jpg?w=500&pixel=5">
为图像应用滤镜效果。接受 greyscale
或 sepia
。
<img src="kayaks.jpg?w=500&filt=sepia">
设置图片的背景色。更多颜色格式信息请参阅颜色。
<img src="logo.png?w=400&bg=black">
为图片添加边框。格式要求:宽度,颜色,方式
。
<img src="kayaks.jpg?w=500&border=10,5000,overlay">
设置边框宽度,单位为像素,也可使用相对尺寸。
设置边框颜色。更多颜色格式信息请参阅颜色。
设置边框的显示方式。可用选项包括:
overlay
:边框叠加在图片上(默认)。shrink
:图片在边框内缩小(画布大小不变)。expand
:画布扩展以容纳边框。<img src="kayaks.jpg?w=500&border=10,FFCC33,expand">
定义图片的质量。取值范围为 0
至 100
,默认值为 90
。仅当格式设置为 jpg
、pjpg
、webp
或 avif
时有效。
<img src="kayaks.jpg?w=500&q=25">
将图片编码为特定格式。可选值为 jpg
、pjpg
(渐进式 jpeg)、png
、gif
、webp
或 avif
。默认值为 jpg
。
<img src="kayaks.jpg?w=500&fm=gif">
相对尺寸允许您指定宽度或高度值作为主图像的百分比。这对水印和边框等功能很有帮助。
要使用相对维度,只需提供百分比作为数字(介于“0”和“100”之间),后跟“w”(宽度)或“h”(高度)。例如,“5w”表示主图像宽度的5%。
<img src="kayaks.jpg?w=5w">
支持多种颜色格式。除了所有现代浏览器支持的 140 种颜色名称(如下所列)之外,还接受十六进制 RGB 和 RBG alpha 格式。
CCC
5CCC
CCCCCC
55CCCCCC
兰空图床是使用 PHP 语言,并使用 Laravel 开发框架开发的一款 Web 应用程序。 使用兰空图床,需要有一个 Web 服务器。常见的 Web 服务器例如:LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQL/PHP/Apache),它们分别都集成了 Web 应用程序必要的组件。
注意
兰空图床不支持虚拟主机搭建,您必须拥有 Web 服务器的最高控制权,而虚拟主机没有这样的条件。
您应该确保您的 Web 服务器具有以下最低 PHP 版本和扩展:
注意
如果你使用了云服务集成面板,控制面板厂商为了极致的安全追求,会将 PHP 的部分函数禁用,这些被禁用的函数中就包含一些程序运行时必要的函数,这时候您需要找到 PHP 的配置文件,搜索 disable_functions
配置项,将那些函数从这个配置项中移除。
提示
通常情况下,这些拓展大部分都是已经安装并启用了的,程序安装时会检测必要的拓展是否安装,未通过检测则无法进行安装。
我们推荐您使用 Nginx + Sqlite3 作为组合来搭建兰空图床,以实现最小化安装。当然,数据库您也可以选择市场主流的 Mysql,但最低版本要求必须为 5.7+。
兰空图床使用消息队列来异步运行程序中的耗时任务,而启动消息队列服务,需要使用 PHP 的 CLI 模式,即通过命令终端执行:php artisan queue:work
使其正常运作。
在生产环境中,您需要一种方法来保持您的 queue:work
进程运行。queue:work
进程可能会因各种原因停止运行,例如超过工作者超时或执行 queue:restart
命令。
因此,您需要配置一个进程监视器,可以检测您的 queue:work
进程何时退出并自动重启它们。此外,进程监视器可以让您指定希望同时运行多少个 queue:work
进程。
Supervisor 是 Linux 环境中常用的进程监视器,我们将在以下文档中讨论如何配置它,或者你也可以选择其他任务你熟悉的进程管理软件。在正式安装之前,我们建议你先浏览一遍该示例文档。
Supervisor 是 Linux 操作系统的进程监视器,如果 queue:work
进程失败,它将自动重启它们。要在 Ubuntu 上安装 Supervisor,您可以使用以下命令:
sudo apt-get install supervisor
Supervisor 配置文件通常存储在 /etc/supervisor/conf.d
目录中。在此目录中,您可以创建任意数量的配置文件,指示 supervisor 如何监视您的进程。例如,让我们创建一个 lsky-pro-worker.conf
文件,用来启动和监视 queue:work
进程:
[program:lsky-pro-worker]
+process_name=%(program_name)s_%(process_num)02d
+command=php /www/wwwroot/app.com/artisan queue:work
+autostart=true
+autorestart=true
+stopasgroup=true
+killasgroup=true
+user=www
+numprocs=1
+redirect_stderr=true
+stdout_logfile=/www/wwwroot/app.com/storage/logs/worker.log
+stopwaitsecs=3600
在此示例中,numprocs
指令将指示 Supervisor 运行一个 queue:work
进程,并监视所有进程,如果它们失败,则自动重启它们。您应更改配置中的 command
指令,以反映您所需的队列连接和工作者选项。
创建配置文件后,您可以使用以下命令更新 Supervisor 配置并启动进程:
sudo supervisorctl reread
+
+sudo supervisorctl update
+
+sudo supervisorctl start "lsky-pro-worker:*"
有关 Supervisor 的更多信息,请查阅 Supervisor 文档。
ImageMagick 是一款免费的开源软件套件,用于编辑和处理数字图像。它可用于创建、编辑、合成或转换位图图像,并支持多种文件格式,包括 JPEG、PNG、GIF、TIFF 和 PDF。
兰空图床依赖 php imagick 拓展,调用操作系统的 ImageMagick 软件实现图片编辑能力。
注意,php imagick 拓展和 ImageMagick 软件是两个东西,这两个都是必须要安装的。
ImageMagick 是一个独立的软件工具,用于在命令行操作图像(如转换格式、调整大小、添加效果等),而 php imagick 拓展是 PHP 的一个扩展库,它提供了 ImageMagick 的 PHP 接口,用于在 PHP 程序中调用 ImageMagick 的功能。
dpkg -l | grep imagemagick
rpm -qa | grep ImageMagick
如果没有任何输出则表示没有安装。
sudo apt install imagemagick
sudo yum install ImageMagick
有关 imageMagick 的更多信息,请查阅 imageMagick 文档。
IMPORTANT
综上所述,搭建兰空图片的必要条件为:
兰空图床是使用 PHP 语言,并使用 Laravel 开发框架开发的一款 Web 应用程序。 使用兰空图床,需要有一个 Web 服务器。常见的 Web 服务器例如:LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQL/PHP/Apache),它们分别都集成了 Web 应用程序必要的组件。
注意
兰空图床不支持虚拟主机搭建,您必须拥有 Web 服务器的最高控制权,而虚拟主机没有这样的条件。
您应该确保您的 Web 服务器具有以下最低 PHP 版本和扩展:
注意
如果你使用了云服务集成面板,控制面板厂商为了极致的安全追求,会将 PHP 的部分函数禁用,这些被禁用的函数中就包含一些程序运行时必要的函数,这时候您需要找到 PHP 的配置文件,搜索 disable_functions
配置项,将那些函数从这个配置项中移除。
提示
通常情况下,这些拓展大部分都是已经安装并启用了的,程序安装时会检测必要的拓展是否安装,未通过检测则无法进行安装。
我们推荐您使用 Nginx + Sqlite3 作为组合来搭建兰空图床,以实现最小化安装。当然,数据库您也可以选择市场主流的 Mysql,但最低版本要求必须为 5.7+。
兰空图床使用消息队列来异步运行程序中的耗时任务,而启动消息队列服务,需要使用 PHP 的 CLI 模式,即通过命令终端执行:php artisan queue:work
使其正常运作。
在生产环境中,您需要一种方法来保持您的 queue:work
进程运行。queue:work
进程可能会因各种原因停止运行,例如超过工作者超时或执行 queue:restart
命令。
因此,您需要配置一个进程监视器,可以检测您的 queue:work
进程何时退出并自动重启它们。此外,进程监视器可以让您指定希望同时运行多少个 queue:work
进程。
Supervisor 是 Linux 环境中常用的进程监视器,我们将在以下文档中讨论如何配置它,或者你也可以选择其他任务你熟悉的进程管理软件。在正式安装之前,我们建议你先浏览一遍该示例文档。
Supervisor 是 Linux 操作系统的进程监视器,如果 queue:work
进程失败,它将自动重启它们。要在 Ubuntu 上安装 Supervisor,您可以使用以下命令:
sudo apt-get install supervisor
Supervisor 配置文件通常存储在 /etc/supervisor/conf.d
目录中。在此目录中,您可以创建任意数量的配置文件,指示 supervisor 如何监视您的进程。例如,让我们创建一个 lsky-pro-worker.conf
文件,用来启动和监视 queue:work
进程:
[program:lsky-pro-worker]
+process_name=%(program_name)s_%(process_num)02d
+command=php /www/wwwroot/app.com/artisan queue:work
+autostart=true
+autorestart=true
+stopasgroup=true
+killasgroup=true
+user=www
+numprocs=1
+redirect_stderr=true
+stdout_logfile=/www/wwwroot/app.com/storage/logs/worker.log
+stopwaitsecs=3600
在此示例中,numprocs
指令将指示 Supervisor 运行一个 queue:work
进程,并监视所有进程,如果它们失败,则自动重启它们。您应更改配置中的 command
指令,以反映您所需的队列连接和工作者选项。
创建配置文件后,您可以使用以下命令更新 Supervisor 配置并启动进程:
sudo supervisorctl reread
+
+sudo supervisorctl update
+
+sudo supervisorctl start "lsky-pro-worker:*"
有关 Supervisor 的更多信息,请查阅 Supervisor 文档。
ImageMagick 是一款免费的开源软件套件,用于编辑和处理数字图像。它可用于创建、编辑、合成或转换位图图像,并支持多种文件格式,包括 JPEG、PNG、GIF、TIFF 和 PDF。
兰空图床依赖 php imagick 拓展,调用操作系统的 ImageMagick 软件实现图片编辑能力。
注意,php imagick 拓展和 ImageMagick 软件是两个东西,这两个都是必须要安装的。
ImageMagick 是一个独立的软件工具,用于在命令行操作图像(如转换格式、调整大小、添加效果等),而 php imagick 拓展是 PHP 的一个扩展库,它提供了 ImageMagick 的 PHP 接口,用于在 PHP 程序中调用 ImageMagick 的功能。
dpkg -l | grep imagemagick
rpm -qa | grep ImageMagick
如果没有任何输出则表示没有安装。
sudo apt install imagemagick
sudo yum install ImageMagick
有关 imageMagick 的更多信息,请查阅 imageMagick 文档。
IMPORTANT
综上所述,搭建兰空图片的必要条件为:
储存是兰空图床中重要的组成部分之一,目前支持 本地
、AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云 Kodo
、又拍云 USS
、Sftp
、Ftp
、Webdav
。
需要 Minio 或 Backblaze b2 支持?
任何使用标准的S3 API接口协议的储存,都可以使用 AWS S3
来实现上传,包括 Minio 和 Backblaze b2。
系统中可以创建多个储存,每一个储存可以选择一个驱动,即本地、S3、阿里云 OSS 等,选择不同的驱动类型则需要填写不同的配置信息。
储存可以设置图片文件储存的具体位置,甚至可以设置为系统目录,例如 /root/photos
,但是需要注意,设置为系统目录可能存在权限相关问题。
正确的使用姿势应该是服务器挂载了一块大储存磁盘 /mnt/mydisk
,然后设置为 /mnt/mydisk/photos
。
创建或编辑储存时,程序会判断设置的路径是否存在,不存在则自动创建,并在 public
目录生成一个指向储存目录的符号链接,从而实现文件储存在服务器的任何位置还能保证公网可以访问到图片。
为了实现文件储存在服务器任何位置还能保证公网可访问这个需求,我们就必须使用符号链接,您可以通俗的将符号链接理解为 Windows 系统中的快捷方式。
假设我们的访问域名是 http://localhost
,站点根目录为 /www/wwwroot/app.com/public
。
按照惯例,如果我们在站点根目录上传一张图片 test.png
,理论上我们的访问路径应该为 http://localhost/test.png
,而这种路径拼接的方式,文件被限制在了只能放在站点根目录,我们只能访问到站点根目录中的文件,即 /www/wwwroot/app.com/public/test.png
。
而如果我们在站点根目录创建了一个符号链接 uploads
,并且这个符号链接指向的实际储存位置为 /www/wwwroot/data
,现在我们通过访问 http://localhost/uploads/test.png
时,这时候的实际文件路径为 /www/wwwroot/data/test.png
。
访问前缀不仅起到了上述作用,程序还利用访问前缀来实现云处理功能(利用前缀获取指定的储存配置)。
所以,为了实现这个特性,程序中所有属于本地类型或开启了云处理的储存,都需要添加上这个访问前缀,导致 url 变的不好看。不过这是值得的。
每个储存都可以分别设置一个图片安全驱动、图片处理驱动、云处理驱动。我们可以关联已创建的驱动,利用指定的驱动对储存的内容进行控制与处理。
名称 | 示例值 | 解释 |
---|---|---|
{Y} | 2024 | 当前年份 |
{y} | 24 | 当前年份简写 |
{m} | 01 | 当前月份 |
{d} | 04 | 当前 |
{Ymd} | 20240104 | 年月日 |
{filename} | 吴彦祖的自拍照 | 文件名称(不带拓展名) |
{ext} | png | 文件拓展名 |
{time} | 1718956160 | 时间戳 |
{uniqid} | 667530e55196f | 唯一ID |
{md5} | e10adc3949ba59abbe56e057f20f883e | 文件 md5 值 |
{sha1} | 7c4a8d09ca3762af61e59520943dc26494f8941b | 文件 sha1 值 |
{uuid} | ca083d36-1f0a-4d2a-83f7-f3e97f4f4bfa | UUID |
{uid} | 1 | 用户ID |
储存是兰空图床中重要的组成部分之一,目前支持 本地
、AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云 Kodo
、又拍云 USS
、Sftp
、Ftp
、Webdav
。
需要 Minio 或 Backblaze b2 支持?
任何使用标准的S3 API接口协议的储存,都可以使用 AWS S3
来实现上传,包括 Minio 和 Backblaze b2。
系统中可以创建多个储存,每一个储存可以选择一个驱动,即本地、S3、阿里云 OSS 等,选择不同的驱动类型则需要填写不同的配置信息。
储存可以设置图片文件储存的具体位置,甚至可以设置为系统目录,例如 /root/photos
,但是需要注意,设置为系统目录可能存在权限相关问题。
正确的使用姿势应该是服务器挂载了一块大储存磁盘 /mnt/mydisk
,然后设置为 /mnt/mydisk/photos
。
创建或编辑储存时,程序会判断设置的路径是否存在,不存在则自动创建,并在 public
目录生成一个指向储存目录的符号链接,从而实现文件储存在服务器的任何位置还能保证公网可以访问到图片。
为了实现文件储存在服务器任何位置还能保证公网可访问这个需求,我们就必须使用符号链接,您可以通俗的将符号链接理解为 Windows 系统中的快捷方式。
假设我们的访问域名是 http://localhost
,站点根目录为 /www/wwwroot/app.com/public
。
按照惯例,如果我们在站点根目录上传一张图片 test.png
,理论上我们的访问路径应该为 http://localhost/test.png
,而这种路径拼接的方式,文件被限制在了只能放在站点根目录,我们只能访问到站点根目录中的文件,即 /www/wwwroot/app.com/public/test.png
。
而如果我们在站点根目录创建了一个符号链接 uploads
,并且这个符号链接指向的实际储存位置为 /www/wwwroot/data
,现在我们通过访问 http://localhost/uploads/test.png
时,这时候的实际文件路径为 /www/wwwroot/data/test.png
。
访问前缀不仅起到了上述作用,程序还利用访问前缀来实现云处理功能(利用前缀获取指定的储存配置)。
所以,为了实现这个特性,程序中所有属于本地类型或开启了云处理的储存,都需要添加上这个访问前缀,导致 url 变的不好看。不过这是值得的。
每个储存都可以分别设置一个图片安全驱动、图片处理驱动、云处理驱动。我们可以关联已创建的驱动,利用指定的驱动对储存的内容进行控制与处理。
名称 | 示例值 | 解释 |
---|---|---|
{Y} | 2024 | 当前年份 |
{y} | 24 | 当前年份简写 |
{m} | 01 | 当前月份 |
{d} | 04 | 当前 |
{Ymd} | 20240104 | 年月日 |
{filename} | 吴彦祖的自拍照 | 文件名称(不带拓展名) |
{ext} | png | 文件拓展名 |
{time} | 1718956160 | 时间戳 |
{uniqid} | 667530e55196f | 唯一ID |
{md5} | e10adc3949ba59abbe56e057f20f883e | 文件 md5 值 |
{sha1} | 7c4a8d09ca3762af61e59520943dc26494f8941b | 文件 sha1 值 |
{uuid} | ca083d36-1f0a-4d2a-83f7-f3e97f4f4bfa | UUID |
{uid} | 1 | 用户ID |
兰空图床支持在线、离线两种升级方式。
兰空图床可以通过后台管理->系统设置->系统更新中检测新版本并在线升级。
注意,检测更新前你必须保证系统设置->常规设置中的应用网址、许可证编号、许可证密钥必须填写正确。
由于服务器所在地区可能无法直接访问我们的更新服务器,您可以通过登录官网个人中心,点击「下载源码」按钮下载最新的安装包,然后将安装包重命名为 upgrade.zip
。
接下来把安装包 upgrade.zip
文件上传至站点根目录,与 .env
文件同级(注意需要将压缩包文件的权限改为 0755,以及用户组改为 web 服务器所运行的权限,比如 www
)。
然后进入后台更新页面,根据提示升级即可。
',9)]))}const g=a(d,[["render",p]]);export{u as __pageData,g as default}; diff --git a/assets/guide_upgrade.md.BWDBwInG.lean.js b/assets/guide_upgrade.md.BWDBwInG.lean.js new file mode 100644 index 00000000..48b1afb4 --- /dev/null +++ b/assets/guide_upgrade.md.BWDBwInG.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as r,o}from"./chunks/framework.DPuwY6B9.js";const u=JSON.parse('{"title":"升级","description":"","frontmatter":{},"headers":[],"relativePath":"guide/upgrade.md","filePath":"zh/guide/upgrade.md","lastUpdated":1732613247000}'),d={name:"guide/upgrade.md"};function p(i,e,n,c,s,l){return o(),t("div",null,e[0]||(e[0]=[r('兰空图床支持在线、离线两种升级方式。
兰空图床可以通过后台管理->系统设置->系统更新中检测新版本并在线升级。
注意,检测更新前你必须保证系统设置->常规设置中的应用网址、许可证编号、许可证密钥必须填写正确。
由于服务器所在地区可能无法直接访问我们的更新服务器,您可以通过登录官网个人中心,点击「下载源码」按钮下载最新的安装包,然后将安装包重命名为 upgrade.zip
。
接下来把安装包 upgrade.zip
文件上传至站点根目录,与 .env
文件同级(注意需要将压缩包文件的权限改为 0755,以及用户组改为 web 服务器所运行的权限,比如 www
)。
然后进入后台更新页面,根据提示升级即可。
',9)]))}const g=a(d,[["render",p]]);export{u as __pageData,g as default}; diff --git a/assets/index.md.DAhF7o2u.js b/assets/index.md.DAhF7o2u.js new file mode 100644 index 00000000..a7c8cd85 --- /dev/null +++ b/assets/index.md.DAhF7o2u.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as a}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Lsky Pro+","text":"您的云端相册系统","tagline":"全新版本,全新架构,全新 UI,全新体验","image":{"src":"/logo.png","alt":"logo"},"actions":[{"theme":"brand","text":"快速开始 ->","link":"/guide/getting-started"},{"theme":"alt","text":"💻 查看演示","link":"https://v2.lskypro.com"},{"theme":"alt","text":"🎁 购买源码","link":"https://www.lsky.pro/buy"}]},"features":[{"title":"稳定","icon":"🪜","details":"使用 Laravel 框架开发,庞大的生态系统和用户群体,为程序提供了健壮稳固的底层基础。"},{"title":"高效","icon":"🚀","details":"多图上传、拖拽上传、粘贴上传、复制图片、复制链接、一键复制链接以及强大的图片处理、管理功能。"},{"title":"安全","icon":"🔒","details":"得益于强大的 Laravel 框架,我们无需在安全这方面考虑过多,它几乎已经帮我们做好了一切。"},{"title":"储存支持","icon":"💾","details":"支持多种第三方储存,包括但不限于 AWS S3、阿里云 OSS、腾讯云 COS、七牛云、又拍云、SFTP、FTP、WebDav、Minio。"},{"title":"商业化","icon":"🪩","details":"程序集成了付费套餐、工单系统、订单管理、意见收集、站内公告、优惠码等等,适配了支付宝、微信官方支付功能。"},{"title":"图片审核","icon":"🔍","details":"为了防止他人上传违规图片,程序集成了阿里云、腾讯云、Nsfw.js 图片审核功能,可以选择发现违规图片后删除或直接拒绝上传。"}]},"headers":[],"relativePath":"index.md","filePath":"zh/index.md","lastUpdated":1734915337000}'),i={name:"index.md"};function o(n,l,s,r,d,c){return a(),e("div")}const h=t(i,[["render",o]]);export{m as __pageData,h as default}; diff --git a/assets/index.md.DAhF7o2u.lean.js b/assets/index.md.DAhF7o2u.lean.js new file mode 100644 index 00000000..a7c8cd85 --- /dev/null +++ b/assets/index.md.DAhF7o2u.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as a}from"./chunks/framework.DPuwY6B9.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Lsky Pro+","text":"您的云端相册系统","tagline":"全新版本,全新架构,全新 UI,全新体验","image":{"src":"/logo.png","alt":"logo"},"actions":[{"theme":"brand","text":"快速开始 ->","link":"/guide/getting-started"},{"theme":"alt","text":"💻 查看演示","link":"https://v2.lskypro.com"},{"theme":"alt","text":"🎁 购买源码","link":"https://www.lsky.pro/buy"}]},"features":[{"title":"稳定","icon":"🪜","details":"使用 Laravel 框架开发,庞大的生态系统和用户群体,为程序提供了健壮稳固的底层基础。"},{"title":"高效","icon":"🚀","details":"多图上传、拖拽上传、粘贴上传、复制图片、复制链接、一键复制链接以及强大的图片处理、管理功能。"},{"title":"安全","icon":"🔒","details":"得益于强大的 Laravel 框架,我们无需在安全这方面考虑过多,它几乎已经帮我们做好了一切。"},{"title":"储存支持","icon":"💾","details":"支持多种第三方储存,包括但不限于 AWS S3、阿里云 OSS、腾讯云 COS、七牛云、又拍云、SFTP、FTP、WebDav、Minio。"},{"title":"商业化","icon":"🪩","details":"程序集成了付费套餐、工单系统、订单管理、意见收集、站内公告、优惠码等等,适配了支付宝、微信官方支付功能。"},{"title":"图片审核","icon":"🔍","details":"为了防止他人上传违规图片,程序集成了阿里云、腾讯云、Nsfw.js 图片审核功能,可以选择发现违规图片后删除或直接拒绝上传。"}]},"headers":[],"relativePath":"index.md","filePath":"zh/index.md","lastUpdated":1734915337000}'),i={name:"index.md"};function o(n,l,s,r,d,c){return a(),e("div")}const h=t(i,[["render",o]]);export{m as __pageData,h as default}; diff --git a/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 new file mode 100644 index 00000000..b6b603d5 Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ diff --git a/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/assets/inter-italic-cyrillic.By2_1cv3.woff2 new file mode 100644 index 00000000..def40a4f Binary files /dev/null and b/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ diff --git a/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 new file mode 100644 index 00000000..e070c3d3 Binary files /dev/null and b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ diff --git a/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/assets/inter-italic-greek.DJ8dCoTZ.woff2 new file mode 100644 index 00000000..a3c16ca4 Binary files /dev/null and b/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ diff --git a/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 new file mode 100644 index 00000000..2210a899 Binary files /dev/null and b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ diff --git a/assets/inter-italic-latin.C2AdPX0b.woff2 b/assets/inter-italic-latin.C2AdPX0b.woff2 new file mode 100644 index 00000000..790d62dc Binary files /dev/null and b/assets/inter-italic-latin.C2AdPX0b.woff2 differ diff --git a/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/assets/inter-italic-vietnamese.BSbpV94h.woff2 new file mode 100644 index 00000000..1eec0775 Binary files /dev/null and b/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 new file mode 100644 index 00000000..2cfe6153 Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ diff --git a/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 new file mode 100644 index 00000000..e3886dd1 Binary files /dev/null and b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ diff --git a/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 new file mode 100644 index 00000000..36d67487 Binary files /dev/null and b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ diff --git a/assets/inter-roman-greek.BBVDIX6e.woff2 b/assets/inter-roman-greek.BBVDIX6e.woff2 new file mode 100644 index 00000000..2bed1e85 Binary files /dev/null and b/assets/inter-roman-greek.BBVDIX6e.woff2 differ diff --git a/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 new file mode 100644 index 00000000..9a8d1e2b Binary files /dev/null and b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ diff --git a/assets/inter-roman-latin.Di8DUHzh.woff2 b/assets/inter-roman-latin.Di8DUHzh.woff2 new file mode 100644 index 00000000..07d3c53a Binary files /dev/null and b/assets/inter-roman-latin.Di8DUHzh.woff2 differ diff --git a/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 new file mode 100644 index 00000000..57bdc22a Binary files /dev/null and b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ diff --git a/assets/style.CeWoDITL.css b/assets/style.CeWoDITL.css new file mode 100644 index 00000000..13548551 --- /dev/null +++ b/assets/style.CeWoDITL.css @@ -0,0 +1 @@ +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-d6be1790]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-d6be1790]{padding:96px 32px 168px}}.code[data-v-d6be1790]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-d6be1790]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-d6be1790]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-d6be1790]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-d6be1790]{padding-top:20px}.link[data-v-d6be1790]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-d6be1790]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-right:16px;padding-left:16px}.outline-link[data-v-b933a997]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-b933a997]:hover,.outline-link.active[data-v-b933a997]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-a5bbad30]{display:none}.VPDocAsideOutline.has-outline[data-v-a5bbad30]{display:block}.content[data-v-a5bbad30]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-a5bbad30]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-a5bbad30]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-e98dd255]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-e98dd255]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-e257564d]{margin-top:64px}.edit-info[data-v-e257564d]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-e257564d]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-e257564d]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-e257564d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-e257564d]{margin-right:8px}.prev-next[data-v-e257564d]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-e257564d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-e257564d]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-e257564d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-e257564d]{margin-left:auto;text-align:right}.desc[data-v-e257564d]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-e257564d]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-39a288b8]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-39a288b8]{order:1;margin:0;min-width:640px}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-fa7799d5]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-fa7799d5]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-fa7799d5]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-fa7799d5]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-fa7799d5]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-fa7799d5]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-fa7799d5]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-fa7799d5]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-fa7799d5]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-fa7799d5]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-fa7799d5]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-fa7799d5]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-fa7799d5]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.dark .VPImage.light[data-v-8426fc1a]{display:none}.VPHero[data-v-303bb580]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-303bb580]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-303bb580]{flex-direction:row}}.main[data-v-303bb580]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-303bb580]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-303bb580]{text-align:left}}@media (min-width: 960px){.main[data-v-303bb580]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-303bb580]{max-width:592px}}.name[data-v-303bb580],.text[data-v-303bb580]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0 auto}.name[data-v-303bb580]{color:var(--vp-home-hero-name-color)}.clip[data-v-303bb580]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-303bb580],.text[data-v-303bb580]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-303bb580],.text[data-v-303bb580]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0}}.tagline[data-v-303bb580]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-303bb580]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-303bb580]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-303bb580]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-303bb580]{margin:0}}.actions[data-v-303bb580]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-303bb580]{justify-content:center}@media (min-width: 640px){.actions[data-v-303bb580]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-303bb580]{justify-content:flex-start}}.action[data-v-303bb580]{flex-shrink:0;padding:6px}.image[data-v-303bb580]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-303bb580]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-303bb580]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-303bb580]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-303bb580]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-303bb580]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-303bb580]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-303bb580]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-303bb580]{width:320px;height:320px}}[data-v-303bb580] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-303bb580] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-303bb580] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-a3976bdc]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a3976bdc]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a3976bdc]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-a3976bdc]>.VPImage{margin-bottom:20px}.icon[data-v-a3976bdc]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-a3976bdc]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-a3976bdc]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-a3976bdc]{padding-top:8px}.link-text-value[data-v-a3976bdc]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-a3976bdc]{margin-left:6px}.VPFeatures[data-v-a6181336]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-8e2d4988]{padding:0 48px}}@media (min-width: 960px){.container[data-v-8e2d4988]{width:100%;padding:0 64px}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-686f80a6]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-686f80a6]{margin-bottom:128px}}.VPContent[data-v-1428d186]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-1428d186]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-1428d186]{margin:0}@media (min-width: 960px){.VPContent[data-v-1428d186]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1428d186]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-1428d186]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e315a0ad]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e315a0ad],.copyright[data-v-e315a0ad]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-17a5e62e]{color:var(--vp-c-text-1)}.icon[data-v-17a5e62e]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{font-size:14px}.icon[data-v-17a5e62e]{font-size:16px}}.open>.icon[data-v-17a5e62e]{transform:rotate(90deg)}.items[data-v-17a5e62e]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-17a5e62e]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-17a5e62e]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-17a5e62e]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-17a5e62e]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-17a5e62e]{transition:all .2s ease-out}.flyout-leave-active[data-v-17a5e62e]{transition:all .15s ease-in}.flyout-enter-from[data-v-17a5e62e],.flyout-leave-to[data-v-17a5e62e]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a6f0e41e]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-a6f0e41e]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-a6f0e41e]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-a6f0e41e]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-a6f0e41e]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-a6f0e41e]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-a6f0e41e]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-a6f0e41e]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-a6f0e41e]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-a6f0e41e]{display:none}}.menu-icon[data-v-a6f0e41e]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-1d5665e3]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1d5665e3] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-5337faa4]{opacity:1}.moon[data-v-5337faa4],.dark .sun[data-v-5337faa4]{opacity:0}.dark .moon[data-v-5337faa4]{opacity:1}.dark .VPSwitchAppearance[data-v-5337faa4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-6c893767]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-6c893767]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-35975db6]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-35975db6]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-35975db6]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-35975db6]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-b98bc113]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-b98bc113] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-b98bc113] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-b98bc113] .group:last-child{padding-bottom:0}.VPMenu[data-v-b98bc113] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-b98bc113] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-b98bc113] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-b98bc113] .action{padding-left:24px}.VPFlyout[data-v-cf11d7a2]{position:relative}.VPFlyout[data-v-cf11d7a2]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-cf11d7a2]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-cf11d7a2]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-cf11d7a2]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-cf11d7a2]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-cf11d7a2]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-cf11d7a2],.button[aria-expanded=true]+.menu[data-v-cf11d7a2]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-cf11d7a2]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-cf11d7a2]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-cf11d7a2]{margin-right:0;font-size:16px}.text-icon[data-v-cf11d7a2]{margin-left:4px;font-size:14px}.icon[data-v-cf11d7a2]{font-size:20px;transition:fill .25s}.menu[data-v-cf11d7a2]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-bd121fe5]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-bd121fe5]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-bd121fe5]>svg,.VPSocialLink[data-v-bd121fe5]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-bb2aa2f0]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-bb2aa2f0]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-bb2aa2f0]{display:none}}.trans-title[data-v-bb2aa2f0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-bb2aa2f0],.item.social-links[data-v-bb2aa2f0]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-bb2aa2f0]{min-width:176px}.appearance-action[data-v-bb2aa2f0]{margin-right:-2px}.social-links-list[data-v-bb2aa2f0]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-e56f3d57]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-e56f3d57],.VPNavBarMenuLink[data-v-e56f3d57]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-dc692963]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-dc692963]{display:flex}}/*! @docsearch/css 3.7.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-1168a8e4]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-1168a8e4]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-1168a8e4]{border-bottom-color:var(--vp-c-divider)}}[data-v-1168a8e4] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-88af2de4]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-88af2de4]{display:flex;align-items:center}}.title[data-v-88af2de4]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-6aa21345]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-6aa21345]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-6aa21345]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-6aa21345]:not(.home){background-color:transparent}.VPNavBar[data-v-6aa21345]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-6aa21345]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-6aa21345]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-6aa21345]{padding:0}}.container[data-v-6aa21345]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-6aa21345],.container>.content[data-v-6aa21345]{pointer-events:none}.container[data-v-6aa21345] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-6aa21345]{max-width:100%}}.title[data-v-6aa21345]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-6aa21345]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-6aa21345]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-6aa21345]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-6aa21345]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-6aa21345]{column-gap:.5rem}}.menu+.translations[data-v-6aa21345]:before,.menu+.appearance[data-v-6aa21345]:before,.menu+.social-links[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before,.appearance+.social-links[data-v-6aa21345]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before{margin-right:16px}.appearance+.social-links[data-v-6aa21345]:before{margin-left:16px}.social-links[data-v-6aa21345]{margin-right:-8px}.divider[data-v-6aa21345]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-6aa21345]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-6aa21345]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-b44890b2]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-b44890b2]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-df37e6dd]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-df37e6dd]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-b9ab8c58]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-b9ab8c58]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-b9ab8c58]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-b9ab8c58]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-b9ab8c58]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-b9ab8c58]{transform:rotate(45deg)}.button[data-v-b9ab8c58]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-b9ab8c58]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-b9ab8c58]{transition:transform .25s}.group[data-v-b9ab8c58]:first-child{padding-top:0}.group+.group[data-v-b9ab8c58],.group+.item[data-v-b9ab8c58]{padding-top:4px}.VPNavScreenTranslations[data-v-858fe1a4]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-858fe1a4]{height:auto}.title[data-v-858fe1a4]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-858fe1a4]{font-size:16px}.icon.lang[data-v-858fe1a4]{margin-right:8px}.icon.chevron[data-v-858fe1a4]{margin-left:4px}.list[data-v-858fe1a4]{padding:4px 0 0 24px}.link[data-v-858fe1a4]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-f2779853]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-f2779853],.VPNavScreen.fade-leave-active[data-v-f2779853]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-f2779853],.VPNavScreen.fade-leave-active .container[data-v-f2779853]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-f2779853],.VPNavScreen.fade-leave-to[data-v-f2779853]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-f2779853],.VPNavScreen.fade-leave-to .container[data-v-f2779853]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-f2779853]{display:none}}.container[data-v-f2779853]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-f2779853],.menu+.appearance[data-v-f2779853],.translations+.appearance[data-v-f2779853]{margin-top:24px}.menu+.social-links[data-v-f2779853]{margin-top:16px}.appearance+.social-links[data-v-f2779853]{margin-top:16px}.VPNav[data-v-ae24b3ad]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-b7550ba0]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b7550ba0]{padding-bottom:10px}.item[data-v-b7550ba0]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-b7550ba0]{cursor:pointer}.indicator[data-v-b7550ba0]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b7550ba0]{background-color:var(--vp-c-brand-1)}.link[data-v-b7550ba0]{display:flex;align-items:center;flex-grow:1}.text[data-v-b7550ba0]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b7550ba0]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-b7550ba0],.VPSidebarItem.level-2 .text[data-v-b7550ba0],.VPSidebarItem.level-3 .text[data-v-b7550ba0],.VPSidebarItem.level-4 .text[data-v-b7550ba0],.VPSidebarItem.level-5 .text[data-v-b7550ba0]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b7550ba0]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b7550ba0]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b7550ba0]{color:var(--vp-c-brand-1)}.caret[data-v-b7550ba0]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-b7550ba0]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b7550ba0]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b7550ba0]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b7550ba0]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b7550ba0],.VPSidebarItem.level-2 .items[data-v-b7550ba0],.VPSidebarItem.level-3 .items[data-v-b7550ba0],.VPSidebarItem.level-4 .items[data-v-b7550ba0],.VPSidebarItem.level-5 .items[data-v-b7550ba0]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b7550ba0]{display:none}.no-transition[data-v-c40bc020] .caret-icon{transition:none}.group+.group[data-v-c40bc020]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-c40bc020]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-319d5ca6]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-319d5ca6]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-319d5ca6]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-319d5ca6]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-319d5ca6]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-319d5ca6]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-319d5ca6]{outline:0}.VPSkipLink[data-v-0f60ec36]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-0f60ec36]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-0f60ec36]{top:14px;left:16px}}.Layout[data-v-5d98c3a5]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3d121b4a]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3d121b4a]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{margin:128px 0}}.VPHomeSponsors[data-v-3d121b4a]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 64px}}.container[data-v-3d121b4a]{margin:0 auto;max-width:1152px}.love[data-v-3d121b4a]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3d121b4a]{display:inline-block}.message[data-v-3d121b4a]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3d121b4a]{padding-top:32px}.action[data-v-3d121b4a]{padding-top:40px;text-align:center}.VPTeamPage[data-v-7c57f839]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-7c57f839]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-7c57f839-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-7c57f839-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:96px}}.VPTeamMembers[data-v-7c57f839-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 64px}}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-b1a88750]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-b1a88750]{padding-top:40px}.VPTeamMembersItem[data-v-f3fa364a]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f3fa364a]{padding:32px}.VPTeamMembersItem.small .data[data-v-f3fa364a]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f3fa364a]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f3fa364a]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f3fa364a]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f3fa364a]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f3fa364a]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f3fa364a]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f3fa364a]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f3fa364a]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f3fa364a]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f3fa364a]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f3fa364a]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f3fa364a]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f3fa364a]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f3fa364a]{text-align:center}.avatar[data-v-f3fa364a]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f3fa364a]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f3fa364a]{margin:0;font-weight:600}.affiliation[data-v-f3fa364a]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f3fa364a]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f3fa364a]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f3fa364a]{margin:0 auto}.desc[data-v-f3fa364a] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f3fa364a]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f3fa364a]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f3fa364a]:hover,.sp .sp-link.link[data-v-f3fa364a]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f3fa364a]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient(120deg, #bd34fe 30%, #41d1ff);--vp-home-hero-image-background-image: linear-gradient(-45deg, #bd34fe 50%, #47caff 50%);--vp-home-hero-image-filter: blur(110px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(130px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(150px)}}.medium-zoom-overlay{z-index:30}.medium-zoom-image--opened{z-index:31}img{border-radius:5px}#notice{position:sticky;width:100%;text-align:center;padding:4px;font-size:14px;background:#6495ed;color:#fff}::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}::view-transition-old(root),.dark::view-transition-new(root){z-index:1}::view-transition-new(root),.dark::view-transition-old(root){z-index:9999}.VPSwitchAppearance{width:22px!important}.VPSwitchAppearance .check{transform:none!important}.VPLocalSearchBox[data-v-ce626c7c]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-ce626c7c]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-ce626c7c]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-ce626c7c]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-ce626c7c]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-ce626c7c]{padding:0 8px}}.search-bar[data-v-ce626c7c]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-ce626c7c]{display:block;font-size:18px}.navigate-icon[data-v-ce626c7c]{display:block;font-size:14px}.search-icon[data-v-ce626c7c]{margin:8px}@media (max-width: 767px){.search-icon[data-v-ce626c7c]{display:none}}.search-input[data-v-ce626c7c]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-ce626c7c]{padding:6px 4px}}.search-actions[data-v-ce626c7c]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-ce626c7c]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-ce626c7c]{display:none}}.search-actions button[data-v-ce626c7c]{padding:8px}.search-actions button[data-v-ce626c7c]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-ce626c7c]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-ce626c7c]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-ce626c7c]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-ce626c7c]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-ce626c7c]{display:none}}.search-keyboard-shortcuts kbd[data-v-ce626c7c]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-ce626c7c]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-ce626c7c]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-ce626c7c]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-ce626c7c]{margin:8px}}.titles[data-v-ce626c7c]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-ce626c7c]{display:flex;align-items:center;gap:4px}.title.main[data-v-ce626c7c]{font-weight:500}.title-icon[data-v-ce626c7c]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-ce626c7c]{opacity:.5}.result.selected[data-v-ce626c7c]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-ce626c7c]{position:relative}.excerpt[data-v-ce626c7c]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-ce626c7c]{opacity:1}.excerpt[data-v-ce626c7c] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-ce626c7c] mark,.excerpt[data-v-ce626c7c] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-ce626c7c] .vp-code-group .tabs{display:none}.excerpt[data-v-ce626c7c] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-ce626c7c]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-ce626c7c]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-ce626c7c],.result.selected .title-icon[data-v-ce626c7c]{color:var(--vp-c-brand-1)!important}.no-results[data-v-ce626c7c]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-ce626c7c]{flex:none} diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 00000000..9eb2b0e9 Binary files /dev/null and b/favicon.ico differ diff --git a/guide/declaration.html b/guide/declaration.html new file mode 100644 index 00000000..0eb9bfbd --- /dev/null +++ b/guide/declaration.html @@ -0,0 +1,25 @@ + + + + + +