30 十二月, 2023

thumbnail

盒子加外置硬盘搭建Navidrome私人音乐服务器

本文资源都来源网络只是整合修改
家里使用PC搭建了NAS配置N3160低功耗U 8快8TBSAS硬盘 平时使用频率并不是很高出于对数据的保护和节能的目的将私有云盘及私人音乐服务器迁移至ARM ubuntu上
arm ubuntu 使用M301H 刷写最新64位系统 外置硬盘使用3.5寸硬盘盒加2TB希捷硬盘 电源使用12V3A 1拖2 5.5MM适配器 经过测试盒子加硬盘盒满载14W 待机2W左右
私有云请参照论坛里可道云的安装此处不在重复下面开始Navidrome安装
1.新建一个组和用户用来运行Navidrome,官方不推荐使用root用户运行Navidrome
groupadd -r navidrome 创建组
useradd -r -g navidrome -s /sbin/nologin -M -c "Navidrome Daemons" navidrome 创建用户

  1. 创建Navidrome的安装目录与运行目录。
    install -d -o navidrome -g navidrome /opt/navidrome 安装目录
    install -d -o navidrome -g navidrome /var/lib/navidrome 运行目录

3.从github下载Navidrome最新的二进制文件,重命名为Navidrome.tar.gz解压至安装目录并且设置运行权限。
https://github.com/navidrome/navidrome/releases github地址
下面是下载地址清按需下载 我刷了64位系统使用arm64 其他的清按需下载
https://github.com/navidrome/navidrome/releases/download/v0.47.5/navidrome_0.47.5_Linux_arm64.tar.gz
https://github.com/navidrome/navidrome/releases/download/v0.47.5/navidrome_0.47.5_Linux_armv7.tar.gz
https://github.com/navidrome/navidrome/releases/download/v0.47.5/navidrome_0.47.5_Linux_armv6.tar.gz
https://github.com/navidrome/navidrome/releases/download/v0.47.5/navidrome_0.47.5_Linux_armv5.tar.gz
https://github.com/navidrome/navidrome/releases/download/v0.47.5/navidrome_0.47.5_Linux_i386.tar.gz
https://github.com/navidrome/navidrome/releases/download/v0.47.5/navidrome_0.47.5_Linux_x86_64.tar.gz
https://github.com/navidrome/navidrome/releases/download/v0.47.5/navidrome_0.47.5_macOS_x86_64.tar.gz
https://github.com/navidrome/navidrome/releases/download/v0.47.5/navidrome_0.47.5_Windows_i386.zip
https://github.com/navidrome/navidrome/releases/download/v0.47.5/navidrome_0.47.5_Windows_x86_64.zip

sudo tar -xvzf Navidrome.tar.gz -C /opt/navidrome/ 解压文件
sudo chown -R navidrome:navidrome /opt/navidrome 给与权限

  1. 创建Navidrome的配置文件
    https://www.navidrome.org/docs/usage/configuration-options/ 官方给出的配置文件可用选项

    vim /var/lib/navidrome/navidrome.toml 创建编辑
    MusicFolder = "<library_path>" 文件内容<library_path>修改为音乐文件存放路径


如果家里有IPV6可添加大于10000以上端口并在路由器上放开对应IPV6端口可实现直接远程连接
port = "32400" 此项不是必须因我使用PLEX路由器以开放32400端口 如无此项默认使用4533端口

  1. 创建启动服务项目
    vim /etc/systemd/system/navidrome.service 创建编辑

下为内容

[Unit]  Description=Navidrome Music Server and Streamer compatible with Subsonic/Airsonic  After=remote-fs.target network.target  AssertPathExists=/var/lib/navidrome    [Install]  WantedBy=multi-user.target    [Service]  User=navidrome  Group=navidrome  Type=simple  ExecStart=/opt/navidrome/navidrome --configfile "/var/lib/navidrome/navidrome.toml"  WorkingDirectory=/var/lib/navidrome  TimeoutStopSec=20  KillMode=process  Restart=on-failure    #See https://www.freedesktop.org/software/systemd/man/systemd.exec.html  DevicePolicy=closed  NoNewPrivileges=yes  PrivateTmp=yes  PrivateUsers=yes  ProtectControlGroups=yes  ProtectKernelModules=yes  ProtectKernelTunables=yes  RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6  RestrictNamespaces=yes  RestrictRealtime=yes  SystemCallFilter=~@clock @debug @module @mount @obsolete @"reboot"#42 @setuid @swap  ReadWritePaths=/var/lib/navidrome    # You can uncomment the following line if you're not using the jukebox This  # will prevent navidrome from accessing any real (physical) devices  #PrivateDevices=yes    # You can change the following line to `strict` instead of `full` if you don't  # want navidrome to be able to write anything on your filesystem outside of  # /var/lib/navidrome.  ProtectSystem=full    # You can comment the following line if you don't have any media in /home/*.  # This will prevent navidrome from ever reading/writing anything there.  #ProtectHome=true

  1. 更新并启动Navidrome
    systemctl daemon-reload 更新服务列表
    systemctl start navidrome.service 启动服务
    systemctl status navidrome.service 查看服务状态

