芝麻博客·单人主站 - 芝麻
type: channel
link: https://blog.zmdew.top/index.php/author/1/
description: 芝麻
items: 记一次博客云数据库更换
items: uniapp实现ai聊天室
items: uniapp实现仿网易云播放器页面（已实现自动获取音乐时长，上下首，循环播放，拖拽快进后退）（2025.7.18更新版实现真机效果）
items: 编程设计
items: asp.net core webapi项目配置signalR实现消息推送
items: docker更换国内镜像源（2024.6）
items: uniapp微信小程序接入微信云函数（文本检测和图片检测篇）
items: wrdpress网站更换域名
items: dockerfile
items: git上传代码到gitee

记一次博客云数据库更换
type: item
date: 2025-09-28T10:04:00+08:00
description: 以前60块钱买的3年阿里云数据库快到期了，我还以为续费不会太贵，结果一看369/年，要我老命，看到腾讯的打折入了个，结果发现mysql8.0转存的sql文件是没法直接在5.7中转储的，又让ai给我修改了文件才能用，刚去腾讯云看了下续费多少钱，405，真坑啊。步骤1：尽量先备份config.inc.php文件以防修改错内容步骤2：将新的数据库外网链接输入，还有端口也得注意，阿里的就是正常的3306端口，腾讯的则是28208，最好在电脑上的数据库管理软件中先测试一下

uniapp实现ai聊天室
type: item
date: 2025-09-16T16:59:47+08:00
description: <view class="flex-col justify-start relative page"> <tn-nav-bar fixed alpha customBack> <view slot="back" class="tn-custom-nav-bar__back" @click="goBack"> <text class="icon tn-icon-left"></text> <text class="icon tn-icon-home-capsule-fill"></text> </view> </tn-nav-bar> <scroll-view class="chat-container" scroll-y="true" :scroll-into-view="scrollToViewId" :style="{ paddingTop: vuex_custom_bar_height + 20 + 'px' }"> <view v-for="(msg, index) in messageList" :key="index" class="message-item"> <view v-if="msg.type === 'user'" class="user-message-container"> <view class="user-message-content"> <view class="user-message-bubble"> <text class="user-message-text">{{ msg.content }}</text> </view> </view> <image class="user-avatar" src="https://tmf.bimhui.com/TimeFlow_Human_app/a07479c17fa5e2042bf9439d5cae65b5.png" /> </view> <view v-else-if="msg.type === 'ai'" class="ai-message-container"> <image class="ai-avatar" src="https://tmf.bimhui.com/TimeFlow_Human_app/a07479c17fa5e2042bf9439d5cae65b5.png" /> <view class="ai-message-content"> <view class="ai-message-bubble"> <text class="ai-message-text">{{ msg.content }}</text> <view class="action-buttons"> <view class="action-item" @click="copyText(msg.content)"> <image class="action-icon" src="https://tmf.bimhui.com/TimeFlow_Human_app/a76cddf3e49df3b5db52c1b72b5459b1.png" /> <text class="font_3">复制</text> </view> <view class="action-item"> <image class="action-icon" src="https://tmf.bimhui.com/TimeFlow_Human_app/d24162dc9a11013f39843b6383713a8d.png" /> <text class="font_3 text_5">去创作</text> </view> </view> </view> </view> </view> </view> <view class="ai-typing-indicator" v-if="isAiTyping"> <image class="ai-avatar" src="https://tmf.bimhui.com/TimeFlow_Human_app/a07479c17fa5e2042bf9439d5cae65b5.png" /> <view class="typing-content"> <text class="typing-text">AI正在思考中</text> <view class="typing-dots"> <view class="dot"></view> <view class="dot"></view> <view class="dot"></view> </view> </view> </view> <view id="scroll-bottom" class="scr…

