mirror of
https://github.com/zfile-dev/zfile.git
synced 2025-04-19 05:34:52 +00:00
Compare commits
29 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b533b5e959 | ||
|
|
d35cf27d47 | ||
|
|
796c4c1fb0 | ||
|
|
1033d6c1a9 | ||
|
|
e09c6b4e58 | ||
|
|
168b0b08f3 | ||
|
|
60a6a5348c | ||
|
|
2ec8a5df1f | ||
|
|
47b5f6ac12 | ||
|
|
c64c8465f2 | ||
|
|
f636681dd8 | ||
|
|
eadd2434e0 | ||
|
|
b84c0bff42 | ||
|
|
4cb5b84bfe | ||
|
|
0351b4401c | ||
|
|
48cb14be8a | ||
|
|
eea2ff11f9 | ||
|
|
325ec1a348 | ||
|
|
93205266d3 | ||
|
|
6849a4347f | ||
|
|
cb5c6a5945 | ||
|
|
5ed45c3bb3 | ||
|
|
4442ec3165 | ||
|
|
b268a24333 | ||
|
|
84f9354d4e | ||
|
|
8dfc4f8004 | ||
|
|
1158f5c2b9 | ||
|
|
c5f0e15207 | ||
|
|
68a842ce75 |
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -16,7 +16,7 @@ assignees: ''
|
||||
请确认你已经做了下面这些事情,若 bug 还是未解决,那么请尽可详细地描述你的问题。
|
||||
|
||||
- 我已经安装了最新版的 ZFile
|
||||
- 我已经阅读了 ZFile 的文档:http://docs.zhaojun.im/zfile
|
||||
- 我已经阅读了 ZFile 的文档:https://docs.zfile.vip
|
||||
- 我已经搜索了已有的 Issues 列表中有关的信息
|
||||
- 我已经清理过浏览器缓存并重试
|
||||
-->
|
||||
|
||||
43
README.md
43
README.md
@@ -19,9 +19,11 @@
|
||||
|
||||
## 相关地址
|
||||
|
||||
预览地址: [https://zfile.jun6.net](https://zfile.jun6.net)
|
||||
预览地址: [https://zfile.vip](https://zfile.vip)
|
||||
|
||||
文档地址: [http://docs.zhaojun.im/zfile](http://docs.zhaojun.im/zfile)
|
||||
文档地址: [https://docs.zfile.vip](https://docs.zfile.vip)
|
||||
|
||||
社区地址: [https://bbs.zfile.vip](https://bbs.zfile.vip)
|
||||
|
||||
项目源码: [https://github.com/zhaojun1998/zfile](https://github.com/zhaojun1998/zfile)
|
||||
|
||||
@@ -69,14 +71,14 @@ apt update && apt install -y adoptopenjdk-8-hotspot-jre
|
||||
|
||||
> 如为更新程序, 则请先执行 `~/zfile/bin/stop.sh && rm -rf ~/zfile` 清理旧程序. 首次安装请忽略此选项.
|
||||
|
||||
|
||||
下载项目:
|
||||
|
||||
```bash
|
||||
cd ~
|
||||
export ZFILE_INSTALL_PATH=~/zfile
|
||||
mkdir -p $ZFILE_INSTALL_PATH && cd $ZFILE_INSTALL_PATH
|
||||
wget https://c.jun6.net/ZFILE/zfile-release.war
|
||||
mkdir zfile && unzip zfile-release.war -d zfile && rm -rf zfile-release.war
|
||||
chmod +x zfile/bin/*.sh
|
||||
unzip zfile-release.war && rm -rf zfile-release.war
|
||||
chmod +x $ZFILE_INSTALL_PATH/bin/*.sh
|
||||
```
|
||||
|
||||
> 下载指定版本可以将 `zfile-release.war` 改为 `zfile-x.x.war`,如 `zfile-2.2.war`。
|
||||
@@ -98,7 +100,7 @@ chmod +x zfile/bin/*.sh
|
||||
~/zfile/bin/start.sh
|
||||
```
|
||||
|
||||
篇幅有限, 更详细的安装教程及介绍请参考: [ZFile 文档](http://docs.zhaojun.im/zfile)
|
||||
篇幅有限, 更详细的安装教程及介绍请参考: [ZFile 文档](https://docs.zfile.vip)
|
||||
|
||||
访问地址:
|
||||
|
||||
@@ -120,29 +122,6 @@ chmod +x zfile/bin/*.sh
|
||||

|
||||

|
||||
|
||||
## 开发计划
|
||||
|
||||
- [x] API 支持 [点击查看文档](https://github.com/zhaojun1998/zfile/blob/master/API.md)
|
||||
- [x] 更方便的部署方式
|
||||
- [x] 布局优化 - 自定义操作按钮 (现为右键实现)
|
||||
- [x] 后台优化 - 设置按照其功能进行分离
|
||||
- [x] 体验优化 - 支持前后端分离部署
|
||||
- [x] 体验优化 - 文本预览更换 vscode 同款编辑器 monaco editor
|
||||
- [x] 架构调整 - 支持多存储策略
|
||||
- [x] 体验优化 - 忽略文件列表 (正则表达式)
|
||||
- [x] 新功能 - Docker 支持
|
||||
- [x] 新功能 - 图片模式
|
||||
- [x] 新功能 - 直链/短链管理
|
||||
- [ ] ~~新功能 - 后台支持上传、编辑、删除等操作 (不再支持)~~
|
||||
- [ ] 体验优化 - 自定义支持预览的文件后缀 (正则表达式)
|
||||
- [ ] 体验优化 - 一键安装脚本
|
||||
- [ ] 新功能 - 分享功能,支持分享密码,文件夹分享
|
||||
- [ ] 新功能 - 直链支持 Referer 防盗链
|
||||
- [ ] 体验优化 - 视频列表支持
|
||||
- [ ] 新功能 - 单独页面打开文件预览
|
||||
- [ ] 新功能 - 在线查看日志功能
|
||||
- [ ] 部署优化 - Docker Compose 支持
|
||||
|
||||
## 支持作者
|
||||
|
||||
如果本项目对你有帮助,请作者喝杯咖啡吧。
|
||||
@@ -153,10 +132,6 @@ chmod +x zfile/bin/*.sh
|
||||
|
||||
[](https://starchart.cc/zhaojun1998/zfile.svg)
|
||||
|
||||
## 服务器赞助
|
||||
|
||||
<a href="https://kuline.cn"><img src="https://cdn.jun6.net/2021/05/14/1f6a4f0ad09ce.png" width="100px"></a>
|
||||
|
||||
## 开发工具赞助
|
||||
|
||||
<a href="https://www.jetbrains.com/?from=zfile"><img src="https://cdn.jun6.net/2021/04/21/26e410d60b0b0.png?1=1" width="100px"></a>
|
||||
|
||||
10
pom.xml
10
pom.xml
@@ -12,13 +12,14 @@
|
||||
|
||||
<groupId>im.zhaojun</groupId>
|
||||
<artifactId>zfile</artifactId>
|
||||
<version>3.2</version>
|
||||
<version>3.2.2</version>
|
||||
<name>zfile</name>
|
||||
<packaging>war</packaging>
|
||||
<description>一个在线的文件浏览系统</description>
|
||||
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
<log4j2.version>2.17.1</log4j2.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
@@ -56,11 +57,13 @@
|
||||
<groupId>com.h2database</groupId>
|
||||
<artifactId>h2</artifactId>
|
||||
<scope>runtime</scope>
|
||||
<version>1.4.197</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<scope>runtime</scope>
|
||||
<version>8.0.27</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 工具类 -->
|
||||
@@ -84,7 +87,6 @@
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
<version>4.5.8</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-net</groupId>
|
||||
@@ -108,7 +110,7 @@
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>1.2.61</version>
|
||||
<version>1.2.69</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
@@ -149,4 +151,4 @@
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
</project>
|
||||
@@ -1 +1 @@
|
||||
package im.zhaojun.zfile.config;
|
||||
package im.zhaojun.zfile.config;
|
||||
@@ -42,8 +42,10 @@ public class WebMvcConfig implements WebMvcConfigurer {
|
||||
public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer(){
|
||||
return factory -> {
|
||||
ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/index.html");
|
||||
ErrorPage error200Page = new ErrorPage(HttpStatus.OK, "/index.html");
|
||||
Set<ErrorPage> errorPages = new HashSet<>();
|
||||
errorPages.add(error404Page);
|
||||
errorPages.add(error200Page);
|
||||
factory.setErrorPages(errorPages);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -39,12 +39,4 @@ public class ZFileConfiguration {
|
||||
return restTemplate;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public FilterRegistrationBean filterRegist() {
|
||||
FilterRegistrationBean frBean = new FilterRegistrationBean();
|
||||
frBean.setFilter(new CorsFilter());
|
||||
frBean.addUrlPatterns("/*");
|
||||
return frBean;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
package im.zhaojun.zfile.controller.admin;
|
||||
package im.zhaojun.zfile.controller.admin;
|
||||
@@ -30,7 +30,7 @@ public class InstallController {
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/install")
|
||||
@PostMapping("/doInstall")
|
||||
public ResultBean install(SystemConfigDTO systemConfigDTO) {
|
||||
if (!StringUtils.isEmpty(systemConfigService.getAdminUsername())) {
|
||||
return ResultBean.error("请勿重复初始化.");
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package im.zhaojun.zfile.filter;
|
||||
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.cors.CorsUtils;
|
||||
import org.springframework.web.filter.GenericFilterBean;
|
||||
|
||||
@@ -8,6 +10,7 @@ import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.annotation.WebFilter;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
@@ -16,6 +19,9 @@ import java.io.IOException;
|
||||
* 开启跨域支持. 一般用于开发环境, 或前后端分离部署时开启.
|
||||
* @author zhaojun
|
||||
*/
|
||||
@Order(1)
|
||||
@WebFilter(value = "/*")
|
||||
@Component
|
||||
public class CorsFilter extends GenericFilterBean {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
package im.zhaojun.zfile.filter;
|
||||
@@ -48,4 +48,6 @@ public class StorageStrategyConfig {
|
||||
|
||||
private String proxyDomain;
|
||||
|
||||
private String region;
|
||||
|
||||
}
|
||||
@@ -2,10 +2,7 @@ package im.zhaojun.zfile.model.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.*;
|
||||
import java.util.Date;
|
||||
|
||||
@Entity(name = "SHORT_LINK")
|
||||
@@ -22,4 +19,4 @@ public class ShortLinkConfig {
|
||||
|
||||
private Date createDate;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -40,6 +40,9 @@ public class OneDriveTokenRefreshSchedule {
|
||||
|
||||
List<DriveConfig> driveConfigList = driveConfigService.findByType(StorageTypeEnum.ONE_DRIVE);
|
||||
driveConfigList.addAll(driveConfigService.findByType(StorageTypeEnum.ONE_DRIVE_CHINA));
|
||||
driveConfigList.addAll(driveConfigService.findByType(StorageTypeEnum.SHAREPOINT_DRIVE));
|
||||
driveConfigList.addAll(driveConfigService.findByType(StorageTypeEnum.SHAREPOINT_DRIVE_CHINA));
|
||||
|
||||
|
||||
driveConfigList.forEach(driveConfig -> {
|
||||
try {
|
||||
|
||||
@@ -216,7 +216,11 @@ public abstract class MicrosoftDriveServiceBase extends AbstractBaseFileService
|
||||
fileItemDTO.setTime(fileItem.getDate("lastModifiedDateTime"));
|
||||
|
||||
if (fileItem.containsKey(ONE_DRIVE_FILE_FLAG)) {
|
||||
fileItemDTO.setUrl(fileItem.getString("@microsoft.graph.downloadUrl"));
|
||||
String originUrl = fileItem.getString("@microsoft.graph.downloadUrl");
|
||||
if (StringUtils.isNotNullOrEmpty(proxyDomain)) {
|
||||
originUrl = StringUtils.replaceHost(originUrl, proxyDomain);
|
||||
}
|
||||
fileItemDTO.setUrl(originUrl);
|
||||
fileItemDTO.setType(FileTypeEnum.FILE);
|
||||
} else {
|
||||
fileItemDTO.setType(FileTypeEnum.FOLDER);
|
||||
|
||||
@@ -2,6 +2,7 @@ package im.zhaojun.zfile.service.impl;
|
||||
|
||||
import cn.hutool.core.util.URLUtil;
|
||||
import cn.hutool.extra.ftp.Ftp;
|
||||
import cn.hutool.extra.ftp.FtpMode;
|
||||
import im.zhaojun.zfile.model.constant.StorageConfigConstant;
|
||||
import im.zhaojun.zfile.model.dto.FileItemDTO;
|
||||
import im.zhaojun.zfile.model.entity.StorageConfig;
|
||||
@@ -22,6 +23,7 @@ import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@@ -66,6 +68,7 @@ public class FtpServiceImpl extends AbstractBaseFileService implements BaseFileS
|
||||
} else {
|
||||
ftp = new Ftp(host, Integer.parseInt(port), username, password, StandardCharsets.UTF_8);
|
||||
ftp.getClient().type(FTP.BINARY_FILE_TYPE);
|
||||
ftp.setMode(FtpMode.Passive);
|
||||
testConnection();
|
||||
isInitialized = true;
|
||||
}
|
||||
@@ -88,6 +91,10 @@ public class FtpServiceImpl extends AbstractBaseFileService implements BaseFileS
|
||||
|
||||
for (FTPFile ftpFile : ftpFiles) {
|
||||
FileItemDTO fileItemDTO = new FileItemDTO();
|
||||
// 跳过 ftp 的本目录和上级目录
|
||||
if (Arrays.asList(".", "..").contains(ftpFile.getName())) {
|
||||
continue;
|
||||
}
|
||||
fileItemDTO.setName(ftpFile.getName());
|
||||
fileItemDTO.setSize(ftpFile.getSize());
|
||||
fileItemDTO.setTime(ftpFile.getTimestamp().getTime());
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package im.zhaojun.zfile.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import im.zhaojun.zfile.exception.InitializeDriveException;
|
||||
import im.zhaojun.zfile.exception.NotExistFileException;
|
||||
import im.zhaojun.zfile.model.constant.StorageConfigConstant;
|
||||
@@ -25,6 +26,7 @@ import javax.annotation.Resource;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -72,6 +74,9 @@ public class LocalServiceImpl extends AbstractBaseFileService implements BaseFil
|
||||
|
||||
@Override
|
||||
public List<FileItemDTO> fileList(String path) throws FileNotFoundException {
|
||||
if (StrUtil.startWith(path, "..") || StrUtil.startWith(path, "/..")) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<FileItemDTO> fileItemList = new ArrayList<>();
|
||||
|
||||
String fullPath = StringUtils.removeDuplicateSeparator(filePath + path);
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
@@ -121,7 +122,7 @@ public class UpYunServiceImpl extends AbstractBaseFileService implements BaseFil
|
||||
int lastDelimiterIndex = path.lastIndexOf("/");
|
||||
String name = path.substring(lastDelimiterIndex + 1);
|
||||
|
||||
Map<String, String> fileInfo = upYun.getFileInfo(StringUtils.removeDuplicateSeparator(basePath + ZFileConstant.PATH_SEPARATOR + path));
|
||||
Map<String, String> fileInfo = upYun.getFileInfo(URLUtil.encode(StringUtils.removeDuplicateSeparator(basePath + ZFileConstant.PATH_SEPARATOR + path), StandardCharsets.UTF_8));
|
||||
|
||||
if (fileInfo == null) {
|
||||
throw new NotExistFileException();
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
package im.zhaojun.zfile.util;
|
||||
|
||||
import cn.hutool.core.codec.Base64;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.lang.UUID;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.URLUtil;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import cn.hutool.http.HttpResponse;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.mpatric.mp3agic.ID3v1;
|
||||
import com.mpatric.mp3agic.ID3v2;
|
||||
import com.mpatric.mp3agic.InvalidDataException;
|
||||
@@ -29,27 +35,36 @@ public class AudioUtil {
|
||||
private static final Logger log = LoggerFactory.getLogger(AudioUtil.class);
|
||||
|
||||
public static AudioInfoDTO getAudioInfo(String url) throws Exception {
|
||||
String query = new URL(URLUtil.decode(url)).getQuery();
|
||||
AudioInfoDTO audioInfoDTO;
|
||||
try {
|
||||
String query = new URL(URLUtil.decode(url)).getQuery();
|
||||
|
||||
if (query != null) {
|
||||
url = url.replace(query, URLUtil.encode(query));
|
||||
if (query != null) {
|
||||
url = url.replace(query, URLUtil.encode(query));
|
||||
}
|
||||
|
||||
// 如果音乐文件大小超出 5M, 则不解析此音乐
|
||||
if (im.zhaojun.zfile.util.HttpUtil.getRemoteFileSize(url)
|
||||
> (1024 * 1024 * ZFileConstant.AUDIO_MAX_FILE_SIZE_MB)) {
|
||||
return AudioInfoDTO.buildDefaultAudioInfoDTO();
|
||||
}
|
||||
|
||||
String fullFilePath = StringUtils.removeDuplicateSeparator(ZFileConstant.TMP_FILE_PATH + ZFileConstant.PATH_SEPARATOR + UUID.fastUUID());
|
||||
|
||||
File file = new File(fullFilePath);
|
||||
FileUtil.mkParentDirs(file);
|
||||
|
||||
final HttpResponse response = HttpRequest.get(url).setFollowRedirects(true).timeout(-1).executeAsync();
|
||||
response.writeBody(file);
|
||||
|
||||
audioInfoDTO = parseAudioInfo(file);
|
||||
audioInfoDTO.setSrc(url);
|
||||
file.deleteOnExit();
|
||||
return audioInfoDTO;
|
||||
} catch (Exception e) {
|
||||
log.error("获取音频文件信息失败.", e);
|
||||
}
|
||||
|
||||
// 如果音乐文件大小超出 5M, 则不解析此音乐
|
||||
if (im.zhaojun.zfile.util.HttpUtil.getRemoteFileSize(url)
|
||||
> (1024 * 1024 * ZFileConstant.AUDIO_MAX_FILE_SIZE_MB)) {
|
||||
return AudioInfoDTO.buildDefaultAudioInfoDTO();
|
||||
}
|
||||
|
||||
String fullFilePath = StringUtils.removeDuplicateSeparator(ZFileConstant.TMP_FILE_PATH + ZFileConstant.PATH_SEPARATOR + UUID.fastUUID());
|
||||
|
||||
File file = new File(fullFilePath);
|
||||
FileUtil.mkParentDirs(file);
|
||||
HttpUtil.downloadFile(url, file);
|
||||
AudioInfoDTO audioInfoDTO = parseAudioInfo(file);
|
||||
audioInfoDTO.setSrc(url);
|
||||
file.deleteOnExit();
|
||||
return audioInfoDTO;
|
||||
return AudioInfoDTO.buildDefaultAudioInfoDTO();
|
||||
}
|
||||
|
||||
private static AudioInfoDTO parseAudioInfo(File file) throws IOException, UnsupportedTagException {
|
||||
@@ -86,4 +101,4 @@ public class AudioUtil {
|
||||
|
||||
return audioInfoDTO;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,7 +35,8 @@ server:
|
||||
servlet:
|
||||
context-path: ''
|
||||
tomcat:
|
||||
max-threads: 20
|
||||
threads:
|
||||
max: 20
|
||||
compression:
|
||||
enabled: true
|
||||
|
||||
@@ -47,13 +48,6 @@ spring:
|
||||
path: /h2-console
|
||||
enabled: ${zfile.debug}
|
||||
datasource:
|
||||
# 初始化数据导入
|
||||
data: classpath*:db/data.sql
|
||||
sql-script-encoding: utf-8
|
||||
|
||||
initialization-mode: always
|
||||
continue-on-error: true
|
||||
|
||||
# h2 内存数据库 配置
|
||||
driver-class-name: org.h2.Driver
|
||||
url: jdbc:h2:${zfile.db.path}
|
||||
@@ -75,5 +69,15 @@ spring:
|
||||
hibernate:
|
||||
format_sql: false
|
||||
show-sql: false
|
||||
generate-ddl: true
|
||||
defer-datasource-initialization: true
|
||||
profiles:
|
||||
active: prod
|
||||
active: prod
|
||||
|
||||
# 初始化数据导入
|
||||
sql:
|
||||
init:
|
||||
continue-on-error: true
|
||||
mode: always
|
||||
data-locations: classpath*:db/data.sql
|
||||
encoding: utf-8
|
||||
|
||||
@@ -1 +1 @@
|
||||
.zfile-admin-index[data-v-77a86734]{height:100%;overflow-y:hidden}.zfile-admin-top[data-v-77a86734]{background-color:#001529}.zfile-admin-top-logo[data-v-77a86734]{cursor:pointer;height:100%;line-height:61px;color:#fff;padding-right:20px}.zfile-admin-top-logo[data-v-77a86734]:hover{color:#1890ff}.zfile-admin-top-content[data-v-77a86734]{display:-webkit-box;display:-ms-flexbox;display:flex;margin:auto;max-width:1200px}.zfile-admin-content[data-v-77a86734]{background-color:#f0f2f5;height:100%;overflow-y:auto}.zfile-admin-content-view[data-v-77a86734]{margin:auto;max-width:1200px;margin-top:50px;margin-bottom:100px}.el-menu--horizontal>.el-menu-item.is-active[data-v-77a86734]{color:#1890ff!important}.el-menu--horizontal>.el-menu-item[data-v-77a86734],.el-menu.el-menu--horizontal[data-v-77a86734]{border:none}.zfile-admin-index-version-info[data-v-77a86734],.zfile-admin-index-version-info[data-v-77a86734] .el-link--inner{font-size:13px}.zfile-login[data-v-834c542c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%}.zfile-login-title[data-v-834c542c]{text-align:center;vertical-align:text-bottom;font-size:30px;font-weight:600;color:red;background-image:linear-gradient(-20deg,#6e45e2,#88d3ce);-webkit-text-fill-color:transparent;-webkit-background-clip:text;line-height:80px}.zfile-login-title small[data-v-834c542c]{font-size:20px}.zfile-login-form[data-v-834c542c]{width:350px;padding:30px 35px 15px;background:#fff;border:1px solid #eaeaea;-webkit-box-shadow:0 0 25px #cac6c6;box-shadow:0 0 25px #cac6c6}.el-row[data-v-506ed09e]{overflow-y:auto}#siteForm[data-v-506ed09e]{margin-top:20px}#siteForm[data-v-506ed09e] .el-select{width:70%}.markdown-body[data-v-12b3dceb]{padding:unset}.el-drive-form-col[data-v-3a30d939]{padding-left:0!important}.zfile-site-id-input-site-type-select[data-v-3a30d939]{width:100px}.zfile-cache-statistics[data-v-4d6f6841]{margin-bottom:20px}.zfile-cache-table[data-v-4d6f6841]{width:100%;overflow-y:auto}.zfile-filter-delete-btn[data-v-20b2942a]{margin-left:10px;margin-top:5px}.zfile-filter-save-btn[data-v-20b2942a]{text-align:right;margin-top:15px}.el-row[data-v-32b498fc]{padding:20px}.el-form-item[data-v-32b498fc]{margin-right:50px}.card-title[data-v-32b498fc]{color:rgba(0,0,0,.45);font-size:14px}.card-content[data-v-32b498fc]{color:rgba(0,0,0,.85);font-size:25px;line-height:30px}.card-title-button[data-v-32b498fc]{float:right;padding:3px 0}.table-search-input[data-v-32b498fc]{width:300px;float:right}#filterForm .el-row[data-v-32b498fc]{padding:0}#cacheDialog[data-v-32b498fc] .el-dialog__body{padding:20px}.table-edit-icon[data-v-32b498fc]{margin-left:5px;color:#409eff;cursor:pointer}.zfile-admin-short-form[data-v-f6484e10] .el-form-item:first-child{margin-left:10px}.zfile-admin-short-form[data-v-f6484e10] .el-form-item:not(:first-child){margin-left:20px}.el-pagination[data-v-f6484e10]{margin-top:15px}.table-edit-icon[data-v-f6484e10]{margin-left:10px;cursor:pointer}.input-with-select .el-select[data-v-3ac09bd8]{width:100px}
|
||||
.zfile-admin-index[data-v-77a86734]{height:100%;overflow-y:hidden}.zfile-admin-top[data-v-77a86734]{background-color:#001529}.zfile-admin-top-logo[data-v-77a86734]{cursor:pointer;height:100%;line-height:61px;color:#fff;padding-right:20px}.zfile-admin-top-logo[data-v-77a86734]:hover{color:#1890ff}.zfile-admin-top-content[data-v-77a86734]{display:-webkit-box;display:-ms-flexbox;display:flex;margin:auto;max-width:1200px}.zfile-admin-content[data-v-77a86734]{background-color:#f0f2f5;height:100%;overflow-y:auto}.zfile-admin-content-view[data-v-77a86734]{margin:auto;max-width:1200px;margin-top:50px;margin-bottom:100px}.el-menu--horizontal>.el-menu-item.is-active[data-v-77a86734]{color:#1890ff!important}.el-menu--horizontal>.el-menu-item[data-v-77a86734],.el-menu.el-menu--horizontal[data-v-77a86734]{border:none}.zfile-admin-index-version-info[data-v-77a86734],.zfile-admin-index-version-info[data-v-77a86734] .el-link--inner{font-size:13px}.zfile-login[data-v-732157c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%}.zfile-login-title[data-v-732157c2]{text-align:center;vertical-align:text-bottom;font-size:30px;font-weight:600;color:red;background-image:linear-gradient(-20deg,#6e45e2,#88d3ce);-webkit-text-fill-color:transparent;-webkit-background-clip:text;line-height:80px}.zfile-login-title small[data-v-732157c2]{font-size:20px}.zfile-login-form[data-v-732157c2]{width:350px;padding:30px 35px 15px;background:#fff;border:1px solid #eaeaea;-webkit-box-shadow:0 0 25px #cac6c6;box-shadow:0 0 25px #cac6c6}.el-row[data-v-506ed09e]{overflow-y:auto}#siteForm[data-v-506ed09e]{margin-top:20px}#siteForm[data-v-506ed09e] .el-select{width:70%}.markdown-body[data-v-12b3dceb]{padding:unset}.el-drive-form-col[data-v-3a30d939]{padding-left:0!important}.zfile-site-id-input-site-type-select[data-v-3a30d939]{width:100px}.zfile-cache-statistics[data-v-4d6f6841]{margin-bottom:20px}.zfile-cache-table[data-v-4d6f6841]{width:100%;overflow-y:auto}.zfile-filter-delete-btn[data-v-20b2942a]{margin-left:10px;margin-top:5px}.zfile-filter-save-btn[data-v-20b2942a]{text-align:right;margin-top:15px}.el-row[data-v-32b498fc]{padding:20px}.el-form-item[data-v-32b498fc]{margin-right:50px}.card-title[data-v-32b498fc]{color:rgba(0,0,0,.45);font-size:14px}.card-content[data-v-32b498fc]{color:rgba(0,0,0,.85);font-size:25px;line-height:30px}.card-title-button[data-v-32b498fc]{float:right;padding:3px 0}.table-search-input[data-v-32b498fc]{width:300px;float:right}#filterForm .el-row[data-v-32b498fc]{padding:0}#cacheDialog[data-v-32b498fc] .el-dialog__body{padding:20px}.table-edit-icon[data-v-32b498fc]{margin-left:5px;color:#409eff;cursor:pointer}.zfile-admin-short-form[data-v-f6484e10] .el-form-item:first-child{margin-left:10px}.zfile-admin-short-form[data-v-f6484e10] .el-form-item:not(:first-child){margin-left:20px}.el-pagination[data-v-f6484e10]{margin-top:15px}.table-edit-icon[data-v-f6484e10]{margin-left:10px;cursor:pointer}.input-with-select .el-select[data-v-3ac09bd8]{width:100px}
|
||||
@@ -1 +1 @@
|
||||
.zfile-install[data-v-89486d62]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%}.zfile-install-form[data-v-89486d62]{width:450px;padding:30px 35px 15px;background:#fff;border:1px solid #eaeaea;-webkit-box-shadow:0 0 15px #cac6c6;box-shadow:0 0 15px #cac6c6}.zfile-install-title[data-v-89486d62]{text-align:center;vertical-align:text-bottom;font-size:30px;font-weight:600;color:red;background-image:linear-gradient(-20deg,#6e45e2,#88d3ce);-webkit-text-fill-color:transparent;-webkit-background-clip:text;line-height:80px}.zfile-install-enter[data-v-89486d62]{text-align:right;margin-bottom:0}.zfile-install-title small[data-v-89486d62]{font-size:20px}
|
||||
.zfile-install[data-v-c4d9c6f8]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%}.zfile-install-form[data-v-c4d9c6f8]{width:450px;padding:30px 35px 15px;background:#fff;border:1px solid #eaeaea;-webkit-box-shadow:0 0 15px #cac6c6;box-shadow:0 0 15px #cac6c6}.zfile-install-title[data-v-c4d9c6f8]{text-align:center;vertical-align:text-bottom;font-size:30px;font-weight:600;color:red;background-image:linear-gradient(-20deg,#6e45e2,#88d3ce);-webkit-text-fill-color:transparent;-webkit-background-clip:text;line-height:80px}.zfile-install-enter[data-v-c4d9c6f8]{text-align:right;margin-bottom:0}.zfile-install-title small[data-v-c4d9c6f8]{font-size:20px}
|
||||
4
src/main/resources/static/js/admin.min.js
vendored
4
src/main/resources/static/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
src/main/resources/static/js/install.min.js
vendored
2
src/main/resources/static/js/install.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,187 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title>404 ERROR</title>
|
||||
<style type="text/css">
|
||||
body, div, h3, h4, li, ol {
|
||||
margin: 0;
|
||||
padding: 0
|
||||
}
|
||||
|
||||
body {
|
||||
font: 14px/1.5 'Microsoft YaHei', '微软雅黑', Helvetica, Sans-serif;
|
||||
min-width: 1200px;
|
||||
background: #f0f1f3;
|
||||
}
|
||||
|
||||
:focus {
|
||||
outline: 0
|
||||
}
|
||||
|
||||
h3, h4, strong {
|
||||
font-weight: 700
|
||||
}
|
||||
|
||||
a {
|
||||
color: #428bca;
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline
|
||||
}
|
||||
|
||||
.error-page {
|
||||
background: #f0f1f3;
|
||||
padding: 80px 0 180px
|
||||
}
|
||||
|
||||
.error-page-container {
|
||||
position: relative;
|
||||
z-index: 1
|
||||
}
|
||||
|
||||
.error-page-main {
|
||||
position: relative;
|
||||
background: #f9f9f9;
|
||||
margin: 0 auto;
|
||||
width: 617px;
|
||||
-ms-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
padding: 50px 50px 70px
|
||||
}
|
||||
|
||||
.error-page-main:before {
|
||||
content: '';
|
||||
display: block;
|
||||
background: url(img/errorPageBorder.png?1427783409637);
|
||||
height: 7px;
|
||||
position: absolute;
|
||||
top: -7px;
|
||||
width: 100%;
|
||||
left: 0
|
||||
}
|
||||
|
||||
.error-page-main h3 {
|
||||
font-size: 24px;
|
||||
font-weight: 400;
|
||||
border-bottom: 1px solid #d0d0d0
|
||||
}
|
||||
|
||||
.error-page-main h3 strong {
|
||||
font-size: 54px;
|
||||
font-weight: 400;
|
||||
margin-right: 20px
|
||||
}
|
||||
|
||||
.error-page-main h4 {
|
||||
font-size: 20px;
|
||||
font-weight: 400;
|
||||
color: #333
|
||||
}
|
||||
|
||||
.error-page-actions {
|
||||
font-size: 0;
|
||||
z-index: 100
|
||||
}
|
||||
|
||||
.error-page-actions div {
|
||||
font-size: 14px;
|
||||
display: inline-block;
|
||||
padding: 30px 0 0 10px;
|
||||
width: 50%;
|
||||
-ms-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: #838383
|
||||
}
|
||||
|
||||
.error-page-actions ol {
|
||||
list-style: decimal;
|
||||
padding-left: 20px
|
||||
}
|
||||
|
||||
.error-page-actions li {
|
||||
line-height: 2.5em
|
||||
}
|
||||
|
||||
.error-page-actions:before {
|
||||
content: '';
|
||||
display: block;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
bottom: 17px;
|
||||
left: 50px;
|
||||
width: 200px;
|
||||
height: 10px;
|
||||
-moz-box-shadow: 4px 5px 31px 11px #999;
|
||||
-webkit-box-shadow: 4px 5px 31px 11px #999;
|
||||
box-shadow: 4px 5px 31px 11px #999;
|
||||
-moz-transform: rotate(-4deg);
|
||||
-webkit-transform: rotate(-4deg);
|
||||
-ms-transform: rotate(-4deg);
|
||||
-o-transform: rotate(-4deg);
|
||||
transform: rotate(-4deg)
|
||||
}
|
||||
|
||||
.error-page-actions:after {
|
||||
content: '';
|
||||
display: block;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
bottom: 17px;
|
||||
right: 50px;
|
||||
width: 200px;
|
||||
height: 10px;
|
||||
-moz-box-shadow: 4px 5px 31px 11px #999;
|
||||
-webkit-box-shadow: 4px 5px 31px 11px #999;
|
||||
box-shadow: 4px 5px 31px 11px #999;
|
||||
-moz-transform: rotate(4deg);
|
||||
-webkit-transform: rotate(4deg);
|
||||
-ms-transform: rotate(4deg);
|
||||
-o-transform: rotate(4deg);
|
||||
transform: rotate(4deg)
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="error-page">
|
||||
<div class="error-page-container">
|
||||
<div class="error-page-main">
|
||||
<h3>
|
||||
<strong>404</strong>很抱歉,您要访问的文件/页面不存在!
|
||||
</h3>
|
||||
<div class="error-page-actions">
|
||||
<div>
|
||||
<h4>可能原因:</h4>
|
||||
<ol>
|
||||
<li>网络信号差不稳定</li>
|
||||
<li>找不到请求的页面</li>
|
||||
<li>输入的网址不正确</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div>
|
||||
<h4>可以尝试:</h4>
|
||||
<ol>
|
||||
<li><a href="#" onclick="backHomePage()">返回首页</a></li>
|
||||
<li><a href="https://github.com/zhaojun1998/zfile/issues" target="_blank">留言反馈</a></li>
|
||||
<li><a href="#">联系站长</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function backHomePage() {
|
||||
window.location.href = window.location.origin;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user