如出现 Active: active (running) 服务以启动
使用 ip:4533 访问服务器
一切正常以后添加开启启动服务
sudo systemctl enable navidrome.service


支持应用
iOS:play:Sub、 substreamer、 Amperfy和 iSub
安卓:DSub, Subtracks, substreamer, Ultrasonic和 Audinaut
网络:Subplayer、 Airsonic Refix、 Aurial、 Jamstash和 Subfire
桌面:Sublime Music (Linux) 和Sonixd (Windows/Linux/macOS)
CLI:Jellycli (Windows/Linux) 和STMP (Linux/macOS)
连接的扬声器:
Sonos: bonob Alexa:AskSonic
其他:
Subsonic Kodi 插件、 Navidrome Kodi 插件、 HTTP目录文件系统

如果是MP3 之类不需要解码可直接使用 如果遇到其它格式播放器无法识别需要转码的需要ffmpeg 下为安装步骤

  1. 安装依赖库
    apt-get update
    apt-get -y install \
    autoconf \
    automake \
    build-essential \
    cmake \
    git-core \
    libass-dev \
    libfreetype6-dev \
    libgnutls28-dev \
    libmp3lame-dev \
    libsdl2-dev \
    libtool \
    libva-dev \
    libvdpau-dev \
    libvorbis-dev \
    libxcb1-dev \
    libxcb-shm0-dev \
    libxcb-xfixes0-dev \
    meson \
    ninja-build \
    pkg-config \
    texinfo \
    wget \
    yasm \
    zlib1g-dev \
    libunistring-dev

  2. 安装ffmpeg
    apt install ffmpeg


    验证安装
    ffmpeg –version


    出现下面提示表示安装完成
    ffmpeg version 4.2.7-0ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers
    built with gcc 9 (Ubuntu 9.4.0-1ubuntu120.04.1)
    configuration: --prefix=/usr --extra-version=0ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
    libavutil 56. 31.100 / 56. 31.100
    libavcodec 58. 54.100 / 58. 54.100
    libavformat 58. 29.100 / 58. 29.100
    libavdevice 58. 8.100 / 58. 8.100
    libavfilter 7. 57.100 / 7. 57.100
    libavresample 4. 0. 0 / 4. 0. 0
    libswscale 5. 5.100 / 5. 5.100
    libswresample 3. 5.100 / 3. 5.100
    libpostproc 55. 5.100 / 55. 5.100

 
thumbnail

轻度用户一些刚需功能设置的分享贴

本贴主要包括三个内容:挂载本地硬盘,alist云盘映射到本地,zerotier内网穿透,我也是个小白,现学现卖的弄了一个礼拜,作为轻度用户,刚需功能都搭好了,分享一下经验,很多用语可能很业余,各方面有什么不对的请各路大神多指正。
一、硬盘挂载(使用说明里说的很清楚了,我就简单归纳一下)
1.1先检查磁盘识别情况
指令:df -h
可以看到已识别的硬盘路径,应该是:/mnt/sda1
建立一个新文件夹,名称随意(以usb-share为例)
1.2赋权
指令:chmod -R 777 /mnt/sda1/usb-share
1.3硬盘配置文件使硬盘可见
开启vi编辑修改文件,指令:vi /etc/samba/smb.conf
在文件结尾添加代码(可百度Vi编辑器常用操作)
中括号里是显示在文件管理器中的名字,与文件夹的名字可以不一致。如下所示:虽然我新建的文件夹叫usb-share,但是挂在到本地磁盘后看到的是HH
[HH]
path = /mnt/sda1/usb-share
read only = no
guest ok = yes
create mask = 0777
directory mask = 0777
browseable = yes