uniapp实现仿网易云播放器页面（已实现自动获取音乐时长，上下首，循环播放，拖拽快进后退）（2025.7.18更新版实现真机效果）
type: item
date: 2025-07-18T16:44:00+08:00
description: 因公司业务需求，要求我在小程序中增加一个播放器，ui照着网易云画的，去github屎里掏金了半天都是旧版的仿制，所以自己整了个，当然主要的功能实现还是多亏了claude4，省了我很多事。接下来就是代码实现（不涉及公司信息） <view class="flex-col page"> <view class="flex-col justify-start section"> <view class="flex-col justify-start section_2"> <view class="flex-row relative section_3"> <image class="shrink-0 image_6 pos_7" src="https://tmf.bimhui.com/yuanxinapp/434598bf55fad60f3a1bb2fa03846917.png" /> <image class="shrink-0 image_5 pos_6" src="https://tmf.bimhui.com/yuanxinapp/45720b5d243d18bfcd1b24de14186985.png" /> <text class="text_2 pos_10">音频播放</text> <image class="shrink-0 image_7 pos_9" src="https://tmf.bimhui.com/yuanxinapp/1d2be95baecf8712ddfd3705a3213a0a.png" @click="goToMusicDetail" /> <image class="shrink-0 image_10 pos_11" src="https://tmf.bimhui.com/yuanxinapp/f2483d8969f6ba88a6a81db169489c3c.png" /> <image class="shrink-0 image pos" src="https://tmf.bimhui.com/yuanxinapp/a2474e70c7d79152aa9fb4955594e4b7.png" /> </view> </view> </view> <view class="mt-12 flex-col relative group"> <view class="self-stretch group_2"></view> <text class="self-start text_3">{{ musicInfo.title }}</text> <text class="self-start font text_4">{{ musicInfo.artist }}</text> <view class="flex-col justify-start self-stretch relative group_3"> <view class="flex-col justify-start items-start section_7" @touchstart="onProgressTouchStart" @touchmove="onProgressTouchMove" @touchend="onProgressTouchEnd"> <view class="shrink-0 section_8" :style="{ width: progressWidth + 'rpx' }"></view> </view> <view class="section_6" :style="{ position: 'absolute', left: progressPosition + 'rpx', top: '-2rpx', zIndex: 10 }" @touchstart="onSliderTouchStart" @touchmove="onSliderTouchMove" @touchend="onSliderTouchEnd"></view> </view> <view class="flex-row justify-between self-stretch group_4"> <text class="font">{{ formatTime(currentTime) }}</text> <text class="font">{{ formatTime(duration) }}</text> </view> <view class="flex-row justify-between items-center self-stretch group_5"> <image class="image_13" src="https…

编程设计
type: item
date: 2025-04-02T23:01:00+08:00
description: POP：面向过程编程，优势：符合常规线性思维劣势：难以应对复杂业务，难以满足业务扩展OOP：面向对象编程，OOP是程序设计，POP是内部实现AOP:面向切面编程，解决面向对象的静态问题

asp.net core webapi项目配置signalR实现消息推送
type: item
date: 2024-06-26T09:57:00+08:00
description: 待补充

docker更换国内镜像源（2024.6）
type: item
date: 2024-06-18T09:59:00+08:00
description: 昨天手动部署公司网站前端发现报错了，报错信息为：{cat_tips_warning color=""}ERROR: failed to solve: DeadlineExceeded: DeadlineExceeded: DeadlineExceeded: nginx: failed to copy: httpReadSeeker: failed open: failed to do request: Get "https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/08/08074a2e9d751d3de313cbcdaabb9bb879dc3167b5cf6d2af05ae0190356d5f8/data?verify=1718624421-7xQEhd%2BohVdGIKnK%2FgItJa8FHGo%3D": dial tcp 108.160.166.57:443: i/o timeout。{/cat_tips_warning}百度之后发现是镜像源出了问题，拉不了nginx的最新镜像。 更换步骤如下： 1.查看etc下的docker文件夹中是否存在daemon.json文件，如不存在需自行创建 2.找到国内各大镜像源地址（虽然能找到，但是不一定都能用，需要自己去一个个测试是否能用，例如我用了最新的阿里云docker源依旧没法拉取镜像） docker pull hub-mirror.c.163.com/library/nginx:latest docker pull mirror.baidubce.com/library/nginx:latest docker pull ccr.ccs.tencentyun.com/library/nginx:latest docker pull dockerproxy.com/library/nginx:latest 测试完之后只有腾讯的可以拉取成功 3.在文件里输入以下代码 { "registry-mirrors":[ "https://ccr.ccs.tencentyun.com"（腾讯最新镜像源） ], "features": { "buildkit": false } } 4.重载daemon配置 systemctl daemon-reload 5.重启docker systemctl restart docker之后就可以成功生成镜像并发布了

