我买了30万的鞋子
nextjs 服务器端渲染的问题?
在使用 nuxt 时,nuxt 可以使用 usefetch 进行请求,底层的实现是 ofetch 这个库,这个库支持在服务器端和客户端进行请求,nuxt
做了优化,如果服务器端有请求过的数据会序列化传输到客户端,这样客户端在水合时就不用再发起请求。而在使用 nextjs 时,使用的是 fetch
进行请求,nextjs 对 fetch 进行了扩展,增加了缓存的功能,但是我发现这个扩展的 fetch,如果在客户端使用,会变为普通的原生的
fetch,本身没有类似 nuxt 的防止重复请求的功能。是不是在 nextjs 中要实现 nuxt 的类似功能需要自行封装来实现?
我买了30万的鞋子
请教一下CSS布局排列写法?
用flex布局:
div {
display: flex;
justify-content: space-between;
}
em:nth-child(2), em:nth-child(3) {
flex-grow: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
}
grid布局:
div {
display: grid;
grid-template-columns: auto 1fr auto;
grid-template-rows: auto auto;
}
em:nth-child(1) {
grid-column: 1;
grid-row: 1 / span 2;
}
em:nth-child(2) {
grid-column: 2;
grid-row: 1;
}
em:nth-child(3) {
grid-column: 2;
grid-row: 2;
}
em:nth-child(4) {
grid-column: 3;
grid-row: 1 / span 2;
}
我买了30万的鞋子
vue axios请求后台接口code返回200,但是没有返回数据,请问为什么?
请求的接口信息:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250112/84f3cd1ac0a11ea6c8f3b396f9ca3c2d.png)
没有返回东西:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250112/c819d4f886fa55961a9bad4861c44060.png)
控制台报错:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250112/068fbd186f9f50585d7d15da43ebe707.png)
前端代码:
import axios from 'axios'
import { baseURL, taskURL } from './resource'
// 3.ES6 Promise 封装方式
export function request(options) {
return new Promise((resolve, reject) => {
// 1.创建 axios 的实例对象
const instance = axios.create({
baseURL: baseURL,
// method:"post",
timeout: 300000,
withCredentials: true
// timeout: 50000
})
// alert( baseURL)
// 3.过滤器(拦截器)
instance.interceptors.response.use(res => {
return res.data
}, err => {
console.log('来到了response拦截failure中');
console.log('err', err);
if (err && err.response) {
switch (err.response.status) {
case 400:
err.message = '请求错误'
break
case 401:
err.message = '未授权的访问'
break
}
}
return err
})
// 2.通过实例发送网络请求
instance(options).then(res => {
resolve(res)
}).catch(err => {
reject(err)
})
})
}
求大家帮个忙看看到底是哪里问题,要怎么修改,谢谢
我买了30万的鞋子
折线图有多条线,如何设置右侧坐标轴,期望其中某条线是根据右侧坐标轴绘制?
解决方案
VChart图表已经提供了对应的功能。VChart支持:
* 在series上配置 dataId维护 data 与 series 的一对一关系。
* 在axis上配置 seriesId 维护 axis 与 series 的一对多关系。
参考:"折线图系列配置文档" (https://link.segmentfault.com/?enc=x%2BI3CT9oe%2FHTFAp8fmcZBA%3D%3D.9YHR1CNncfwjEQXPI1kq3Icfj4IZvwNikLMIj9DdrTS%2FIOv9HN7mvVnXh3rBFGf9TqvO2ExRW6saxEk%2Fr1bRMA%3D%3D)
代码示例
import { useEffect, useRef } from "react";
import VChart from "@visactor/vchart";
const Chart = () => {
const containerRef = useRef(null);
useEffect(() => {
const spec = {
type: "common",
data: [
{
id: "profit",
values: [
{ time: "2019", value: 100000 },
{ time: "2020", value: 200000 },
{ time: "2021", value: 300000 },
{ time: "2022", value: 400000 },
{ time: "2023", value: 500000 },
],
},
{
id: "saleDiscount",
values: [
{ time: "2019", value: 0.2 },
{ time: "2020", value: 0.35 },
{ time: "2021", value: 0.25 },
{ time: "2022", value: 0.2 },
{ time: "2023", value: 0.1 },
],
},
],
axes: [
{
orient: "left",
seriesId: ["profit"],
id: "left",
},
{
sync: {
axisId: "left",
tickAlign: true,
zeroAlign: true,
},
id: "right",
label: {
formatMethod: (v) => parseFloat(v).toFixed(2),
},
orient: "right",
seriesId: ["saleDiscount"],
},
{
orient: "bottom",
seriesId: ["saleDiscount", "profit"],
},
],
series: [
{
id: "profit",
type: "line",
xField: "time",
yField: "value",
dataId: "profit",
},
{
id: "saleDiscount",
type: "line",
xField: "time",
yField: "value",
dataId: "saleDiscount",
},
],
};
const vchart = new VChart(spec, { dom: "chart" });
vchart.renderAsync();
return () => vchart.release();
}, []);
return (
);
};
export { Chart };
结果展示
在线效果参考: "https://codesandbox.io/p/sandbox/hopeful-cartwright-zdd95v?file=/src/Chart.tsx:1,1" (https://link.segmentfault.com/?enc=dj%2Ftowao91mU8AxCNHkBfw%3D%3D.CNg%2FAbTnfqANuzC1COcW%2F56KvS7ZXnQQuYzqfjqRHC3Qa2K70CTd2WuJ9HDRyF4DPpXU5FBirwei8%2BJwR5lLne4IgRo%2BJZ%2BCFaMQDzhyQGNjmab%2F2gKaPX1j4kws4qz0)"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250110/3ea2495ca93a48cae281b1856cbefd4d.png)
相关文档
"VChart Github" (https://link.segmentfault.com/?enc=9%2BxrdlkdunECr56litEQFA%3D%3D.4YoJLoyyLs%2BodmF44e0Ve0dTG%2BqT3vcHDLk7CGB8VKFRmM2hZMg%2BJOG8R%2FnsdxOs)
"坐标轴
教程" (https://link.segmentfault.com/?enc=p9MnYntQXGiGEWPCJj99Ag%3D%3D.Tvf%2F1Wbl4ybI5o3dQaRz3VcTZY1f9O%2F8FSlJPBgC1JcL%2Br2g1KO7NELdnvgq4aZi9%2Bun0pKDLw2KJ0XkPqA72eAdc%2Fvxkx8gMLTaWwKH0qA%3D)
"组合图教程" (https://link.segmentfault.com/?enc=aSu2UZEGXSn3OvYedQ5WHw%3D%3D.S8klKE18svbIbx%2BCz5AzBE%2BieAF4gYI6oPeXe%2FIc1XC2KaJDrjIuzDxyDNmfl20m%2BelmoqvnaVwO7opwZazVC1ZVyFPiNC6yroowIJgjfeo%3D)
"折线图配置文档" (https://link.segmentfault.com/?enc=XeC0SXaLGzOVyqipKVc5XQ%3D%3D.EA7sh71c2X02VW48F4t4yi1bOKbHJ27SbyOVHMAMIUmacPBFge3GEFkeJ%2FgAn5nA66oaiqsurGR4EZNfTecFOg%3D%3D)
"双轴图示例Demo" (https://link.segmentfault.com/?enc=c6skZ3HpiN6frpkHRVFINw%3D%3D.XZhVqyQKBLnYf2eugK9tf48NYVA3cfNBZ1noJLn1OxEQ1KOV7F6wqWXsk%2FTmtUo%2BPbyMibVmGDivwX8MJboiaQ%3D%3D)
我买了30万的鞋子
js报这个错误,该如何解决?
要解决这个问题,你可以采取以下步骤:
1.更新你的依赖项:检查你的项目中的依赖项,确保你正在使用的库和框架是最新的版本。一些旧版本的库可能还在使用被废弃的文件类型。
2.使用 JavaScript 模块:将所有的文件转换为 JavaScript 模块。你可以使用打包工具(如 Webpack 或
Rollup)来帮助你转换文件。确保你的代码中没有使用任何被废弃的文件类型。
3.清理无用的文件:检查你的项目中的文件,确保没有无用的文件或过时的依赖项。删除不再使用的文件和库。
4.更新文档:如果你是一个库或框架的维护者,请确保你的文档中包含有关废弃的文件类型的警告,并指导用户如何更新他们的代码。
总的来说,解决这个问题的关键在于更新你的依赖项、使用 JavaScript 模块以及清理无用的文件
我买了30万的鞋子
为什么 python3 setup.py bdist_wheel 编译出来的 pydantic 是一个 any 的 wheel?
pydantic 没有提供 python3.7 已编译的 arm 版本的 wheel
"https://pypi.org/project/pydantic/1.10.11/#files" (https://link.segmentfault.com/?enc=rWXfLBVBsV4YjtzDg7tanA%3D%3D.tpl%2Fuuitdih4FQF9wsJU3Cx8N9%2FDMOM%2FzxGwvFi1vCuxB7tJ4bPB3olF2QUUJ3o3ns090mUOHmpW6EDQXXGp6Q%3D%3D)
"图片.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250108/a9542dab1d826684ab52aaac76391754.png)
所以我想自己编译一个
然后我这样做的:
mkdir ~/pypi
cd ~/pypi
wget https://files.pythonhosted.org/packages/cf/01/e8a380dc6e92a76113f034c58c9ffdbd115753e9b944ddf5d2dbe862f248/pydantic-1.10.11.tar.gz
tar -xvzf ./pydantic-1.10.11.tar.gz
cd pydantic-1.10.11/
sudo yum install -y gcc make cmake python3-devel
python3 -m venv ~/pypi_venv
source ~/pypi_venv/bin/activate
python3 setup.py bdist_wheel
然后我在 dist 目录下面获取到了一个 "pydantic-1.10.11-py3-none-any.whl"
(pypi_venv) [sa@adv-node dist]$ ll
total 156
-rw------- 1 sa sa 158018 Sep 6 15:59 pydantic-1.10.11-py3-none-any.whl
(pypi_venv) [sa@adv-node dist]$ pwd
/home/sa/pypi/pydantic-1.10.11/dist
但是为什么是 "pydantic-1.10.11-py3-none-any.whl", 而不是类似 " torch-1.13.1-cp37-cp37-manylinux2014_aarch64.whl" 这样的命名呢?
我买了30万的鞋子
python 求组如何倒着读取window的系统日志,evtx文件?
示例文件 "go.mod":
module daily/gui
go 1.20
require (
github.com/ncruces/zenity v0.10.10
gocv.io/x/gocv v0.33.0
)
require (
github.com/akavel/rsrc v0.10.2 // indirect
github.com/dchest/jsmin v0.0.0-20220218165748-59f39799265f // indirect
github.com/josephspurrier/goversioninfo v1.4.0 // indirect
github.com/randall77/makefat v0.0.0-20210315173500-7ddd0e42c844 // indirect
github.com/stretchr/testify v1.8.0 // indirect
golang.org/x/image v0.12.0 // indirect
golang.org/x/sys v0.12.0 // indirect
)
示例代码:
import os
def readlines_reverse(filename):
with open(filename, "r", encoding="utf-8") as f:
f.seek(0, os.SEEK_END) # move to end of file
position = f.tell()
line = ""
while position >= 0:
f.seek(position) # move back one character
next_char = f.read(1)
if next_char == "\n":
yield line[::-1]
line = ""
else:
line += next_char
position -= 1
yield line[::-1]
if __name__ == "__main__":
for line in readlines_reverse("./go.mod"):
print(line)
结果:
)
golang.org/x/sys v0.12.0 // indirect
golang.org/x/image v0.12.0 // indirect
github.com/stretchr/testify v1.8.0 // indirect
github.com/randall77/makefat v0.0.0-20210315173500-7ddd0e42c844 // indirect
github.com/josephspurrier/goversioninfo v1.4.0 // indirect
github.com/dchest/jsmin v0.0.0-20220218165748-59f39799265f // indirect
github.com/akavel/rsrc v0.10.2 // indirect
require (
)
gocv.io/x/gocv v0.33.0
github.com/ncruces/zenity v0.10.10
require (
go 1.20
module daily/gui
我买了30万的鞋子
linux里如何将一个文件和一个套接字绑定?
简而言之,就是这个文件被输入的内容,都会被吞没,发送到套接字(IP地址和端口号的组合)的另一边去.
我在做一个指令的输出的网络的重定向,它的格式大概是"xxx -l a.log",有一个叫a.log的输出文件作为记录.
我希望能做到,这个指令根据-l选项不断输出内容到a.log的同时,某个手段能把这些内容全都即时通过套接字传输到另一边.
甚至就不通过什么a.log,直接就有一个文件就代表着这个套接字.
肯请赐教.
我测试了nc指令的手段,把某个文件作为标准输入,进行套接字通信.
确实实现了我想要的效果,这个文件的内容被socket通信交到了另一边.
但有一个问题,那就是我在通信维持的同时继续向这个文件追加内容的话,它好像并不会把追加的内容也发过去.这种情况该怎么处理呢?
我买了30万的鞋子
ProFormUploadButton Upload.LIST_IGNORE 不生效?
const beforeUpload = (file: RcFile, _: RcFile[]) => {
return new Promise((resolve, reject) => {
const isSizeValid = file.size / 1024 / 1024 < 1;
if (!isSizeValid) {
message.error('只允许上传大小为1MB以内的图片');
reject(new Error('文件太大'));
} else {
resolve(file);
}
});
};
我买了30万的鞋子
有关Docker构建Answer社区时的问题?
明显是你的写法有问题。必须贴完整的Dockerfile看一下
我这边执行了一下,没啥大问题。疑似你的文本的换行符不对。
用文本编辑器显示下不可见的控制字符看看,比如 "cat -A Dockerfile",看看你有没有混用Windows和Unix换行符导致文件内容不能正常解析。
可以用"dos2unix"之类的工具转换一下,或者在文本编辑器设置一下换行符重新保存一次再试试
我买了30万的鞋子
Prisma操作MySQL数据库,数据的时间少了8小时?
数据库本身是不会保存时区信息的,所以数据库保存的时间需要约定好,是 UTC 还是某个地方的本地时间。一般情况下,建议保存 UTC 时间,方便转换。
接下来就是存取的时候,存之前一定要把本地时间转换成 UTC
时间再来存。而取的时候,也需要进行逆向转换。一般我们会在服务端做这个事情,由于服务端本身可能为多个地区的用户服务,所以服务端一般也建议使用 UTC 时间。
然后是在浏览器端,浏览器端因为直接面向用户,默认都是按本地时间来用的。所以从浏览器传数据到服务端的时候,需要在服务端判断这个时间到底是哪个时区的,然后再处理成
UTC 时间。而多数情况下非用户指定时使用的当前时间,这个过程可以替换成取服务器当前时间
参阅:"考虑时区了吗?" (https://segmentfault.com/a/1190000040990370)
我买了30万的鞋子
大佬们这段代码提示报错,要怎么写啊?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241228/f7a5aaf4a9200bb258d284a68002f5ad.png)
export interface paths {
"/api/demo/v1/test": {
get: operations["testUsingGET"];
};
"/api/demo/v1/userInfo": {
get: operations["userInfoUsingGET"];
};
}
function sevice (api:'/api/demo/v1/test',method:M):Promise
function sevice(api,method:M){
return Promise.resolve({})
}
const res = await sevice('/api/demo/v1/test','get')
我买了30万的鞋子
求助一个PHP程序伪静态规则问题?
Apache:
RewriteEngine On
RewriteBase /
# 重定向多个斜杠到一个斜杠
RewriteCond %{THE_REQUEST} \s//+
RewriteRule ^ / [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+) index.php?rewrite=$1 [L]
Order allow,deny
Deny from all
NGINX:
server {
# ... 其他配置
if ($request_uri ~ "//") {
return 404;
}
if (!-e $request_filename) {
rewrite ^/(.+) /index.php?rewrite=$1 last;
}
}
我买了30万的鞋子
ant 默认设置如何修改?
"文档" (https://link.segmentfault.com/?enc=fISF%2Bn7ek%2FAqoVSCbsSqEg%3D%3D.NrVGaBFqt1RRGru3NrYivOUsfscSvg%2BpzRhKOPnO2C6RdCCXbYL99V9c45r8kTWt)
原来在这里。
我买了30万的鞋子
使用TortoiseGit将本地文件push到github上报错?
估计是被墙了。。老生常谈的问题了,下一个Watt Toolkit开github加速试一下
在国内访问github总是时好时坏的,如果只是做个人代码托管可以放国内的gitee之类的平台(gitlab也不错)
我买了30万的鞋子
jenkins如何实现多分支的增量发布?
比如多个项目同时进行,分支分别有a、b、c。
发布服务器只有一台。
现在想实现
A同事先把a分支发个全量(全部的微服务jar包),后续需要发布什么微服务就只发布一个,增量发布。
B同事先把b分支发个全量(全部的微服务jar包),后续需要发布什么微服务就只发布一个,增量发布。
C同事先把c分支发个全量(全部的微服务jar包),后续需要发布什么微服务就只发布一个,增量发布。
无论怎么发布,A、B、C同事间互不影响。
我的一个想法是,发布x分支,全量时把所有jar包放到x目录下,发布一个微服务时,依赖的jar包能从x目录去查找,x是一个变量哈,这样多分支的发布互不影响。
我买了30万的鞋子
代码为什么会出现奇怪的数据?
数组里面的值的确是1,2,3,4, 只不过你打印出的值是10,11,12,13
//用arr2的值覆盖arr1
arr1 = arr2;
for(int i =0;i< arr1.length;i++) {
- System.out.println(arr1[i]+'\t');
+ System.out.println(arr1[i]);
}
"/t" 转成数字就是9, "1,2,3,4" 加上9就是你之前输出的结果
System.out.println((int)'\t'); // 9
"https://baike.baidu.com/item/ASCII/309296?fr=ge_ala" (https://link.segmentfault.com/?enc=oqsQT4%2BaapsPlCyH1i2lDw%3D%3D.Kwj52Yjg%2FCN0MJ3ajl4aR3%2Fo31EFzQf9swITicuMTOYwzJzzbcp9frvyRNZhcyvMDbJ9HIcWvPwyrIUKtwX%2B%2FQ%3D%3D)
我买了30万的鞋子
AMRewrite:lnmp01环境保存wordpress规则应用失败。?
wordpress.conf的配置错误,检测第16行是否少了;或是}符号。
如果不了解nginx的规则,或是帖出完整的配置。
我买了30万的鞋子
怎么把这个data1数组改造成data2数组,相当于过滤其中isShow=false的对象?
let data1=[
{
isShow:true,
children:[
{
isShow:true,
nodeName:'天天下级文件夹',
children:[
{
isShow:true,
nodeName:'天天下下级文件夹',
children:[]
},
{
isShow:false,
nodeName:'天天下下级文件夹2',
children:[]
},
]
},
{
isShow:false,
nodeName:'lala',
children:[]
}
],
nodeName:'天天文件夹',
},
{
isShow:true,
nodeName:'一样',
children:[]
},
{
isShow:false,
nodeName:'不一样',
children:[]
}
]
想要改造成以下这种
let data2=[
{
isShow:true,
children:[
{
isShow:true,
nodeName:'天天下级文件夹',
children:[
{
isShow:true,
nodeName:'天天下下级文件夹',
children:[]
},
]
},
],
nodeName:'天天文件夹',
},
{
isShow:true,
nodeName:'一样',
children:[]
},
]
我买了30万的鞋子
这种echarts图怎么实现呢?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241210/4cca138997983e5f5e6694b53f34a4af.png)
我买了30万的鞋子
Base64 如何解码的?
确定是否一组不是base64的功能,是UTF-8的功能,或者说是中文编码约定的。
我买了30万的鞋子
shell 脚本文件中如何处理多个选项参数?
如下代码
# test.sh
while getopts "n:r:h" opt; do
case $opt in
n)
nValue=$OPTARG
;;
r)
rValue=$OPTARG;
;;
h)
help
exit 0
;;
esac
done
echo nValue
exit 0
当我输入 "./test.sh -n -r 123" 时, 控制台 "nValue" 的输出值为 "-r" ,既 "-r" 参数名称变成了 "-n"
参数的值,请问如何避免第二个参数的名称变成第一个参数的值这种情况?
我买了30万的鞋子
pgsql 怎么 select 做错误处理?
begin;
select * from txt limit 1;
execption
when undefined_table then
raise notice 'table does not exist';
end
这个 pgsql 报 "syntax error as or "execption"" 是为什么 ?
正确应该怎么写
我买了30万的鞋子
服务器双网卡配置同一IP段地址发生冲突?
感觉标准答案应该不是chatgpts说的在 "/etc/network/interfaces" 里面配置路由。
本身netplan配置文件里面就是可以指定路由的。既然用了netplan,这种情况下,直接在netplan里面加配置文件就好了。
"https://netplan.readthedocs.io/en/stable/netplan-yaml/#routing" (https://link.segmentfault.com/?enc=wcVOmIe0mWovgyj4pPfGRw%3D%3D.i5kyKwy08f%2BB4FnWqmDmASzMKuJBRptPzw0EuVb80zycMZ9sUEZREQ5bdV1KUIc5bUbwNkyTGWQu1eTl27B7Pg%3D%3D)
我买了30万的鞋子
python 有什么工具可以输出下面的进度信息?
from tqdm import tqdm
我买了30万的鞋子
curl 请求后端图片接口时 后端报错(curl未选择接受图片),如何解决?
你描述得太混乱了,你的意思是通过curl请求接口时后端报错,所以你认为这是curl导致的,并且想要过滤并特殊处理这种请求吗?
这里面有几个问题:0.为什么报错?1.凡是curl就会导致这个报错吗?2.这个报错需要特殊处理吗?3.怎么特殊处理这种异常?
一个一个回答。
0.因为你提供的信息比较少,所以根据一般经验,我觉得这是因为你在通过curl调接口的时候没有指定响应文件怎么处理,所以curl可能直接读取了响应头之后就关闭了连接。这时候server还在尝试向curl客户端发送数据,但是对方已经关闭了,所以才会报错。
1.使用curl可以通过-o或--output指定文件保存路径。理论上curl是可以模拟任何http请求的,所以我不觉得这是curl的问题,如果curl有问题,那可能意味着别的客户端也调不了你的接口。
2.通过curl发起的请求和一般的http请求没任何区别,所以我觉得不需要区分出来。你也看到了异常类型是IOException
IO异常,假设你用认为正常能用的client调接口,传输图片的过程中client的网断了,server也一样会报这个异常。这种异常本来就不是server端导致的,所以按理说也不该由server去处理。
3.不想在控制台打印堆栈信息,可以声明一个接口切面做异常处理,如果判断异常类型是IOException就不打印。
我买了30万的鞋子
vue3中,关于查询返回后参数的问题?
我有很多个页面,大部分都是上下结构,上面查询条件,下面表格,然后表格后面是操作按钮,点击详情url带上查询条件跳转到详情,返回的时候参数没了,现在需要返回的时候保留参数
问题:
因为页面比较多,请问怎么能在最小的改动下实现这个需求
Ps:查询条件的表单都是每个页面独立使用的,没有统一封装
我买了30万的鞋子
如何不使用 width 和 height 控制 svg 的渲染大小?
如何不是用 width 和 height 控制 svg 的渲染大小?
下面的网站
"https://nicegui.io/" (https://link.segmentfault.com/?enc=klCB9mIvlOkBJOSKDJ73tg%3D%3D.ZNawszZuXvXFkUPooJf0yXBIwRqXHaxcp068vYeupwI%3D)
首页左上角的的 「NiceGUI」的尺寸不大不小刚刚好,对应的 svg
是:"https://github.com/zauberzeug/nicegui/blob/main/website/static/nicegui_word.svg" (https://link.segmentfault.com/?enc=jKOcAkqGaY0pezv7RS2m0A%3D%3D.HlwLx6TH5iRb%2FWWk2xny%2FqQZo5MZ1akbv2mgaWFfT4aopbUvwoYQ02AAhBzD9hF7mG8a0vtYslZs4Dqrh%2Bu5Z2BZI8bw%2Bon0pyo92eQCoRI%3D)
"图片.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241103/6b950fef5c444f81070786747fa94e73.png)
«"https://nicegui.io/" (https://link.segmentfault.com/?enc=LagRmt0ewA0tJ5DosdBwTQ%3D%3D.I9BKNNzbKKGViqmdzIKAr0ouAlxhnzVKLrjwDzZYBwU%3D)
这个界面就是
"https://github.com/zauberzeug/nicegui" (https://link.segmentfault.com/?enc=YBHsov%2B1fvn2MJ0Cn5T0oQ%3D%3D.nvZk5XPqN8zRIRewZh978tgC0QvjECJPi05EQALs%2FA7NTaHg3Go%2BSAV6cnzR4woW)
这个项目跑起来的: "python main.py"»
这个 svg 的内容如下,里面并没有写死 width 和 height
.svg_letter1{stroke:#fff;fill:#fff;stroke-miterlimit:10;stroke-width:.25px;}
.svg_letter2{fill:#fff}
然后我 clone 了这个项目,想在这个项目基础上改出我自己想要的内容,第一步就是要替换掉这个 svg logo 成我自己的,所以我就用 「菜鸟教程」的
svg 编辑器创建了我自己的 svg
«"https://c.runoob.com/more/svgeditor/" (https://link.segmentfault.com/?enc=I4hU6RwVRLR5Tz01Zqz7Tw%3D%3D.W4Sf5ba0kUj8af6ZJFzosTp4951OXQjvabLDvnV6FRX3mP9e2osyVoG6LoKAbHKD)»
"图片.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241103/3d2523b94456e9c5ebb5faa6248162a4.png)
svg 内容如下
Layer 1
ImageSearch
«我已经提交到 GitHub, svg 的地址:
"https://github.com/ponponon/image_search_engine/blob/feature/gui/website/static/ImageSearchLogo.svg" (https://link.segmentfault.com/?enc=bSyy6MOpScmPY1rN7%2Bts0w%3D%3D.yVK8ktXgeTWhhtGA9SKuDHQcqqocDAYoQWvypPfyOHxEQsfWLfvrjhxrT2aIMm3rBPhgWu4B1bAfvgoaucIKQy0tazPyqx%2BYc%2BRhUw5SbaPCNdxzpXEcbgFK0wc9LbzYJPNWNiL2p1%2Bncr%2FQ2rl9Ag%3D%3D)
这里面也没有写死 width 和 height»
***
然后我是用这个新的 svg 替换了原项目中的 svg
"图片.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241103/9dbf22c43ff0c2755645f06856f84f9b.png)
但是渲染出来就乱了
"图片.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241103/a1ccdde8cf50709b2ecac827562c44d7.png)
渲染出来巨大无比,界面都显示不下
我不知道哪里出问题了
我询问了 chatGPT :「如何设置 svg 的大小?」
下面是 chatGPT 的回答
«要设置 SVG 的大小,你可以通过几种方式实现:1. 直接在 SVG 元素中设置宽高属性
这会直接设置 SVG 的宽度为 200 像素,高度为 100 像素。2. 使用 CSS 控制 SVG 的大小
通过 CSS 中的 "width" 和 "height" 属性来控制 SVG 的大小:
.custom-svg {
width: 200px;
height: 100px;
}
这种方法允许你通过类名或其他选择器来控制多个 SVG 元素的大小。3. 使用视口单位设置 SVG 大小
你还可以使用视口单位(如vw、vh等)来设置 SVG 的大小,让其相对于视口大小进行调整:
这种方法允许 SVG 元素根据视口大小进行相对调整。选择其中一种方法根据你的需求设置 SVG 的大小,这些方法都能有效控制 SVG 的尺寸。»
***
但是我检查了代码,并没有地方设置了 width 和 height
***
除此之外,我还有一个问题,我自己做的
"ImageSearchLogo.svg" (https://link.segmentfault.com/?enc=0ClAf4r0%2ByLnlSA8ti0Sjg%3D%3D.IS%2FMlXP0fRA4mKJFt11a6qDQWqByrMOj3gEb7iZlc8%2BxAAOnrrneaFuZV52DQ2jj8aBKLt69qqgRBgIpAXDVioYQ%2BZ2GROkbCX4IRDr55KRLVNMNfDY5BpC4R7Jkg1jdIte6r1llLFrBOMpeEh73cg%3D%3D),要显示的
「ImageSearch」是作为一个字符串存在 svg 文件里面
但是
"nicegui_word.svg" (https://link.segmentfault.com/?enc=QJu3RnrnqYlqSNoM3FyVIw%3D%3D.%2FUYgKFYtGu71C1srB1Rnlqu1Q%2FprUQGN0%2FEEk40ZrtwS4Bq0Q0%2Fp3vG5ZKg%2B%2BFBfH6F2em%2FdSFRMSInwHlA61zE9vIxctbtO6PVwfYpi1v8%3D)
里面的 「NiceGUI」却不是字符串 nicegui
为什么呢?
"图片.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241103/2ef4ea8daf1f5eae54d3108081adda53.png)
***
我好像知道为什么了
是因为 font-size 刚刚是 28,我改成 4 感觉就对了
"图片.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241103/3333560f5e1dcd3ba0439f7ed83d9838.png)
但是我很奇怪的是这个 svg 为什么占用的空间是 300x150,我都没有看到有什么地方设置了这个大小
"图片.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241103/7ea999798a6ef671f6b98304aa691259.png)
我现在有两个问题:
* 怎么实现自适应文字大小的 svg 呢?感觉固定 svg 里面的 font-size 不优雅
* 为什么这个 svg 占用的大小是 300x150呢?
我买了30万的鞋子
进行修改操作的时候 修改的值没有实时改变,该怎么做呢?
import { ref, reactive, getCurrentInstance, onMounted, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const props = defineProps({
modelValue: {
type: [Number,String],
},
type: {
type: Number,
},
});
const api = {
loadCategory: "/category/loadAllCategory4Select",
};
const categoryList = ref([]);
const loadCategory = async () => {
let result = await proxy.Request({
url: api.loadCategory,
params: {
type: props.type,
},
});
if (!result) {
return;
}
categoryList.value = result.data;
};
loadCategory();
const emit = defineEmits(["update:modelValue", "change"]);
const onChange = (e) => {
emit("update:modelValue", e);
emit("change");
};
进行修改操作的时候 修改的值没有实时改变,该怎么做呢?
进行修改操作的时候 修改的值没有实时改变,该怎么做呢?
我买了30万的鞋子
绘制已知参数的三角形并标注角度和边长,用什么绘制比较方便?
css中paint函数,cavans,svg都可以,需求不复杂,感觉没必要用框架
下面是AI给出的答案,可能要改造下才能用
Document
// 创建画布
var canvas = document.createElement('canvas');
canvas.width = 400;
canvas.height = 400;
document.body.appendChild(canvas);
var ctx = canvas.getContext('2d');
// 定义三角形的三个顶点坐标
var A = { x: 50, y: 300 };
var B = { x: 250, y: 300 };
var C = { x: 150, y: 100 };
// 绘制三角形
ctx.beginPath();
ctx.moveTo(A.x, A.y);
ctx.lineTo(B.x, B.y);
ctx.lineTo(C.x, C.y);
ctx.closePath();
ctx.stroke();
// 计算三条边的长度
function distance(point1, point2) {
return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));
}
var AB_length = distance(A, B);
var BC_length = distance(B, C);
var CA_length = distance(C, A);
// 计算三个角的角度(以弧度为单位)
function angle(point1, point2, point3) {
var a = distance(point2, point3);
var b = distance(point1, point3);
var c = distance(point1, point2);
return Math.acos((a * a + b * b - c * c) / (2 * a * b));
}
var angle_A = angle(B, A, C);
var angle_B = angle(C, B, A);
var angle_C = angle(A, C, B);
// 标注边长和角度
ctx.font = "14px Arial";
ctx.fillText("AB = " + AB_length.toFixed(2), (A.x + B.x) / 2, (A.y + B.y) / 2 + 20);
ctx.fillText("BC = " + BC_length.toFixed(2), (B.x + C.x) / 2, (B.y + C.y) / 2 + 20);
ctx.fillText("CA = " + CA_length.toFixed(2), (C.x + A.x) / 2, (C.y + A.y) / 2 + 20);
ctx.fillText("A = " + (angle_A * 180 / Math.PI).toFixed(2) + "°", A.x - 20, A.y - 20);
ctx.fillText("B = " + (angle_B * 180 / Math.PI).toFixed(2) + "°", B.x, B.y - 20);
ctx.fillText("C = " + (angle_C * 180 / Math.PI).toFixed(2) + "°", C.x, C.y + 30);
我买了30万的鞋子
crypto-js中的WordArray到底是什么?
crypto-js中的WordArray到底是什么?
CryptoJS中的加密算法CryptoJS.AES.encrypt中有一个参数key,需要是WordArray类型
"image.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241024/d92cc55f4a258a03c07d671e6830719f.png)
这WordArray具体是什么类型?
我把key定义为:const key
=CryptoJS.enc.Utf8.parse('LSXRMYY037165336');会出来下面的结果,这结果里为什么有个数组words?
"image.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241024/f266d8d08d8d5a0a18ff16a018e54c62.png)
他和"image.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241024/ee12e97b07f0f47340ea65cfeffe7544.png)有什么区别?
我买了30万的鞋子
spring引用RedisTemplate两次就创建2个连接吗?
AI Bot 的回答不大正确
如果没有定义泛型,Spring 会忽略泛型去找 "RedisTemplate"(因为 "stringRedisTemplate" 和
"redisTemplate" 都是 "RedisTemplate" 的类型实例,Spring 搞不懂你到底需要导入哪个,也就是 歧义引入
),所以大概率是会报错的:
Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
如果不写泛型又需要引入不同的类型正确的写法如下:
@Autowired
@Qualifier("redisTemplate")
private RedisTemplate redisTemplate;
@Autowired // 这个会根据泛型去找stringRedisTemplate
private RedisTemplate redisTemplateString2String2;
可以在生成实例时进行测试
@PostConstruct
public void checkIfSameInstance() {
if (redisTemplate == redisTemplateString2String2) {
System.out.println("两者相同");
} else {
System.out.println("两者不同"); // 会输出这句
}
}
同理,明确一致的类型,则不会重复引入
@Autowired
private RedisTemplate redisTemplate;
@Autowired // 这个会根据泛型去找stringRedisTemplate
private RedisTemplate redisTemplateString2String2;
@PostConstruct
public void checkIfSameInstance() {
if (redisTemplate == redisTemplateString2String2) {
System.out.println("两者相同"); // 这时两者实例就一致了,会输出这句
} else {
System.out.println("两者不同");
}
}
«补充相关参考:
"@Autowired
官方文档" (https://link.segmentfault.com/?enc=RRVnTPbQEGzFD4%2FYTbpqrA%3D%3D.a5ezSEUsDnsDsbkfzZ1QKD0WUAGURIWag%2BezgCX7OCS6p2X3O7XN8ZzYldBUk5TsFY%2FU5vXDGlrcAWInyNyefQCUzW7v%2Bkcpchdt9Vfbb8ZvosHSYFnd1bZrPB2rjh58)
"@Qualifier
官方文档" (https://link.segmentfault.com/?enc=XROi8xdqU%2BXudC2oQguyQA%3D%3D.qvkUYuai8S56r6rgklLUnI5t%2BamhrqxntLofMlrrhCCUNUaxivQf8uBxgEaF1SwzeeIJDC0RUxYc0PgVDX2%2FMO41GB4PV3UpW6blych4VYF02H8CwBJmQaaG36LNPPx%2B)»
我买了30万的鞋子
elmentui的表格多选在移动端要点击两次才能选择上?
你可以安装fastclick 来解决部分问题
首先,安装插件:fastclick
cnpm i fastclick -S
之后,在main.js里引入并使用即可
import FastClick from 'fastclick'
FastClick.attach(document.body);
我买了30万的鞋子
移动端 企微自建应用 把pdf文件放到前端项目的static下 然后用iframe访问地址static/pdf/web/viewer.html 本地可以 电脑和手机uat都不行 是为什么?
没必要用 mjs 吧。所以这个问题也就不存在咯。
***
nginx 是修改 mime.types 什么的文件来支持 mjs 类型
我买了30万的鞋子
如何根据href的路径判断最终的url网址?
可以看看"mdn" (https://link.segmentfault.com/?enc=eCBfIZJg9WjA6fUl8jw6%2Bg%3D%3D.z0phYA6gFDeNkNXc%2BRaJ0To8l8NTIQPMcS%2BmLZVN%2FZAe%2F3ndjAmclz8XwDAAKyXYtfsCtu6oOzbmY%2Fb%2BPLMfAw%3D%3D)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241015/7c1e76cd0fbdf32491531478fcffd4e7.png)
这种叫相对于源的 URL,源就是 "location.origin" 在你这个示例中就是 "https://www.dataroma.com"
我买了30万的鞋子
vue hooks怎么返回异步数据到template?
tableData = res.data.data;
这一串代码你知道什么意思吗?你把一个指向响应式的变量改变指向了一个字符串还是别的对象,让这个tableDate这个变量失去了响应式。你应该修改成这样:
import { reactive } from "vue";
import axios from "axios";
export default function () {
let tableData = reactive({ tableData: [] });
const getData = async () => {
const res = await axios.get("https://cnodejs.org/api/v1/topics");
tableData.tableData = res.data.data;
console.log("tableData", tableData);
};
return { tableData, getData };
}
或者这样:
import { ref } from "vue";
import axios from "axios";
export default function () {
let tableData = ref([]);
const getData = async () => {
const res = await axios.get("https://cnodejs.org/api/v1/topics");
tableData.value = res.data.data;
console.log("tableData", tableData);
};
return { tableData, getData };
}
请你牢记!!不要不要不要不要改变响应式变量的指向!!!!!!!!!!
我买了30万的鞋子
我在electron模块尝试导入自己的模块 不成功,如何解决?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241014/6870995f847bdb8d56cb57672761f13c.png)
如图,无法复现。请提供你的原始代码,方可看看问题所在。
我买了30万的鞋子
图片怎么不拉伸不裁剪的显示出来有好的解决方案吗?
直接 "background-size: contain" 就能搞定
.container {
width: 500px;
height: 300px;
border: 1px solid #000;
}
.img {
width: 100%;
height: 100%;
background-size: contain;
background-position: center;
background-repeat: no-repeat;
background-image: url('./test.png');
}
我买了30万的鞋子
升级7.01后Connection refused MySQL连接出错?
如果是指升级面板7.1,正常升级面板并不会改动mysql与其它软件什么的,
面板的升级只会更新面板自身。
提示mysql-5.7 is not installed,是mysql-5.7是没安装状态了。先在ssh
ls -l /usr/local/
看返回哪些信息,是否有mysql-5.7的软件目录。
ls -l /home/usrdata/
看是否有mysql数据目录。
我买了30万的鞋子
原生js插件,有哪些好的树形插件?
原生js插件,有哪些好的树形插件,可以实现类似企业微信树形机构成员的效果的。
支持搜索,自定义图标,可以显示成员头像。
类似如下:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241013/f7515f57f51c96afceeaacca517e99c4.png)
我买了30万的鞋子
这个后台返回的数据用的什么加密方法?
data内容是如下很长的数据
如何解密出返回的数据??"2bd2f2d9669b60607d990c2e531a3ccba5fe4574b9d0ef1617f6fe8535ac593e4fa61f735c4e70890c57cae3f36f00ddf6252d4c35bc368decdf9db67dec175bc28fe68d716969f56526d5a622265623419a2e77bab44222b6b5db3502e26dabed50264352c2d55d2ff4fd8ddd354f0b139dec63a19437945a84ea0c11fd805a6af54f35b03efb5651043de35b729804d7cbaced0c4ef1425e6ad001167744e9795eccd5b503d54cac80395856f5da0328dc21aae68c8f9c2a75908abc6552e41362f2a1081bf9964d628ffe349c6283c409b6e6138a3df9ab9beba91a7462b7dca76d4aa7d0c5e99df65ad91021bca261a10f7da4f238e721d9e4bcd42d11ee37398046c05259197ed890460d9b93a92da20bbc8b8ae8dd3db0b04258a7775aed8065928088323b08343e66d0e439d911f295405c918daff9da864eb89638ee08aa0b7f4a0e684260827231cc7f1dd4debb4ee5021cb807d3b4c5d02eb0b7351880fcc8bc161b4c879b0a825b2a679d9a8f80ec4b073a1e5dffe0002b610e98ea4fd2ff5ddc606882e771399f6412d03a2020642d06f43dde5ef16eb9e4db93e726b0a181c19c329cdc9b6df518b9c433ff45eeafde60182ea9bba0892fd3c7c199a4b0a7a55d9e852b5992309a2e706c9a730ba9a8c81cb5cad2e5e533c317bab54d999e08b9258aeb77ad1a0bc0753552f44ace600ee2ca7e1c68f9542b5302c81a49ac11426e5eb984f2ac6add938be6ec24a7d8996f829abd6bf153707680c1488374fcb3638a40928c93125d1d14da359f9171527a2ac89c09a9d9c3579ead3c0fdeab635fdafaa65f2153d02fef09580ce767210f03b83299a6babb9b57f86d58a5ebc4eab955f0161f01b186864e222b9c9a5ecaebd0aad6c15cf7594ceb36d0b50c7b2c2d1ae39646e05e3d096af1ab9e7ab61e961a96876414aacf72fc86e16e1ea9e9b29356af4134db3bce30d6519b491a61d239c6a9bfd0acbff228094980945ce89b2c4c872cc82c27b9a496006805cc7252dc9ad016d3347cb049b80f5787ab1a47407a925694a02b58970c19353b9fb3490427480d7fa82a56569ea27c84fddf480c3b239251be08407314352de476cb23baa64bc384d89a1d9fdbc6b6fa485858e4d643a845a87ece0cad964dbaf96a681a43a9717c8353f1d23f65c23b484d055e3aed066a58e472965d757391ed4c85346f1a8490c5222ae17f5d1c4b7f7d2d0e203dda1fae42329a3d25e11726f71e778702a400bd20d0a4f6b200c7e01fbb2702d851dd23ffdc31c0be2c204ce14437e34034f955e68fda6a633b7ccd46adb23662e8f73cc19e91eebd8834f8cd8f0c93270e652e09b8d4ffc8b02ae877380375fee97e112ef5fde817be87917faa08c542eafd7aaafdd768a02c062407a05a3b452cc2fc99f1dca43cd56d1ecdc01a4b5cfb3a605bf6e47b1fe01329376ced9d919e6ebc0cc05209b104bc3b9af1fb4e2bbb80fbf721a5fbd1856832ab9d6c43271f4a1357fed51dd58c5c49c3ac963eede26e490c33dac1e1021b18e5c4655c24a6fc41614888a5fa02cac01d92a04faebd262052449eff84b33a53b4bf756c309b552a6be4513394b4d0d5369a59f55cb7e83fc3f031d1082b571c0984c56d5546525a45723d76e249b35e22a1beffdb253aca4f0e2805794d4e3396241a0c075256f215f983d91c0a7ca92303268585152dfde1090d66398e646b748ec796c4685416e5c1df9a967dcbe01e4e7815c201ea2fd169b3dfb66959d9ccd74f753f8b1f68315165d4a3ab44760ddbe8d4438dfd340ba9ba8416ea1619d92a4ba7edf0eee97fbe97b9eea127fe2b75bebdadafba8b4b8616f49f34af318565d26d68dc03c8ba18eb477b9b327fc031eac4da1af7ef9e2f0e04c8e70868805dc3946fcb1b0e158cb940c5cfb90c787e49924564c65e5a984fb9e1a054ea3f5c23ce29560b38a52461783b4c938d9c09ec6b7dc0ba6c3aa32488230e85ae5db5411a7bcf1319cddb7d5497076d4210bb8ca047048a108e3ffd66afcf170fbc9c29fc507ad1b55275c020b1766aa32ebe35840de8373e2a7f093b26e0de2686c982cbb1fe622b62243f0e9aecee92232739decbdb0997160b89b1cb9c4e5403b9ab7bab0b5f1d7af670aeb2c28baa49d4c7f940e8a49459dc6ddf755f82ac04a0dfab182b20c2e880c03a55baf2764258e62aec09663dc0b3cfcb188db3eee7be18fedee19736997adcec2e5a82ad53c7ad15d45bd3aac08a4c12b4ff3d27b138c6553352a06f9bc11ce1a288eeffc708cd0c46774eb619ac12ec9d0ca206bf6200fef335c58debd9ef4eab448558d9b51f0ab110bd4ef5d1c09470de3090abb4633fcc03d585c90acff059a8b6512dd0df9d147d3e6164562aea02b05b2b5d08e3175b2f887d70b4c7163d0b5792664df92dffc37d2da30329ac6d95f9209e77521347e3e30187ca7634ea4858a5186317753413bedc82696f8fa6829bf1fe8eebd5935dcb64dd0549adecc18de18de6ebb929f5335d174f4b86e9eb9f24fb500bcb05b01ab807773de40f64a37c237e0251d36931dd3107b46d8407d5d2d8961a3ab8923a7354b95f1552e114c52e9daa4ccafc1c723d39ba93e1d55d5142a30cbc43d31945a9b8ec874a70c08ebef27c338df1e6af92a3bc27bc7b1b31bfc60117caae4a5783a0946ec3869b397489c86c26742ce9b68dc4c0dcf25c229a830c3861195d3b2c48fb44cddeb830e1535a5ffd84f86699"
https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/3fdcd529e337f6471488e3b7148e9097.png
我买了30万的鞋子
element弹窗嵌套表格关闭后还会再调用一次嵌套组件?
你的弹窗上面代码是什么?截图全点
我买了30万的鞋子
java接入海康威视摄像头sdk后,如何推流给前端?
海康提供的demo用的Java Swing开发的GUI程序,怎么把这个视频转到前端vue项目,后端是怎么生成流地址?
***
之前贴的代码我删了,我重新整理了一下,有懂得大佬来指导一下
开发背景:目前开发环境是摄像头直接连接我本地电脑做开发,springboot框架,不走云视频,本地调海康的SDK得到视频流
我的想法:本地搭建一个流媒体服务ZLMediaKit,海康回调的视频流我通过java代码推到这个流媒体服务上,然后前端vue再去从这个流媒体服务上的rtsp地址直接拉流?
下面是业务类,项目启动时调用,ClientHikVision是从海康demo整理出来的
@Service
public class EquipmentHikVisionServiceImpl implements EquipmentHikVisionService {
@Override
@PostConstruct
public void register() {
ClientHikVision clientHikVision = new ClientHikVision();
clientHikVision.initPipedStream();
clientHikVision.clientInit();
clientHikVision.action();
}
}
ClientHikVision太长了,我贴出部分,这里基本都是初始化,连接设备都没问题
public class ClientHikVision {
ExecutorService executor = Executors.newFixedThreadPool(5);
FFmpegFrameGrabber grabber = null;
FFmpegFrameRecorder recorder = null;
PipedInputStream inputStream = new PipedInputStream();
PipedOutputStream outputStream = new PipedOutputStream();
String pushAddress = "rtsp://127.0.0.1:554/live/1";
public void initData(){
m_lPort= new IntByReference(-1);
fRealDataCallBack = new FRealDataCallBack();
fExceptionCallBack = new FExceptionCallBack_Imp();
}
public void initPipedStream(){
// inputStream = new PipedInputStream();
// outputStream = new PipedOutputStream();
try {
inputStream.connect(outputStream);
System.out.println("Piped设置连接成功");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void clientInit() {
if (hCNetSDK == null && playControl == null) {
if (!CreateSDKInstance()) {
System.out.println("Load SDK fail");
return;
}
if (!CreatePlayInstance()) {
System.out.println("Load PlayCtrl fail");
return;
}
}
//linux系统建议调用以下接口加载组件库
if (osSelect.isLinux()) {
HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256);
HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256);
//这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限
String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1";
String strPath2 = System.getProperty("user.dir") + "/lib/libssl.so.1.1";
System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length());
ptrByteArray1.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArray1.getPointer());
System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length());
ptrByteArray2.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArray2.getPointer());
String strPathCom = System.getProperty("user.dir") + "/lib/";
HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH();
System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length());
struComPath.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer());
}
boolean initSuc = hCNetSDK.NET_DVR_Init();
if (!initSuc) {
throw new CommonException(9001, "初始化失败");
}
if (fExceptionCallBack == null) {
fExceptionCallBack = new FExceptionCallBack_Imp();
}
Pointer pUser = null;
if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, pUser)) {
return;
}
System.out.println("设置告警回调成功");
hCNetSDK.NET_DVR_SetLogToFile(3, "./sdklog", false);
register();
}
public void register() {
//注册之前先注销已注册的用户,预览情况下不可注销
if (bRealPlay) {
throw new CommonException(9001, "注册新用户请先停止当前预览!");
}
if (lUserID > -1) {
//先注销
hCNetSDK.NET_DVR_Logout_V30(lUserID);
lUserID = -1;
}
//注册
m_sDeviceIP = EquipmentConstants.IP;//设备ip地址
m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
int iPort = EquipmentConstants.PORT;
lUserID = hCNetSDK.NET_DVR_Login_V30(m_sDeviceIP,
(short) iPort, EquipmentConstants.ACCOUNT, EquipmentConstants.PSW, m_strDeviceInfo);
long userID = lUserID;
if (userID == -1) {
m_sDeviceIP = "";//登录未成功,IP置为空
int error;
error = hCNetSDK.NET_DVR_GetLastError();
throw new CommonException(9001, "注册失败,错误码:" + error);
} else {
initData();
}
}
public void action(){
if (lUserID == -1) {
throw new CommonException(9001,"请先注册");
}
//如果预览窗口没打开,不在预览
if (bRealPlay == false) {
//获取窗口句柄
// W32API.HWND hwnd = new W32API.HWND(Native.getComponentPointer(panelRealplay));
//获取通道号
int iChannelNum = 1;//通道号
// m_strClientInfo = new HCNetSDK.NET_DVR_CLIENTINFO();
// m_strClientInfo.lChannel = new NativeLong(iChannelNum);
HCNetSDK.NET_DVR_PREVIEWINFO strClientInfo = new HCNetSDK.NET_DVR_PREVIEWINFO();
strClientInfo.read();
// strClientInfo.hPlayWnd = null; //窗口句柄,从回调取流不显示一般设置为空
strClientInfo.lChannel = iChannelNum; //通道号
strClientInfo.dwStreamType=0; //0-主码流,1-子码流,2-三码流,3-虚拟码流,以此类推
strClientInfo.dwLinkMode=0; //连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4- RTP/RTSP,5- RTP/HTTP,6- HRUDP(可靠传输) ,7- RTSP/HTTPS,8- NPQ
strClientInfo.bBlocked=1; //0- 非阻塞取流,1- 阻塞取流
//在此判断是否回调预览,0,不回调 1 回调
//回调------------ strClientInfo.hPlayWnd = null;
strClientInfo.write();
lPreviewHandle = hCNetSDK.NET_DVR_RealPlay_V40(lUserID,
strClientInfo, fRealDataCallBack, null);
if (lPreviewHandle 0) {
long offset = 0;
ByteBuffer buffers = pBuffer.getPointer().getByteBuffer(offset, dwBufSize);
byte[] bytes = new byte[dwBufSize];
buffers.rewind();
buffers.get(bytes);
System.out.println(Arrays.toString(bytes));
executor.execute(() -> {
push(bytes,dwBufSize);
});
// if (!playControl.PlayM4_InputData(m_lPort.getValue(), pBuffer, dwBufSize)) //输入流数据
// {
// break;
// }
}
}
}
}
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241008/fc6cf5d6aada71bdde97823704559a62.png)
上面的数据流写入到管道里,后面代码我不知道写的对不对,走了一个handle方法,grabber = new
FFmpegFrameGrabber(inputStream,0),这里应该是消费管道中的数据流。这里用的ZLMediaKit做流媒体服务,我已经编译好启动了,但是不知道该怎么用,这个pushAddress地址我不知道写的对不对。里面的grabber.startUnsafe()方法每次调用都会阻塞,本来是grabber.start()方法的,两种方式都会阻塞,
public void push(byte[] data, int size) {
try {
outputStream.write(data, 0, size);
handle();
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
}
public void handle() throws InterruptedException, IOException {
System.out.println("-----开始处理流数据-----");
grabber = new FFmpegFrameGrabber(inputStream,0);
grabber.setOption("rtsp_transport", "tcp");
grabber.setOption("stimeout", "2000000");
grabber.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
grabber.setVideoCodec(avcodec.AV_CODEC_ID_H264);
grabber.setAudioStream(Integer.MIN_VALUE);
grabber.setFormat("mpeg");
long stime = System.currentTimeMillis();
System.out.println("------1111111111------");
System.out.println(inputStream.available());
// 检测回调函数书否有数据流产生,防止avformat_open_input函数阻塞
do {
Thread.sleep(100);
if (System.currentTimeMillis() - stime > 2000) {
System.out.println(("-----SDK回调无视频流产生------"));
return;
}
}while (inputStream.available() 2000) {
// System.out.println(("-----SDK回调无视频流产生------"));
// return;
// }
// } while (inputStream.available() != 2048);
// 只打印错误日志
avutil.av_log_set_level(avutil.AV_LOG_QUIET);
FFmpegLogCallback.set();
System.out.println(grabber.toString());
grabber.startUnsafe();
System.out.println(("--------开始推送视频流---------"));
recorder = new FFmpegFrameRecorder(pushAddress, grabber.getImageWidth(),grabber.getImageHeight(), grabber.getAudioChannels());
recorder.setInterleaved(true);
// 画质参数
recorder.setVideoOption("crf", "28");
// H264编/解码器
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setVideoBitrate(grabber.getVideoBitrate());
// 封装flv格式
recorder.setFormat("flv");
// 视频帧率,最低保证25
recorder.setFrameRate(25);
// 关键帧间隔 一般与帧率相同或者是帧率的两倍
recorder.setGopSize(50);
// yuv420p
recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
recorder.startUnsafe();
int count = 0;
Frame frame;
while (grabber.hasVideo() && (frame = grabber.grab()) != null) {
count++;
if (count % 100 == 0) {
System.out.println("推送视频帧次数:"+count);
}
if (frame.samples != null) {
System.out.println("检测到音频");
}
recorder.record(frame);
}
if (grabber != null) {
grabber.stop();
grabber.release();
}
if (recorder != null) {
recorder.stop();
recorder.release();
}
}
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241008/dcd2298bdcd70c02ab62aa42df91c79a.png)
System.out.println(grabber.toString());grabber.startUnsafe();这两行代码都走了,但是到这就停住阻塞不动了,麻烦大佬帮忙看下
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241008/b6e39c05836a153d1fcf7c6b3d30e584.png)
参考资料 转:
"大华、海康SDK对接,使用javacv+流媒体服务实现实时播放和回放" (https://link.segmentfault.com/?enc=oXk6caaYMGP8K7HN41C3CQ%3D%3D.aKLszW98wxtVdPRtJLDXLEX45Cp7wJ4SO6kn%2BGVA5DcBoMTW%2B834FImmfdmME4WNJWaB%2FaBfeBj8OG3veWKGeQ%3D%3D)
"JavaCV中FFmpegFrameGrabber调用start()方法时出现阻塞的解决办法" (https://link.segmentfault.com/?enc=xx%2F97Pvf%2FIdUfjeIsiARww%3D%3D.yvzRtih7Gztwm69J7kZwPjRqqAzUUFj29kdit7OrcinEp051yA8LSfqn0yXD%2BjOL8BjzqIflzpaceFAsrqKmEgriJFv6XCvF6TObY%2BIxwNBSPCkAVdyqREvJo%2Fr29Fsl7sCB3e%2B9gBqfcswenirjI4amicp5bVZ48yfOTDHwpZEDAmJVL5i8PRNcXan3soSc9Wicd87PCmTDn2Ir5zJ1h7Nt%2BbYyBt6nGWj8drA902ghvnKwNxjhTZNpSsPYq5r0AyHOjWmSUf4Zs2mzDm7CVG7onAMLjJD6KQommQt%2B4Yho0JXpxObiNdLehIIz4KlcEvIZAJPIqAlUd2QuSfJ4%2BMHTZJ6b0qdftURyhanhBvE%3D)
我买了30万的鞋子
el-image的src赋值了一个接口中返回的图片地址,为什么接口请求了两次呢?
搭了个 "Demo" (https://jsfiddle.net/q1jfnokL/) 测试了一下,这应该算是一个已知问题 "Element UI
#19712" (https://link.segmentfault.com/?enc=alP4pQRrLkPLSJWhcA1tdA%3D%3D.yqdRKWhXOU5z3yYl%2BLMQ3qAxoovF1Iinu6cUdDx0mIM2zteTCe2D8xem81Dwc5xt)。
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/9e2384b145d293c24ec1cb2f7018c258.png)
引起这个问题的原因是在组件内部,根据 loading 的变化,使用 "v-if" 来控制了 img 标签和占位图片的显示与隐藏,使得 Vue
重新渲染了组件。
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/14192292f0f48581edf4942ffc552541.png)
* "element/packages/image/src/main.vue at dev · ElemeFE/element · GitHub" (https://link.segmentfault.com/?enc=Bclv9gsFmkLBCzGFvQzJKw%3D%3D.LS9Cv6CuIvl59mgG3J8llUuZkmwQpWCsWpyxew9LRy%2BteRUQr6iYzGz%2F0HmXQnIPV59jCCOIVjJPR6%2Fo0IK9EmQpZcpKwEs29Dc26jekLkY%3D)
当 el-image 加载完图片后,会调用内部的 handleLoad 方法来修改 loading 的值。
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/5d9b3c2b3141c051f7d2413279a72fae.png)
从而导致了重新渲染。
等效于下面的代码:
setTimeout(() => {
const image = new Image();
const src = 'https://i.imgur.com/xUbINne.png';
image.src = src;
image.onload = function () {
b1.innerHTML = ``;
};
}, 1000);
上面这个说法有点问题,主要还是因为加载方式的原因,el-image 会先在 js 代码中使用 new Image
的形式去加载一次图片,这就是第一个请求。而第二个请求则 Vue 在渲染 img 标签的时候触发的,这也应当是符合预期的。
***
其实如果你看了上面的 issues ,你就会发现,如果在 Devtools 中的 Network 面板上取消了 "Disable cache"
就只会有一条加载,正如另一个回答中的不能复现问题一样。
***
解决办法:暂无
一般来说,你可以不用关心,因为实际生产中,图片资源都会配置缓存策略,正常浏览时不受影响的。
我买了30万的鞋子
el-cascader点了第二次的值替换第一次的值,第三次替换上一次的值,以此类推?
«"el-cascader" 点了第二次的值替换第一次的值,第三次替换上一次的值,以此类推»
从这个描述来看,一般来说就是失去响应式监听。因为现在只是局部的代码块,不知道你是从哪里失去的监听。
如果可以的话 "this.ruleForm.address = this.ruleForm.address + newInputValue"
这种赋值操作最好是用
"$set()" (https://link.segmentfault.com/?enc=IvBCxUbZRhr7adT%2Fd2gTXw%3D%3D.qeNKUVVmBxorM8C89CD%2B5MMNCf7yIjKAZIllA%2FCHQ3smt9ax2i%2Bxr7it3jaZCIuL)
来做。
因为如果 "this.ruleForm" 如果一开始没有 "address" 这个变量值,你这样直接赋值就不会被监听变更。
我买了30万的鞋子
npm 安装 @amap/amap-js-kml 包的详细指南?
npm install @amap/amap-js-kml包如何下载?
一直下载都不成功
我买了30万的鞋子
咨询一个CSS层定位的问题?
好想看没啥好办法
Document
.container {
position: relative;
}
.nobox {
width: 100px;
height: 100px;
background-color: green;
}
.box {
position: absolute;
width: 100px;
height: 100px;
background-color: red;
}
.boxs {
position: absolute;
top: 100px;
width: 100px;
height: 100px;
background-color: yellow;
}
Box 0
Box 1
Box 2
这样符合你的要求不
我买了30万的鞋子
有什么开源的监控工具可以查看 mysql 的详情?
"图片.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241001/96f7239e42569df99e2aa877657c32c7.png)
有什么开源的监控工具可以查看 mysql 的详情,qps、tps、cpu、链接数、imdb 指标等?类似 aliyun mysql 的监控面板一样的
但是我不要 grafana+prometheus 的组合,因为 grafana+prometheus 的 gui 面板太麻烦也不好看,需要自己做的操作太多。
我只要一个开箱即用,不需要什么配置的开源免费的 mysql 超级详细的监控面板
* 界面要漂亮美观大方
* 各种细节指标都要有
* 有 http web 界面,不要客户端工具,比如 dbeaver、navicat 这种不要
我买了30万的鞋子
Nuxt3中如何将小图片转换为Base64格式?
请问nuxt3怎么把小图片转base64?都是1k左右的小图片
vite配了assetsInlineLimit:8192也不管用
vite版本: 4.5.0
vite配置:
vite: {
base: '/dist/',
build: {
assetsInlineLimit: 8192, //8kb
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
}
},
},
plugins: [
prismjsPlugin({
languages: 'all',
plugins: ['toolbar', 'copy-to-clipboard', 'line-numbers'],
theme: 'tomorrow',
css: true
}),
]
}
我买了30万的鞋子
使用spring cloud alibaba创建微服务,必须使用父子的工程结构吗?
我搭建一个微服务,有订单模块,库存模块,用户模块,快递模块等等,这些模块如果写在一个父项目下,那么将整个项目push到gitlab后,和其他模块无关的开发者也可以下载下来无关模块并查看其中代码并做出修改提交,这显然是不安全的。可不可以各模块单独做成仓库,开发者只能pull自己负责的模块进行开发。如果我上述的方法可行,应该如何实现呢?