1.4重启Samba 服务
指令:systemctl restart smbd

二、挂载云盘
2.1配置alist储存
查看nas主页使用说明教程相应链接。
添加相应云盘:个人常用:阿里云盘、天翼云盘

2.2安装davfs2
此步骤为我误入歧途时查的一个教程中让安装的,为在nas端挂载并分享alist用,之后发现该方法不可行,但是换方法后也没有卸载,所以我也不知道是不是必须安装。我个人觉得他不是必须的,可以省略,但以防万一还是写出来吧。
指令:sudo apt-get install davfs2
2.3云盘映射到本地
选择相应的软件设置,推荐:
手机端 猫头鹰管理器(我用小米手机,应用商店里就能下载,我觉得还挺好用的,华为如果是本地访问可以用自带的文件管理器,但是穿透的时候好像不行)
电脑端 airlivedrive

云盘路径:默认alist开放端口为5244,路径为/alist/dav
地址格式为:http://192.168..:5244/alist/dav/
账号密码:alist中自行设置
相应软件按上述信息填写即可
PS:添加天翼云盘时要选本地代理而非302定向,映射磁盘的时候才有读写权限。但是天翼云盘的权限问题受映射软件影响,如在PC端的使用raidrive映射后,阿里云盘正常使用,但是天翼云盘只能看见文件名却无读写权限,改本地代理后也只有读取无法写入。所以我改成了airlivedrive这个软件。
直接百度软件名字,就有官网下载就行了。