uniapp微信小程序接入微信云函数（文本检测和图片检测篇）
type: item
date: 2024-06-07T10:14:21+08:00
description: 参考文档链接：csdn使用说明：文章中的用法是放在图片和文本上传中，我的用处是微信授权头像和昵称后记：感觉自己nc了，微信头像本来就是经过验证的，多过一遍没有意义，具体问题下方会说明。代码实例： <view v-if="openModal" class="wx-authorization-modal"> <view class="wam__mask" @touchmove.prevent="" @tap.stop="closeModal"></view> <view class="wam__wrapper"> <view class="wam__close-btn" @tap.stop="closeModal"> <text class="tn-icon-close"></text> </view> <view class="wam__title">获取您的昵称、头像</view> <view class="wam__sub-title"> 获取用户头像、昵称，主要用于向用户提供具有辨识度的用户中心界面 </view> <view class="wam__avatar"> <view class="button-shadow"> <view v-if="userInfo.avatar" class="avatar__image"> <image class="image" :src="userInfo.avatar" mode="aspectFill"></image> </view> <view v-else class="avatar__empty"> <image class="image" src="https://cdn.nlark.com/yuque/0/2022/jpeg/280373/1668928062708-assets/web-upload/764843cf-055a-4cb6-b5d3-dca528b33fd4.jpeg" mode="aspectFill"></image> </view> <view class="avatar--icon"> <view class="tn-icon-camera-fill"></view> </view> </view> </view> <view class="wam__nickname"> <view class="nickname__data"> </view> </view> <view class="wam__submit-btn" :class="[{ 'disabled': !userInfo.avatar || !userInfo.nickname }]" hover-class="tn-btn-hover-class" :hover-stay-time="150" @tap.stop="submitUserInfo"> 保 存 </view> </view> </view> 使用的是图鸟的微信授权组件，实际使用后发现了几个问题：首先第一个头像授权，我添加头像验证的原因就是会涉及到上传本地图片，然后实际实验之后发现如果是违规图片，压根不会触发@chooseavatar，会报错，没有任何返回值；而合规图片就可以正常触发，得到返回值。查看了请求接口，并不是本地上传接口，应该是先上传到微信那边检测没过。第二个文本检测，需要使用@change事件，其他事件都无法获得值；并且change会调用两次，第一次无返回值，第二次才会有值，不做判断会浪费验证次数。

wrdpress网站更换域名
type: item
date: 2024-05-21T09:34:00+08:00
description: 事情起因：公司官网是我用wordpress搭建的，当时官网域名没有备案，先使用的测试域名，备案号下来之后我就准备更换域名，百度之后按照步骤来问题一堆，ai也不行，在我结合一堆方案+自己摸索之后，终于成功了。具体操作步骤如下：1、备份（重中之重）备案之后如果你修改崩了也能随时恢复，我在修改过程中就崩了一次。2、修改数据网上的步骤一开始都是让修改设置里的WordPress 地址（URL）和站点地址（URL），其实这一步完全没必要，直接修改数据库数据就行。原因一：因为这两条数据也是保存在数据库中的，使用插件替换数据的时候也会一并替换。原因二：如果先修改了这两条数据，会导致网站打不开，也就没办法进后台使用插件，就只能自己用数据库软件手动修改数据，而且很容易出错，并且会导致主题的配置丢失，所以不推荐。 wordpress下载插件：Better Search Replace，输入原域名和替换域名。{cat_tips_success color=""}下方的数据库列表记得选中，还有把下面的三个勾都去掉，不然搜索替换不到{/cat_tips_success}3、宝塔SSL数据替换成功之后，宝塔也是需要进行操作的。首页网站域名更换为你替换的域名，然后SSL也替换为新域名的整数。4、文件操作以上就是ai和百度的全部步骤，然而按照此步骤执行后会发现，网站只有几个html链接，css样式全部清空，所有图片也无法正常显示。这是因为你修改了数据库里的文件夹名，图片的路径发生了错误。wordpress的文件中也有绝对地址，所以样式会有问题。以下为我的解决方案： （1）修改网站文件夹名，修改为新域名，文件位置一般是：/www/wwwroot （2）宝塔修改网站目录，修改为新文件夹，宝塔不会自动替换为新文件夹，他搜索不到会自己创建一个旧域名文件夹。 （3）修改wordpress文件wp-config.php，将旧域名替换为新域名 按照上述步骤，即可完整替换域名，样式也不再会有问题。如果遇到其他问题，请在下方留言。

