杂七杂八的清理工作
This commit is contained in:
parent
b09d2e6c36
commit
7154ee9ce1
@ -7,6 +7,9 @@ use app\models\RenameForm;
|
||||
use app\models\UploadForm;
|
||||
use app\models\ZipForm;
|
||||
use app\utils\FileTypeDetector;
|
||||
use Exception;
|
||||
use RecursiveDirectoryIterator;
|
||||
use RecursiveIteratorIterator;
|
||||
use wapmorgan\UnifiedArchive\Exceptions\ArchiveExtractionException;
|
||||
use wapmorgan\UnifiedArchive\Exceptions\FileAlreadyExistsException;
|
||||
use wapmorgan\UnifiedArchive\Exceptions\UnsupportedOperationException;
|
||||
@ -25,7 +28,7 @@ class HomeController extends Controller
|
||||
{
|
||||
protected string $pattern = '/^[^\p{C}:*?"<>|\\\\]+$/u';
|
||||
|
||||
public function behaviors()
|
||||
public function behaviors(): array
|
||||
{
|
||||
return array_merge(
|
||||
parent::behaviors(),
|
||||
@ -51,13 +54,14 @@ class HomeController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* diplay the page of the file manager (accepts a directory parameter like cd command)
|
||||
* display the page of the file manager (accepts a directory parameter like cd command)
|
||||
* visit it via https://devs.chenx221.cyou:8081/index.php?r=home
|
||||
*
|
||||
* @param null $directory
|
||||
* @return string|Response
|
||||
* @throws NotFoundHttpException
|
||||
*/
|
||||
public function actionIndex($directory = null)
|
||||
public function actionIndex($directory = null): Response|string
|
||||
{
|
||||
if (Yii::$app->user->isGuest) {
|
||||
return $this->redirect(Yii::$app->user->loginUrl);
|
||||
@ -94,7 +98,7 @@ class HomeController extends Controller
|
||||
* @return array 文件和文件夹内容数组
|
||||
* @throws NotFoundHttpException 如果路径不存在
|
||||
*/
|
||||
protected function getDirectoryContents($path)
|
||||
protected function getDirectoryContents(string $path): array
|
||||
{
|
||||
// 确定路径是否存在
|
||||
if (!is_dir($path)) {
|
||||
@ -127,7 +131,7 @@ class HomeController extends Controller
|
||||
* @param string $relativePath 文件的相对路径
|
||||
* @throws NotFoundHttpException 如果文件不存在
|
||||
*/
|
||||
public function actionDownload($relativePath)
|
||||
public function actionDownload(string $relativePath): void
|
||||
{
|
||||
// 对相对路径进行解码
|
||||
$relativePath = rawurldecode($relativePath);
|
||||
@ -161,7 +165,7 @@ class HomeController extends Controller
|
||||
* @return string|Response|null
|
||||
* @throws NotFoundHttpException 如果文件或文件夹不存在
|
||||
*/
|
||||
public function actionRename()
|
||||
public function actionRename(): Response|string|null
|
||||
{
|
||||
$relativePath = Yii::$app->request->post('relativePath');
|
||||
|
||||
@ -183,7 +187,11 @@ class HomeController extends Controller
|
||||
|
||||
$model = new RenameForm();
|
||||
|
||||
try {
|
||||
$model->newName = ArrayHelper::getValue(Yii::$app->request->post('RenameForm'), 'newName');
|
||||
} catch (Exception) {
|
||||
throw new NotFoundHttpException('Invalid request.');
|
||||
}
|
||||
|
||||
if (!$model->validate()) {
|
||||
Yii::$app->response->statusCode = 400;
|
||||
@ -209,7 +217,7 @@ class HomeController extends Controller
|
||||
* 删除文件或文件夹
|
||||
* @throws NotFoundHttpException 如果文件或文件夹不存在
|
||||
*/
|
||||
public function actionDelete()
|
||||
public function actionDelete(): Response
|
||||
{
|
||||
$relativePaths = Yii::$app->request->post('relativePath');
|
||||
if (!is_array($relativePaths)) {
|
||||
@ -253,7 +261,7 @@ class HomeController extends Controller
|
||||
* 递归删除目录及其内容
|
||||
* @param string $dir 目录路径
|
||||
*/
|
||||
protected function deleteDirectory($dir): bool
|
||||
protected function deleteDirectory(string $dir): bool
|
||||
{
|
||||
if (!is_dir($dir)) {
|
||||
return false;
|
||||
@ -282,9 +290,9 @@ class HomeController extends Controller
|
||||
* 注意,已存在的同名文件会被覆盖
|
||||
* https://devs.chenx221.cyou:8081/index.php?r=home%2Fupload
|
||||
*
|
||||
* @return string|Response
|
||||
* @return int
|
||||
*/
|
||||
public function actionUpload()
|
||||
public function actionUpload(): int
|
||||
{
|
||||
$model = new UploadForm();
|
||||
$model->targetDir = Yii::$app->request->post('targetDir', '.');
|
||||
@ -316,9 +324,9 @@ class HomeController extends Controller
|
||||
/**
|
||||
* 新建文件夹
|
||||
*
|
||||
* @return array|string|Response
|
||||
* @return array|Response
|
||||
*/
|
||||
public function actionNewFolder()
|
||||
public function actionNewFolder(): Response|array
|
||||
{
|
||||
|
||||
$relativePath = Yii::$app->request->post('relativePath');
|
||||
@ -354,10 +362,10 @@ class HomeController extends Controller
|
||||
* @param string $directory 目录路径
|
||||
* @return int 目录的大小(字节)
|
||||
*/
|
||||
protected function getDirectorySize($directory)
|
||||
protected function getDirectorySize(string $directory): int
|
||||
{
|
||||
$size = 0;
|
||||
$files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($directory));
|
||||
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
|
||||
foreach ($files as $file) {
|
||||
if ($file->isFile()) {
|
||||
$size += $file->getSize();
|
||||
@ -369,7 +377,7 @@ class HomeController extends Controller
|
||||
/**
|
||||
* @throws NotFoundHttpException
|
||||
*/
|
||||
public function actionDownloadFolder($relativePath)
|
||||
public function actionDownloadFolder($relativePath): Response|\yii\console\Response
|
||||
{
|
||||
$relativePath = rawurldecode($relativePath);
|
||||
if (!preg_match($this->pattern, $relativePath) || str_contains($relativePath, '..')) {
|
||||
@ -391,12 +399,12 @@ class HomeController extends Controller
|
||||
$zipPath = $tempDir . basename($absolutePath) . '.zip';
|
||||
|
||||
if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE)) {
|
||||
$files = new \RecursiveIteratorIterator(
|
||||
new \RecursiveDirectoryIterator($absolutePath),
|
||||
\RecursiveIteratorIterator::LEAVES_ONLY
|
||||
$files = new RecursiveIteratorIterator(
|
||||
new RecursiveDirectoryIterator($absolutePath),
|
||||
RecursiveIteratorIterator::LEAVES_ONLY
|
||||
);
|
||||
|
||||
foreach ($files as $name => $file) {
|
||||
foreach ($files as $file) {
|
||||
if (!$file->isDir()) {
|
||||
$filePath = $file->getRealPath();
|
||||
$relativePath = substr($filePath, strlen($absolutePath) + 1);
|
||||
@ -415,7 +423,7 @@ class HomeController extends Controller
|
||||
* @return \yii\console\Response|Response
|
||||
* @throws NotFoundHttpException
|
||||
*/
|
||||
public function actionMultiFfZipDl()
|
||||
public function actionMultiFfZipDl(): Response|\yii\console\Response
|
||||
{
|
||||
// 获取请求中的文件和文件夹的相对路径
|
||||
$relativePaths = Yii::$app->request->post('relativePaths');
|
||||
@ -465,11 +473,11 @@ class HomeController extends Controller
|
||||
if (is_file($absolutePath)) {
|
||||
$zip->addFile($absolutePath, $relativePath);
|
||||
} else if (is_dir($absolutePath)) {
|
||||
$files = new \RecursiveIteratorIterator(
|
||||
new \RecursiveDirectoryIterator($absolutePath),
|
||||
\RecursiveIteratorIterator::LEAVES_ONLY
|
||||
$files = new RecursiveIteratorIterator(
|
||||
new RecursiveDirectoryIterator($absolutePath),
|
||||
RecursiveIteratorIterator::LEAVES_ONLY
|
||||
);
|
||||
foreach ($files as $name => $file) {
|
||||
foreach ($files as $file) {
|
||||
if (!$file->isDir()) {
|
||||
$filePath = $file->getRealPath();
|
||||
$relativePathInZip = $relativePath . '/' . substr($filePath, strlen($absolutePath) + 1);
|
||||
@ -488,7 +496,7 @@ class HomeController extends Controller
|
||||
* @return Response
|
||||
* @throws NotFoundHttpException
|
||||
*/
|
||||
public function actionZip()
|
||||
public function actionZip(): Response
|
||||
{
|
||||
$model = new ZipForm();
|
||||
$relativePaths = json_decode(Yii::$app->request->post('relativePath'), true);
|
||||
@ -514,9 +522,9 @@ class HomeController extends Controller
|
||||
try {
|
||||
UnifiedArchive::create($absolutePaths, $zipPath);
|
||||
Yii::$app->session->setFlash('success', '打包成功');
|
||||
} catch (FileAlreadyExistsException $e) {
|
||||
} catch (FileAlreadyExistsException) {
|
||||
Yii::$app->session->setFlash('error', '目标文件夹已存在同名压缩档案');
|
||||
} catch (UnsupportedOperationException $e) {
|
||||
} catch (UnsupportedOperationException) {
|
||||
Yii::$app->session->setFlash('error', '不支持的操作');
|
||||
}
|
||||
}
|
||||
@ -526,7 +534,7 @@ class HomeController extends Controller
|
||||
/**
|
||||
* @throws NotFoundHttpException
|
||||
*/
|
||||
public function actionUnzip()
|
||||
public function actionUnzip(): array
|
||||
{
|
||||
$relativePath = Yii::$app->request->post('relativePath');
|
||||
if (!preg_match($this->pattern, $relativePath) || str_contains($relativePath, '..')) {
|
||||
@ -550,15 +558,15 @@ class HomeController extends Controller
|
||||
try {
|
||||
$archive->extract($targetDirectory);
|
||||
Yii::$app->session->setFlash('success', 'Folder created successfully.');
|
||||
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
|
||||
Yii::$app->response->format = Response::FORMAT_JSON;
|
||||
return [
|
||||
'status' => 200,
|
||||
'directory' => pathinfo($relativePath, PATHINFO_FILENAME) . '_' . time(),
|
||||
];
|
||||
} catch (ArchiveExtractionException $e) {
|
||||
} catch (ArchiveExtractionException) {
|
||||
$this->deleteDirectory($targetDirectory);
|
||||
Yii::$app->session->setFlash('error', 'Failed to extract the archive.');
|
||||
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
|
||||
Yii::$app->response->format = Response::FORMAT_JSON;
|
||||
return [
|
||||
'status' => 500,
|
||||
'directory' => pathinfo($relativePath, PATHINFO_FILENAME) . '_' . time(),
|
||||
@ -572,7 +580,7 @@ class HomeController extends Controller
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function actionPaste()
|
||||
public function actionPaste(): Response
|
||||
{
|
||||
// 获取请求中的操作类型、相对路径和目标目录
|
||||
$operation = Yii::$app->request->post('operation');
|
||||
@ -650,7 +658,7 @@ class HomeController extends Controller
|
||||
* @param string $destination 目标目录路径
|
||||
* @return bool 操作是否成功
|
||||
*/
|
||||
protected function copyDirectory($source, $destination)
|
||||
protected function copyDirectory(string $source, string $destination): bool
|
||||
{
|
||||
// 创建目标目录
|
||||
if (!mkdir($destination)) {
|
||||
@ -695,7 +703,7 @@ class HomeController extends Controller
|
||||
* @param string $destination 目标目录路径
|
||||
* @return bool 操作是否成功
|
||||
*/
|
||||
protected function moveDirectory($source, $destination)
|
||||
protected function moveDirectory(string $source, string $destination): bool
|
||||
{
|
||||
// 创建目标目录
|
||||
if (!mkdir($destination)) {
|
||||
@ -739,4 +747,30 @@ class HomeController extends Controller
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* @throws NotFoundHttpException
|
||||
*/
|
||||
public function actionChecksum(): array
|
||||
{
|
||||
$relativePath = Yii::$app->request->post('relativePath');
|
||||
if (!preg_match($this->pattern, $relativePath) || str_contains($relativePath, '..')) {
|
||||
throw new NotFoundHttpException('Invalid file path.');
|
||||
}
|
||||
$absolutePath = Yii::getAlias(Yii::$app->params['dataDirectory']) . '/' . Yii::$app->user->id . '/' . $relativePath;
|
||||
if (!is_file($absolutePath)) {
|
||||
throw new NotFoundHttpException('The specified path does not point to a file.');
|
||||
}
|
||||
// 计算文件的校验值
|
||||
$crc32b = hash_file('crc32b', $absolutePath);
|
||||
$sha256 = hash_file('sha256', $absolutePath);
|
||||
|
||||
// 将校验值返回给客户端
|
||||
Yii::$app->response->format = Response::FORMAT_JSON;
|
||||
return [
|
||||
'crc32b' => strtoupper($crc32b),
|
||||
'sha256' => strtoupper($sha256),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ class UserController extends Controller
|
||||
/**
|
||||
* Creates a new User model.
|
||||
* If creation is successful, the browser will be redirected to the 'view' page.
|
||||
* @return string|\yii\web\Response
|
||||
* @return string|Response
|
||||
*/
|
||||
public function actionCreate()
|
||||
{
|
||||
@ -89,7 +89,7 @@ class UserController extends Controller
|
||||
* Updates an existing User model.
|
||||
* If update is successful, the browser will be redirected to the 'view' page.
|
||||
* @param int $id ID
|
||||
* @return string|\yii\web\Response
|
||||
* @return string|Response
|
||||
* @throws NotFoundHttpException if the model cannot be found
|
||||
*/
|
||||
public function actionUpdate($id)
|
||||
@ -109,7 +109,7 @@ class UserController extends Controller
|
||||
* Deletes an existing User model.
|
||||
* If deletion is successful, the browser will be redirected to the 'index' page.
|
||||
* @param int $id ID
|
||||
* @return \yii\web\Response
|
||||
* @return Response
|
||||
* @throws NotFoundHttpException if the model cannot be found
|
||||
*/
|
||||
public function actionDelete($id)
|
||||
@ -139,7 +139,7 @@ class UserController extends Controller
|
||||
* Displays the login page.
|
||||
* visit via https://devs.chenx221.cyou:8081/index.php?r=user%2Flogin
|
||||
*
|
||||
* @return string|\yii\web\Response
|
||||
* @return string|Response
|
||||
*/
|
||||
public function actionLogin()
|
||||
{
|
||||
@ -163,7 +163,7 @@ class UserController extends Controller
|
||||
|
||||
/**
|
||||
* Logs out the current user.
|
||||
* @return \yii\web\Response
|
||||
* @return Response
|
||||
*/
|
||||
public function actionLogout()
|
||||
{
|
||||
|
@ -43,6 +43,6 @@ class NewFolderForm extends Model
|
||||
$userHomeDir = Yii::getAlias(Yii::$app->params['dataDirectory']) . '/' . Yii::$app->user->id;
|
||||
$absolutePath = $userHomeDir . '/' . $this->relativePath . '/' . $this->folderName;
|
||||
|
||||
return mkdir($absolutePath, 0777);
|
||||
return mkdir($absolutePath);
|
||||
}
|
||||
}
|
@ -3,6 +3,7 @@
|
||||
namespace app\models;
|
||||
|
||||
use Yii;
|
||||
use yii\db\ActiveRecord;
|
||||
use yii\web\IdentityInterface;
|
||||
|
||||
/**
|
||||
@ -15,7 +16,7 @@ use yii\web\IdentityInterface;
|
||||
* @property string|null $email 邮箱
|
||||
* @property int|null $status 用户状态
|
||||
*/
|
||||
class User extends \yii\db\ActiveRecord implements IdentityInterface
|
||||
class User extends ActiveRecord implements IdentityInterface
|
||||
{
|
||||
public $password2; // 重复密码
|
||||
public $rememberMe; // 记住我
|
||||
|
32
qodana.yaml
Normal file
32
qodana.yaml
Normal file
@ -0,0 +1,32 @@
|
||||
#-------------------------------------------------------------------------------#
|
||||
# Qodana analysis is configured by qodana.yaml file #
|
||||
# https://www.jetbrains.com/help/qodana/qodana-yaml.html #
|
||||
#-------------------------------------------------------------------------------#
|
||||
version: "1.0"
|
||||
|
||||
#Specify inspection profile for code analysis
|
||||
profile:
|
||||
name: qodana.starter
|
||||
|
||||
#Enable inspections
|
||||
#include:
|
||||
# - name: <SomeEnabledInspectionId>
|
||||
|
||||
#Disable inspections
|
||||
#exclude:
|
||||
# - name: <SomeDisabledInspectionId>
|
||||
# paths:
|
||||
# - <path/where/not/run/inspection>
|
||||
|
||||
php:
|
||||
version: 8.2 #(Applied in CI/CD pipeline)
|
||||
|
||||
#Execute shell command before Qodana execution (Applied in CI/CD pipeline)
|
||||
#bootstrap: sh ./prepare-qodana.sh
|
||||
|
||||
#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
|
||||
#plugins:
|
||||
# - id: <plugin.id> #(plugin id can be found at https://plugins.jetbrains.com)
|
||||
|
||||
#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
|
||||
linter: jetbrains/qodana-php:latest
|
@ -76,8 +76,7 @@ $this->registerCssFile('@web/css/home_style.css');
|
||||
]);
|
||||
?>
|
||||
|
||||
<nav style="--bs-breadcrumb-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath d='M2.5 0L1 1.5 3.5 4 1 6.5 2.5 8l4-4-4-4z' fill='%236c757d'/%3E%3C/svg%3E");"
|
||||
aria-label="breadcrumb">
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<?= Html::a('<i class="fa-solid fa-house"></i> HOME', ['home/index'], ['class' => 'breadcrumb-item']) ?>
|
||||
<?php if ($directory !== null): ?>
|
||||
@ -228,6 +227,15 @@ echo Html::submitButton('创建', ['class' => 'btn btn-primary']);
|
||||
|
||||
ActiveForm::end();
|
||||
Modal::end();
|
||||
|
||||
Modal::begin([
|
||||
'id' => 'checksumModal',
|
||||
'title' => '文件校验信息',
|
||||
'size' => 'modal-lg',
|
||||
]);
|
||||
echo Html::tag('p', '', ['id' => 'crc32b']);
|
||||
echo Html::tag('p', '', ['id' => 'sha256']);
|
||||
Modal::end();
|
||||
$this->registerJsFile('@web/js/home_script.js', ['depends' => [JqueryAsset::class], 'position' => View::POS_END]);
|
||||
?>
|
||||
|
||||
|
@ -78,7 +78,7 @@ $this->registerLinkTag(['rel' => 'icon', 'type' => 'image/x-icon', 'href' => Yii
|
||||
<div class="row text-muted">
|
||||
<div class="col-md-6 text-center text-md-start"><?php echo '© Created & Design by ' . '<a href="https://blog.chenx221.cyou" rel="external">Chenx221</a> | 2024 - ' . date('Y') ?></div>
|
||||
<div class="col-md-6 text-center text-md-end"><?= Yii::t('yii', 'Powered by {yii}', [
|
||||
'yii' => '<a href="https://www.yiiframework.com/" rel="external">' . \Yii::t('yii',
|
||||
'yii' => '<a href="https://www.yiiframework.com/" rel="external">' . Yii::t('yii',
|
||||
'Yii Framework') . '</a>',
|
||||
]) ?></div>
|
||||
</div>
|
||||
|
@ -1,3 +1,6 @@
|
||||
nav {
|
||||
--bs-breadcrumb-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath d='M2.5 0L1 1.5 3.5 4 1 6.5 2.5 8l4-4-4-4z' fill='%236c757d'/%3E%3C/svg%3E");
|
||||
}
|
||||
table a {
|
||||
text-decoration-line: none;
|
||||
color: black;
|
||||
|
@ -168,8 +168,23 @@ $(document).on('click', '.batch-paste-btn', function () {
|
||||
});
|
||||
|
||||
$(document).on('click', '.calc-sum-btn', function () {
|
||||
console.log('计算文件校验值按钮被点击');
|
||||
// 在这里添加你的代码
|
||||
var relativePath = $('.select-item:checked').first().data('relativePath');
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "index.php?r=home%2Fchecksum",
|
||||
data: { relativePath: relativePath },
|
||||
dataType: "json",
|
||||
success: function(response) {
|
||||
// 更新模态框中的内容
|
||||
$('#crc32b').text('CRC32B: ' + response.crc32b);
|
||||
$('#sha256').text('SHA256: ' + response.sha256);
|
||||
// 显示模态框
|
||||
$('#checksumModal').modal('show');
|
||||
},
|
||||
error: function() {
|
||||
console.error('AJAX request failed.');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(document).on('click', '.single-share-btn', function () {
|
||||
|
Loading…
Reference in New Issue
Block a user