三、免费内网穿透(zerotier)
3.1zerotier组网
建议自行百度图文教程,真的很简单,注册个账号的事儿,建议先用手机和电脑试一下,因为直接用Linux的加入组网出了问题你可能也不知道是怎么回事儿,反正最终也是要多终端打通,所以用手机电脑先组上,对组网的整个流程有个概念,后边省事一点儿。
3.2 Linux系统下安装本软件
运行官网里面给的linux系统安装指令
curl -s https://install.zerotier.com | sudo bash
这个环节一般没问题,出了问题就重置或者百度吧。
3.3加入 提前建立好的zerotier组网id(###########)
指令:sudo zerotier-cli join ###########
正常则返回:200 join OK
之后去zerotier官网登录自己的账号进入该id的管理界面找到nas这个设备打勾就行了。看不懂本段的建议你如4.1所说先去用电脑和手机组个网。
打完勾输入分配给nas的ip就可以远程访问了。有一个开机自动启动的指令,但是它这个应该是默认就已经打开开机启动了的,反正我nas断电了好几次都能直接连上。
3.4 Linux端zerotier常用指令
zerotier-cli status:查看连接状态,正常则返回200 info ########### 1.10.6 ONLINE、异常则返回200 info ########### 1.10.6 OFFLINE
sudo zerotier-cli listnetworks:查看当前连接的网络,返回两行内容,代表当前连接网络的运行状态,要关注的是status这个参数,当其显示:ok则说明已连接;acdess 表示在管理页面可以看见设备但是没打勾;REQUESTING_CONFIGURATION 表示它网你的zerotier服务器发送组网申请了,但是没发出去,服务器也没收到这个申请,所以不显示新设备。


 
thumbnail

nclone实战

.. 这是一个nclone的实战说明

========================================================================

nclone实战

:作者: holts
:Email: [email protected]
:版本: $Revision: 1.00 $
:日期: $Date: 2023/12/12 16:28:00 $
:声明: 不承担由此产生的一切不良后果
:版权: 此文档遵从开放原则,你可以自由的复制,修改,发布,发售,购买, 租借,销毁,改进;或是引用,摘录,合并,比较,分类等等, 总之你可以自由使用此文档.

.. contents:: 内容索引 Table of Contents
.. section-numbering::

rclone安装

========================================================================

Rclone 官网: https://rclone.org/
负责把网盘的webdav映射到NAS的文件系统内

sudo -v ; curl https://rclone.org/install.sh | sudo bash
sudo apt-get install fuse
sudo ln -s /bin/fusermount /bin/fusermount3

配置

========================================================================

sudo rclone config

按提示为remote取名,这里我以alist为名字.
上述操作完成之后会列出一个支持列表,选择存储类型,此处选择webdav,从列出的选项可知输入52(注意:根据版本的不同,此处的数字可能会有变化,选择webdav对应的编号即可,请自行选择自己机器上列出的选项)

接下来填写webdav的地址,输入webdav的地址,此处使用的是alist的webdav地址,请根据自己安装的alist进行填写,这里填写 Http://xxx.ltd/alist/dav/

选择供应商,填写other即可, 接下来输入用户名和密码, 这个就是alist按装后的管理员名和客码.

后续按默认值一路回车完成配置文件和alist的绑定.

生成的配置文件保存在/root/.config/rclone/rclone.conf

通过alist挂载

========================================================================

alist支持国内大部分网盘转为webdav服务,而rclone可以挂载webdav为本地硬盘, 两者组合实现了各种网盘变为本地硬盘, 在alist中wedav策略可以选302重定向或者本地代理, 如果webav访问对象和alist是局域网,那么两种模式速度没什么区别, 建议选代理模式.

如果是外网的话302跳转可以绕过服务器直接访问网盘, 速度要更快也不占用alist服务器带宽, 不过302跳转可能要设置请求header来适配各家网盘.

开始的挂载数据目录路径为:/mnt/dav/, 在 /mnt/dav/ 目录下创建一个文件夹cloud,用于存放rclone挂载的alist,并给权限

sudo mkdir /mnt/dav/cloud/
sudo chown holts:family /mnt/dav/cloud/
sudo chmod 777 /mnt/dav/cloud/

sudo rclone mount alist:/ /mnt/dav/cloud --cache-dir /tmp --allow-other --vfs-cache-mode writes

开机自启

========================================================================

通过systemctl方式来实现,在 /etc/systemd/system/ 目录下创建一个 rclone.service

cat > /etc/systemd/system/rclone.service <<EOF
[Unit]
Description=Rclone
AssertPathIsDirectory=LocalFolder
After=network-online.target
[Service]
Type=simple
ExecStart=rclone mount alist:/ /mnt/dav/cloud --cache-dir /tmp --allow-other --vfs-cache-mode writes
ExecStop=fusermount -qzu LocalFolder
Restart=on-abort
User=root
[Install]
WantedBy=multi-user.target
EOF

#开始启动
systemctl start rclone
#设置开机自启
systemctl enable rclone
#其他使用
systemctl restart rclone #重启
systemctl stop rclone #停止
systemctl status rclone #状态


 
thumbnail

免费蒲公英pgy组网安装教程

蒲公英智能组网VPN客户端目前已支持在树莓派操作系统上使用,可在蒲公英官网下载页面,根据对应的系统版本进行下载。Raspberry Pi 64位 当前版本:2.4.0.52291
deb package:
wget https://pgy.oray.com/softwares/58/download/1839/PgyVisitor_Raspberry_2.4.0.52291_arm64.deb

注意:蒲公英VPN客户端 for 树莓派安装步骤都需要在管理员权限下运行。

1.安装
下载安装包后,通过cd命令进入对应目录找到蒲公英的安装包,输入以下命令进行安装。 dpkg -i PgyVisitor_Raspberry_2.4.0.52291_arm64.deb

  1. 帮助命令
    安装成功后,在系统的任意路径下,输入pgyvisitor -h/pgyvisitor命令并回车,显示所有支持的子命令及其说明。

输入pgyvisitor -v命令并回车,显示当前蒲公英客户端软件版本号。

  1. 子命令
    3.1 登录
    输入pgyvisitor login -h命令并回车,显示登录命令支持的参数及其说明。

3.1.1 交互登录
输入pgyvisitor login/pgyvisitor login -u [UID]命令并回车,进行交互登录。

3.1.2 带参数登录
输入pgyvisitor login -u [UID] -p [password]命令并回车,进行带参数登录。

3.2 退出
输入pgyvisitor logout命令并回车,退出当前的蒲公英UID登录。

3.3 历史登录信息
输入pgyvisitor logininfo命令并回车,显示登录UID的历史登录设备信息。

3.4 自动登录
输入pgyvisitor autologin -h命令并回车,显示自动登录命令支持的参数及其说明。

3.4.1 开启自动登录
输入pgyvisitor autologin -y命令并回车,开启自动登录蒲公英客户端。当设备开机或重启后,蒲公英客户端将自动登录。

3.4.2 关闭自动登录
输入pgyvisitor autologin -n命令并回车,关闭自动登录蒲公英客户端。

3.5 旁路信息
输入pgyvisitor bypass命令并回车,显示组网内其他成员的旁路信息。

3.6 组网成员
输入pgyvisitor getmbrs/pgyvisitor getmbrs -h命令并回车,显示查看组网成员命令支持的参数及其说明。

3.6.1 查看组网信息
输入pgyvisitor getmbrs -m命令并回车,显示当前组网名称、在线成员的信息及离线成员的信息。

3.6.2 查询子设备
输入pgyvisitor getmbrs -s [在线且有子设备的硬件成员序号]命令并回车,查看该硬件成员下的子设备信息。

3.7 查看客户端信息
输入pgyvisitor showsets命令并回车,显示当前登录的蒲公英客户端UID以及自动登录的状态。

  1. 查看日志
    蒲公英客户端日志文件路径:/var/log/oray/pgyvpn

  2. 卸载
    蒲公英客户端卸载命令:dpkg -r pgyvpn


 
thumbnail

利用Docker 搭建 calibre-web看电子书,收藏自己喜欢的书,构建个人图书馆


docker run -d \
--name=calibre-web \
--restart=always \
-p 8083:8083 \
-v /home/docker/calibre-web/config:/config \
-v /home/docker/calibre-web/library:/library \
--privileged \
johngong/calibre-web

默认账号密码: admin/admin123

通过 8083 端口登录后记得进行修改密码

搭建完以后及时给管理员添加权限,特别是上传和阅读的权限,给guest账户添加阅读权限

很好很不错,特别是epub格式的电子书

 

25 十二月, 2023

thumbnail

海纳斯桌面——图标自定义、背景自定义功能扩展

海纳斯桌面——图标自定义、背景自定义功能扩展(只需两步就能一劳永逸)

github地址:https://github.com/825641748/hinas_table/blob/main/README.md
文件下载地址:
add.png
controller.php
index.html

1、使用项目中的相应文件替换原有文件,增加controller.php

index.html替换/var/www/html/index.html
controller.php上传到目录/var/www/html/
add.png上传到目录/var/www/html/img/png/
image
image

2、为文件夹增加写入权限

root@hi3798mv300:~# chmod 777 /var/www/html/icons_wan/  root@hi3798mv300:~# chmod 777 /var/www/html/icons_lan/  root@hi3798mv300:~# chmod 777 /var/www/html/img/png/

image

大功告成!接下来看看详细的使用说明吧

效果图

image

添加示例

image
image
image

参数说明

image

长按自定义图标可以删除,为防止误操作,默认图标不可删

image

已优化原有页面样式,自定义图标理论上无数量限制

长按添加图标上传背景图

e5a359331033e8b6408b6624cc0a5a6
4243c2aa1c53bb076a01474495d234d

如果无法直接下载可以复制文件内容,自行创建文件
index.html

<!DOCTYPE html>  <html>    	<head>  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  		<meta http-equiv="X-UA-Compatible" content="IE=edge">  		<meta name="renderer" content="webkit">  		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">  		<link rel="shortcut icon" href="/favicon.ico">  		<link rel="stylesheet" type="text/css" href="css/style.css" />  		<link rel="stylesheet" type="text/css" href="css/bg.css" />  		<title>海纳思系统</title>  		<style>  			.adleft {  				width: 141px;  				height: 203px;  				border: #ddd;  				background: white;  				left: 30px;  				top: 30px;  				bottom: 0px;  				position: fixed;  			}    			button {  				margin-right: 0px;  				float: right;  				margin-top: 0px;  			}    			/* 子框架样式 */  			.popup {  				position: absolute;  				top: 50%;  				left: 50%;  				transform: translate(-50%, -50%);  				padding: 20px;  				background-color: #00CED1;  				/* 设置背景色为青蓝色 */  				border: 5px solid #ccc;  				z-index: 999;  			}    			/* 链接样式 */  			.popup a {  				display: block;  				margin-bottom: 10px;  				color: #000;  				/* 设置链接文字颜色为黑色 */  				text-decoration: none;  			}  			#wrap{  			    height:auto;  			    padding-bottom:20px;  			}  			.shake{  			    width:128px;  			    height:128px;  			    border-radius:1.5rem;  			    overflow:hidden;  			}  			#footer{  			    position:fixed;  			    bottom:0px;  			      			}  			.bg{  			    height:100%;                  width:100%;                  background-repeat: no-repeat;                  background-size:cover;                  background-position: center;                  position:fixed;                  z-index:-10;                  background-image: url('../img/png/bg');  			}  			/* 隐藏垂直滚动条 */              body::-webkit-scrollbar {                width: 0;              }  		</style>  	</head>    	<body>  		<?php  	$lanip=$_SERVER["HTTP_HOST"];  ?>          <div class="bg"></div>  		<div id="wrap">  			<div id="top">  				<div id="logo">  					<img class="logo"  						src="data:image/png;base64,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">  					<h1>海纳思系统</h1>  					<h3>开源,免费,易用</h3>    					<div id="kg-btn" class="">  						<input class='tgl tgl-flip' id='qieh' type='checkbox' />  						<label class='tgl-btn' data-tg-off='外网' data-tg-on='局域网' for='qieh'></label>  					</div>  				</div>  			</div>  			<div id="main">  				<!-- 外网访问地址 -->  				<div id="app" class="app animated fadeInLeft">  					<ul>  						<li>  							<a href="/zhinan.html" target="_blank"><img class="shake" src="img/png/zhinan.png" /><strong>使用说明</strong></a>  						</li>  						<li>  							<a href="/phpinfo.php" target="_blank"><img class="shake"  									src="img/png/php.png" /><strong>设备信息</strong></a>  						</li>  						<li>  							<a href="#" onclick="openPopup()"><img class="shake"  									src="img/png/tools.png" /><strong>工具箱</strong></a>  						</li>  						<li>  							<a href="https://bbs.histb.com" target="_blank"><img class="shake"  									src="img/png/bbs.png" /><strong>互助社区</strong></a>  						</li>  						<?php                          $iconList = glob('icons_wan/*.html');  						foreach( $iconList as $item ){                              include($item);                          }  						?>    					</ul>  				</div>  				<div id="popup" class="popup" style="display: none;">  					<a href="/cal/" onclick="closePopup()" target="_blank"><img class="shake"  							src="img/png/calculator.png" /><strong>计算器</strong></a>  					<a href="/pw/" onclick="closePopup()" target="_blank"><img class="shake"  							src="img/png/pw.png" /><strong>随机密码生成器</strong></a>  					<a href="/sc/" onclick="closePopup()" target="_blank"><img class="shake"  							src="img/png/shoucangjia.png" /><strong>网址收藏夹</strong></a>  					<a href="#" onclick="closePopup()">关闭</a>  				</div>  				<!-- 内网网访问地址 -->  				<div id="app1" class="app animated fadeInRight">  					<ul>  						<li>  							<a href="/zhinan.html" target="_blank"><img class="shake" src="img/png/zhinan.png" /><strong>使用说明</strong></a>  						</li>  						<li>  							<a href="https://bbs.histb.com" target="_blank"><img class="shake"  									src="img/png/bbs.png" /><strong>互助社区</strong></a>  						</li>  						<?php                          $iconList = glob('icons_lan/*.html');  						foreach( $iconList as $item ){                              include($item);                          }  						?>  						<li>  							<a href="/controller.php" id="add"><img class="shake"  									src="img/png/add.png" /><strong>添加图标</strong></a>  						</li>  					</ul>  				</div>  				<div style="clear: both;"></div>  			</div>  		</div>  		<div id="footer">  			<div class="footer-contents">  				<div class="links">  					<div class="line">  						<a href="https://bbs.histb.com" target="_blank">海纳思交流论坛</a>&nbsp;&nbsp;&nbsp;&nbsp;<span  							class="footer-link-separator"></span>&nbsp;&nbsp;&nbsp;&nbsp;<span  							class="copyright">Copyright © 2023 </span>  					</div>  				</div>  			</div>  		</div>  		<form id="form" action="controller.php" style="display: none;" method="post" enctype="multipart/form-data">  			<input type="file" id="image" name="image">    		</form>  		<script src="js/jquery.min.js"></script>  		<script>  			$('button').click(function() {  				$('.adleft').hide()  			})  		</script>  		<script>  			// 打开子框架  			function openPopup() {  				var popup = document.getElementById("popup");  				popup.style.display = "block";  			}    			// 关闭子框架  			function closePopup() {  				var popup = document.getElementById("popup");  				popup.style.display = "none";  			}  			window.onload = function() {  			      				let diyList = document.getElementsByClassName("diy");  				for (let item of diyList) {  					let longPressTimeout;                        // 监听鼠标按下事件                        item.addEventListener('mousedown', (event) => {                            longPressTimeout = setTimeout(() => {                                console.log('长按事件触发');                                // 在这里添加你的长按事件处理代码                                event.preventDefault();      						let result = confirm("确定要删除吗?"); // 显示确认对话框      						if (result) {      							//执行删除操作      							let src = item.getAttribute("src").split("_");      							let html = src[0].replace("img/png/", "icons_") + "/" + src[1] + ".html";      							let png = item.getAttribute("src");                                  fetch('controller.php?filename=' + png)      								.catch(error => {      									console.error('Error:', error);      								});      							fetch('controller.php?filename=' + html)      								.catch(error => {      									console.error('Error:', error);      								});      							      							setTimeout(()=>{      							    location.reload();      							},1500);      						}                          }, 1000); // 这里设置的是1秒,你可以根据需要调整                        });                                                // 监听鼠标抬起事件                        item.addEventListener('mouseup', (event) => {                            clearTimeout(longPressTimeout);                        });  				}  				let add = document.getElementById("add");  				let longPressTimeout;                    // 监听鼠标按下事件                    add.addEventListener('mousedown', (event) => {                        longPressTimeout = setTimeout(() => {                            console.log('长按事件触发');                            // 在这里添加你的长按事件处理代码                            event.preventDefault();                          document.getElementById("image").click();  						document.getElementById('image').addEventListener('change', function(e) {                              var file = e.target.files[0];                              if (file) {                                var fileName = file.name; // 这就是文件名                                console.log(fileName); // 在控制台打印文件名                                document.getElementById("form").submit();                            }                            });                       }, 1000); // 这里设置的是1秒,你可以根据需要调整                    });                                        // 监听鼠标抬起事件                    add.addEventListener('mouseup', (event) => {                        clearTimeout(longPressTimeout);                    });  			}  		</script>  	</body>    </html>

controller.php

<!DOCTYPE html>  <html>  <head>      <link rel="stylesheet" type="text/css" href="css/bg.css" />      <style type="text/css">          body{              height: 100vh;              width:100vw;              font-size: 100%;              background-repeat: repeat-x;                background-size: auto 100%;               font-family: 'Helvetica Neue','Microsoft Yahei',SimHei,sans-serif;              /*color:#fff;*/              overflow:hidden;              background-image: url(../img/icloud.png);          }          .form {              position:fixed;              display: flex;  			flex-direction: column;              height:80%;  			width:80%;  			/*background-color: rgba(255, 255, 255, 0.5);  半透明背景 */    			background: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.8));  /*折射渐变 */  			/*box-shadow: 0px -10px 20px rgba(255, 255, 255, 0.5);  反射阴影 */  			box-shadow: 0rem 0rem 1rem rgba(255, 255, 255, 0.8); /* 高光阴影 */   			margin: 2% 8%;  			border-radius:1rem;  			padding:1%;  			font-weight: 400;              font-size: 2rem;              font-family: MyriadSetPro-Thin;              line-height: 2rem;  		}  		.form>div{  		    width:100%;  		    margin:2rem 0rem;  		    display:flex;  			align-items: center;  			flex-wrap: wrap;  		}  		.form-label{  		    height: 2rem;              text-align: center;  		}  		.radio{  		    width:2rem;  		    height:2rem  		}  		.form-value{  		    flex:1;              font-size: 2rem;              line-height: 3rem;  		    height: 3rem;  		    border-radius:.5rem;  		}  		.custom-file-input {              display: inline-block;              width: 100%; /* 或其他你想要的宽度 */              padding: 10px;              border-radius: 5px;              cursor: pointer;            }          .submit{              width:80%;              height:4rem;              font-size: 2rem;              line-height:4rem;              margin:auto 10%;          }          .bg{              left:0px;              top:0px;              height:100%;              width:100%;              background-repeat: no-repeat;              background-size:cover;              background-position: center;              position:fixed;              z-index:-10;              background-image: url('../img/png/bg');          }      </style>        </head>  <body>    <?php  // 检查表单是否已提交  if(isset($_POST["submit"])) {      // 检查文件是否成功上传      if(isset($_FILES["image"])) {          $file = $_FILES["image"];          // 获取文件的信息          $fileName = $file["name"];          $fileTmpPath = $file["tmp_name"];          $fileSize = $file["size"];          $fileError = $file["error"];          // 检查文件是否上传成功          if($fileError === 0) {              // 检查文件大小              if($fileSize <= 128 * 1024) { // 128 KB                  // 获取表单中的其他数据                  $name = $_POST["name"];                  $redirect = $_POST["redirect"];                  $position = $_POST["position"];                  $time = time();                  // 确定文件的存储路径                  $uploadsImgDirectory = "img/png/";                  $destinationPath = $uploadsImgDirectory . $position .'_'.$time;                    // 将文件移动到目标路径                  move_uploaded_file($fileTmpPath, $destinationPath);                    // 将表单数据写入本地文件                  $data = '<li>      <a href="'.(filter_var($redirect, FILTER_VALIDATE_URL)?'':'http://<?php echo $lanip ?>').$redirect.'" target="_blank"><img class="shake diy" src="img/png/'.$position .'_'.$time.'" /><strong>'.$name.'</strong></a>  </li>';                  $uploadsHtmlDirectory = "icons_$position/";                  $infoFilePath = $uploadsHtmlDirectory . $time.'.html';                  file_put_contents($infoFilePath, $data);                    echo "文件上传成功并数据写入成功!".(filter_var($redirect, FILTER_VALIDATE_URL)?'':'http://<?php echo $lanip ?>').$redirect;                  echo "<script>window.location.href='/index.html#'+new Date().getTime();</script>";              } else {                  echo "文件大小超过限制!";              }          } else {              echo "文件上传失败!";          }      }  }    //$filePath = '/'; // 设置要删除的目录路径    if(isset($_GET['filename'])) {      $filename = $_GET['filename'];      $fileToDelete = $filename;        if(is_file($fileToDelete)) {          if(unlink($fileToDelete)) {              echo "文件删除成功!";              // 可以执行其他操作,如日志记录等          } else {              echo "文件删除失败!";              // 可以执行其他操作,如日志记录等          }      } else {          echo "文件不存在!";          // 可以执行其他操作,如日志记录等      }  }  if(isset($_FILES['image'])) {      $file = $_FILES['image'];      echo $file;      $fileName = $file['name'];      $fileTmpPath = $file['tmp_name'];      $fileSize = $file['size'];      $fileError = $file['error'];      move_uploaded_file($fileTmpPath, "img/png/bg");      echo "<script>window.location.href='/index.html#'+new Date().getTime();</script>";  }  ?>  <div class="bg"></div>  <form class="form" method="post" enctype="multipart/form-data" onsubmit="return validateForm()">    <div>      <label class="form-label" for="name">名称:</label>      <input class="form-value" type="text" id="name" name="name">    </div>    <div>      <label class="form-label" for="name">位置:</label>      <input class="radio" type="radio" name="position" value="lan" checked>局域网       <input class="radio" type="radio" name="position" value="wan">外网     </div>    <div>      <label class="form-label" for="redirect">链接:</label>      <input class="form-value"type="text" id="redirect" name="redirect">    </div>                <div onclick="document.getElementById('image').click()">         <label class="form-label" for="image">图标:</label>        <span id="imageName">点击选择文件</span>          <input class="form-value" type="file" id="image" name="image" style="display: none;">        </div>    <br><br>      <input class="submit" type="submit" name="submit" value="提交">  </form>  <script>      function validateForm() {        // 获取表单元素        var nameInput = document.getElementById("name");        var redirectInput = document.getElementById("redirect");        var imageInput = document.getElementById("image");            // 检查名称是否为空        if (nameInput.value.trim() === "") {          alert("请填写名称!");          nameInput.focus();          return false;        }            // 检查跳转路径是否为空        if (redirectInput.value.trim() === "") {          alert("请填写链接!");          redirectInput.focus();          return false;        }            // 检查是否选择了图片        if (imageInput.files.length === 0) {          alert("请选择图片!");          imageInput.focus();          return false;        }        console.log(redirectInput.value);      // 表单验证通过,允许提交        return true;      }      document.getElementById('image').addEventListener('change', function(e) {          var file = e.target.files[0];          if (file) {            var fileName = file.name; // 这就是文件名            console.log(fileName); // 在控制台打印文件名            document.getElementById("imageName").innerHTML = fileName        }        });    </script>  </body>  </html>
 

About

搜索此博客