dockerfile
type: item
date: 2024-05-15T17:11:25+08:00
description: #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. # #FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base #RUN apt-get update; apt-get install libfontconfig1 -y # #WORKDIR /app #EXPOSE 9991 # #FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build #WORKDIR /src #COPY ["VOL.WebApi/VOL.WebApi.csproj", "VOL.WebApi/"] #COPY ["VOL.System/VOL.System.csproj", "VOL.System/"] #COPY ["VOL.Core/VOL.Core.csproj", "VOL.Core/"] #COPY ["VOL.Entity/VOL.Entity.csproj", "VOL.Entity/"] #COPY ["VOL.Order/VOL.Order.csproj", "VOL.Order/"] #COPY ["VOL.AppManager/VOL.AppManager.csproj", "VOL.AppManager/"] #COPY ["VOL.Builder/VOL.Builder.csproj", "VOL.Builder/"] #RUN dotnet restore "VOL.WebApi/VOL.WebApi.csproj" #COPY . . #WORKDIR "/src/VOL.WebApi" #RUN dotnet build "VOL.WebApi.csproj" -c Release -o /app/build # #FROM build AS publish #RUN dotnet publish "VOL.WebApi.csproj" -c Release -o /app/publish # #FROM base AS final #WORKDIR /app #COPY --from=publish /app/publish . #ENTRYPOINT ["dotnet", "VOL.WebApi.dll"] #docker run -p 3306:3306 --name volmysql \ #--restart=always \ #-v /home/mysql/data:/var/lib/mysql \ #-e MYSQL_ROOT_PASSWORD=123456 \ #-d mysql:5.7 #docker build -t volapi:1.0 . #docker run -d --name volapi -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro --restart=always --log-opt max-size=300m --log-opt max-file=3 --network=host volapi:1.0 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /app COPY . . RUN apt-get update -y && apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll ENTRYPOINT ["dotnet", "VOL.WebApi.dll"]

git上传代码到gitee
type: item
date: 2024-05-13T16:43:00+08:00
description: 1、在本地初始化git仓库（如果已经有了，则跳过这一步）： git init2、添加所有文件到git仓库： git add .3、提交你的改动到本地仓库： git commit -m "Initial commit"4、添加Gitee仓库为远程仓库（请将替换为你的Gitee仓库URL）：<your_gitee_repo_url> git remote add origin <your_gitee_repo_url>5、将本地代码推送到Gitee仓库的develop分支（首次推送可能需要设置用户信息）： git push -u origin develop5.1、push失败，报错error: src refspec develop does not match any error: failed to push some refs to：5.1.1确认你的本地是否有 develop 分支。你可以使用以下命令来列出所有本地分支： git branch5.1.2如果本地没有 develop 分支，但是你想要推送到远程的 develop 分支，你需要先检出远程的 develop 分支： git checkout -b develop origin/develop5.1.3如果有必要，你可以从其他分支合并代码到 develop 分支，或者添加并提交新的代码更改。 # 强制把 master 分支的代码覆盖到 develop 分支（会丢失 develop 分支原有的代码） git reset --hard master git checkout -b develop5.1.4完成更改后，再次尝试推送你的本地 develop 分支到远程仓库： git push -u origin develop{cat_tips_user color="#C0C0C0"}如果出现报错! [rejected] develop -> develop (non-fast-forward)error: failed to push some refs to远程分支上有新的提交：当你从远程仓库克隆或拉取代码后，其他协作者可能已经在远程的 develop 分支上进行了新的提交。因此，你的本地 develop 分支与远程的 develop 分支不再同步。直接推送会导致远程仓库的历史记录不一致，因此Git拒绝了你的推送请求。你本地的提交历史与远程的不一致：如果你在本地的 develop 分支上进行了一些操作（如重置、修改历史等），导致你的提交历史与远程的不一致，也可能出现这个错误。为了解决这个问题，你可以按照以下步骤操作：拉取远程分支的更新：首先，你需要拉取远程 develop 分支的最新更改到你的本地仓库，并合并或重设（rebase）你的本地更改。git fetch origingit merge origin/develop # 或者使用 git rebase origin/develop如果你选择合并（merge），可能会遇到合并冲突，你需要手动解决这些冲突并提交。如果你选择重设（rebase），Git会尝试将你的本地提交应用到远程分支的最新状态上，这也可能产生冲突。解决冲突：如果合并或重设过程中产生了冲突，你需要打开有冲突的文件，找到冲突区域（通常被 <<<<<<<、======= 和 >>>>>>> 包围），编辑文件以解决冲突，然后提交这些更改。再次推送：解决所有冲突并提交后，你可以再次尝试推送你的更改到远程仓库。git push origin develop如果你确定远程仓库的 develop 分支上的更改不重要，或者你只是想要覆盖它（这通常不推荐，除非你非常确定自己在做什么），你可以使用强制推送（这可能会丢失其他人的工作）：git push -f origin develop但是请注意，强制推送（使用 -f 或 --force 选项）会覆盖远程仓库的历史记录，这可能会导致其他人的工作丢失或产生其他问题。因此，在使用强制推送之前，请务必确保你了解可能产生的后果，并与团队成员进行协调。{/cat_tips_user}