最新发布

JavaScript 如何下载图片

JavaScript 如何下载图片

我们在浏览器使用JavaScript下载图片的时候;通常会想到使用window.location.href=imgUrl或者window.open(imgUrl);但是有时候我们会发现图片会在浏览器打开;而达不到我们想要的下载效果;于是通过调研;下面总结了两种图片下载的方法前置代码下载图片前首先在JavaScript通过new Image()的方式加载图片;然后再对图片做转换,转换包括图片转base64,base64转blob等;然后对转换之后的图片资源进行下载。下面直接上代码。// 加载图片
async function loadImage (params) {
// 图片src 必传
let src = params.src
return new Promise((resolve, reject) => {
let img = new Image()
img.src = src
img.crossOrigin = 'anonymous'
img.onload = () => {
resolve(img)
}
img.onerror = reject
})
}

// 图片转base64
function img2Base64 (image) {
// 图片画到canvas
const canvas = document.createElement('canvas');
canvas.width = image.width;
canvas.height = image.height;
const context = canvas.getContext('2d');
context.drawImage(image, 0, 0);
return canvas.toDataURL('image/png', 1.0)
}
// base64转blob
function base64ToBlob (base64Code) {
let parts = base64Code.split(';base64,')
let contentType = parts[0].split(':')[1]
let raw = window.atob(parts[1])
let rawLength = raw.length
let uInt8Array = new Uint8Array(rawLength)
for (let i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i)
}
return new Blob([uInt8Array], {
type: contentType
})
}

// 下载资源
function downloadFile(href, filename) {
const link = document.createElement('a');
link.href = href;
link.download = filename;
link.setAttribute('type', 'application/octet-stream');
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}下载图片代码方法一;先加载图片,再把图片转base64,再下载base64。方法二;先加载图片,再把图片转base64,再把base64转blob,再下载blob。// 1;先加载图片,再把图片转base64,再下载base64
async function downloadImg1(imageUrl) {
const image = await loadImage({src: imageUrl})
let base64 = img2Base64(image)
// 下载图片
downloadFile(base64, 'file.png');
}
// 2;先加载图片,再把图片转base64,再把base64转blob,再下载blob
async function downloadImg2(imageUrl) {
const image = await loadImage({src: imageUrl})
let base64 = img2Base64(image)
let blob = base64ToBlob(base64)
// 下载图片
downloadFile(URL.createObjectURL(blob), 'file.png');
}

// 示例
downloadImg1('https://xyhnnx.gitee.io/img/getdoc.png');
downloadImg2('https://xyhnnx.gitee.io/img/getdoc.png');可能遇到的报错如果遇到这个错误:Access to image at 'xx' from origin 'xx' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.这个错误提示通常是由于遵循同源策略而引起的,它防止JavaScript代码从不同的源(域名、协议或端口)获取数据。如果试图从另一个域名下加载图像,即在跨域请求图片时,由于CORS限制,浏览器可能会拒绝显示该图像并抛出这个错误。要解决这个问题,您可以使用下面的任一方法:将图像文件存放在与您的网站相同的主机上,或者使用基于相对路径的URL。这将避免跨域问题。如果必须从不同的域名或主机加载图像,您需要在相关的服务器上设置Access-Control-Allow-Origin标头,在响应中包含允许访问资源的域名。例如,在HTTP响应中添加以下标头可以允许所有域名访问图片:Access-Control-Allow-Origin: *如果您无法在服务器上进行更改,可以尝试使用代理来获取图像数据。例如,您可以在您的服务器上设置代理,在代理中请求图像,而不是直接从浏览器中请求。这将避免跨域问题。总之,CORS问题通常涉及到服务器、响应头或代理,您可以根据实际情况选择相应的解决方案来解决这个问题。
Nodejs 获取指定文件夹下所有文件及文件夹

Nodejs 获取指定文件夹下所有文件及文件夹

做项目时候经常会遇到获取本地某个文件夹下所有内容的情况;下面简单列举两种方法。## 方法一 文件及文件夹扁平化输出

### 代码

```javascript

const fs = require('fs');

function getFilesAndFoldersInDir(path) {
const items = fs.readdirSync(path);
const result = [];
items.forEach(item => {
const itemPath = `${path}/${item}`;
const stat = fs.statSync(itemPath);
if (stat.isDirectory()) {
let data = {
// 文件夹
type: 'folder',
name: item
}
let children = getFilesAndFoldersInDir(itemPath)
if (children && children.length) {
data.children = children
}
result.push(data);
} else {
// 文件
result.push({
type: 'file',
name: item
});
}
});
return result;
}

let list = getFilesAndFoldersInDir('/jay')
console.log(list)输出结构[
{
"size": 1224860,
"name": "周杰伦-Intro.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-Intro.mp3"
},
{
"size": 7432949,
"name": "周杰伦-Mojito.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-Mojito.mp3"
},
{
"size": 9866516,
"name": "周杰伦-不爱我就拉倒.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-不爱我就拉倒.mp3"
},
{
"size": 9401524,
"name": "周杰伦-倒影.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-倒影.mp3"
},
{
"size": 10831295,
"name": "周杰伦-等你下课 (with 杨瑞代).mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-等你下课 (with 杨瑞代).mp3"
},
{
"size": 10346118,
"name": "周杰伦-错过的烟火.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-错过的烟火.mp3"
},
{
"size": 10687350,
"name": "周杰伦-我是如此相信.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-我是如此相信.mp3"
},
{
"size": 9794418,
"name": "周杰伦-最伟大的作品.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-最伟大的作品.mp3"
},
{
"size": 7504609,
"name": "周杰伦-粉色海洋.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-粉色海洋.mp3"
},
{
"size": 10316859,
"name": "周杰伦-红颜如霜.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-红颜如霜.mp3"
},
{
"size": 8926108,
"name": "周杰伦-说好不哭 (with 五月天阿信).mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-说好不哭 (with 五月天阿信).mp3"
},
{
"size": 10664502,
"name": "周杰伦-还在流浪.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-还在流浪.mp3"
}
]方法二 文件及文件夹以树状结构输出代码// 获取文件夹下所有文件
function getFilesAndFoldersInDir(path) {
const filesList = [];
readFile(path, filesList);
return filesList;
}

// 遍历读取文件
function readFile(path, filesList) {
const files = fs.readdirSync(path); // 需要用到同步读取
files.forEach(walk);

function walk(file) {
const states = fs.statSync(path + '/' + file);
if (states.isDirectory()) {
readFile(path + '/' + file, filesList);
} else {
// 创建一个对象保存信息
const obj = {};
obj.size = states.size; // 文件大小,以字节为单位
obj.name = file; // 文件名
obj.path = path + '/' + file; // 文件绝对路径
filesList.push(obj);
}
}
}

let list = getFilesAndFoldersInDir('/jay')
console.log(list)输出结构[ { "type": "folder", "name": "《最伟大的作品》专辑MP3", "children": [ { "type": "folder", "name": "目录1", "children": [ { "type": "file", "name": "周杰伦-Intro.mp3" }, { "type": "file", "name": "周杰伦-Mojito.mp3" }, { "type": "file", "name": "周杰伦-不爱我就拉倒.mp3" }, { "type": "file", "name": "周杰伦-倒影.mp3" }, { "type": "file", "name": "周杰伦-等你下课 (with 杨瑞代).mp3" }, { "type": "file", "name": "周杰伦-错过的烟火.mp3" } ] }, { "type": "folder", "name": "目录2", "children": [ { "type": "file", "name": "周杰伦-我是如此相信.mp3" }, { "type": "file", "name": "周杰伦-最伟大的作品.mp3" }, { "type": "file", "name": "周杰伦-粉色海洋.mp3" }, { "type": "file", "name": "周杰伦-红颜如霜.mp3" }, { "type": "file", "name": "周杰伦-说好不哭 (with 五月天阿信).mp3" }, { "type": "file", "name": "周杰伦-还在流浪.mp3" } ] } ] }]

chatGPT 帮我总结的css左右+垂直居中方法

下面介绍5种css使元素上下左右居中的方法;这5种方法的父元素parent和子元素child的基本公共样式如下, 其中父元素和子元素的宽高可任意修改,后面的样式不依赖宽高。.parent { width: 100%; height: 400px; background: #eee;}.child { background: #000; width: 200px; height: 200px;}1. 使用display:inline-block和text-align这种方法是使用display:inline-block属性将元素改变为内联块元素,再结合text-align属性将父容器左右居中;再利用translateY上下居中。.parent { text-align: center;}.child { display: inline-block; transform: translateY(50%)}2. 使用display:flex和margin:auto这种方法是通过使用flexbox布局,将父容器设置为弹性容器,然后使用margin:auto属性将元素居中对齐。.parent { display: flex;}.child { margin: auto;}3. 使用display:flex,justify-content,align-items这种方法是通过使用align-self属性定义元素在弹性容器中垂直居中对齐,并且将justify-content属性设置为center实现水平居中对齐。.parent { display: flex; justify-content: center; align-items: center;}4. 使用父元素position: relative 和子元素position: absolute这种方法是通过将子元素的top、bottom、left、right;都设为0;并在其上使用margin:auto属性将元素居中对齐。 .parent { position: relative;}.child { position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto;}5. 使用calc()、position、transform 相结合这种方法是通过使用calc()函数计算出top和left的值以及使用position属性将元素定位到居中位置。其中top、left的50%是相对于父元素;而translate的50%是相对于子元素.parent { position: relative;}.child { position: absolute; transform: translate(-50%, -50%); left: calc(50%); top: calc(50%);}以上5种方法都可以实现元素在父容器中的居中对齐,具体使用哪一种方法取决于具体的场景和需求。
出师表

出师表

先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。今当远离,临表涕零,不知所言。
We Chat | 像素风背景图 +7

We Chat | 像素风背景图

最近的像素风很火🔥We Chat像素画无偿分享
一款带弹性动画关闭效果的QQ在线客服咨询插件

一款带弹性动画关闭效果的QQ在线客服咨询插件

带弹性动画关闭QQ在线客服代码是一款带弹性动画关闭效果的QQ在线客服咨询插件代码,可设置客服头像和QQ在线客服代码,关闭时会显示弹跳的动画效果,很有趣。经测试效果相当不错!源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面。https://www.123865.com/s/UUEuVv-KvKgA
“叫“姐姐”已经不流行了,现在都叫这10种称呼”

“叫“姐姐”已经不流行了,现在都叫这10种称呼”

•小朋友:宠溺感拉满,暗示你永远是我的偏爱。•穿搭老师:用技能贴标签,夸人于无形。•领导:表面认怂,实则撒糖。•小祖宗:嘴上嫌弃,眼里全是纵容。•老板:社畜梗也能变情话。•姐妹:打破性别框架,做她的“最佳闺蜜”。•爱人:已婚人士的浪漫暴击,安全感十足。•仙女本仙:女生永远听不腻的彩虹屁。•宝贝儿:甜蜜感十足,无法拒绝。•女主人:以下属身份,永远追随。
警察叔叔是怎么通过IP定位到你的? +1

警察叔叔是怎么通过IP定位到你的?

在网络世界中,你的IP地址就像是数字身份证,可以揭示你的位置信息。警方依靠这些数字痕迹,结合专业技术手段和法律程序,能够锁定网络犯罪嫌疑人。让我们揭开IP定位的技术面纱,了解这背后的原理。一、IP与地理位置的关联警方会利用专业的IP地理位置数据库进行定位工作。这些数据库包括:公安专用IP定位数据库第三方商业级IP地址库网络运营商提供的地址映射通过将IP地址与注册信息、网络拓扑数据(如BGP路由表、WHOIS信息)及历史基准点进行匹配分析,系统能够实现相当精确的位置推断:企业IP定位:精确度通常可达50米范围内家庭IP定位:一般精确在1~5公里范围内二、IP与网络接入点的关系当需要更精确定位时,电信运营商可以调取该IP地址对应的网络设备信息:BRAS设备(宽带接入服务器)记录基站位置数据通过这些技术手段,定位精度可以提升至:社区和街道级别条件良好时甚至可精确到具体楼宇三、IP与家庭宽带的精确映射现代网络接入管理中,运营商通常会为每个家庭宽带分配唯一标识:不同家庭的宽带被分配了不同的源IP端口标注源端口范围从0到65535,每个家庭的配置各不相同通过网络请求中的IP和源端口组合,警方可以精确定位到具体住户实用IP定位查询工具如果你想了解自己的IP定位情况,可以尝试以下专业网站:第一个:https://www.chaipip.com/aiwen.html第二个:https://www.ip66.net/ip?tp=1&ip=183.241.x.x趣味知识你是否曾好奇,为什么使用代理或某些苹果设备查询自己位置时,有时会显示在公安局或政府机构附近?这背后可能有什么原因呢?欢迎在评论区分享你的猜测!注:本文仅供网络安全知识普及,请勿用于非法用途。网络不是法外之地,每一个数字足迹都可能被追溯。
“改个癫癫的微信群名称”🦍

“改个癫癫的微信群名称”🦍

1. 少年先疯队2. 祖国的食人花3. 啊对对队4. 商业胡吹彩虹屁总群5. 朵朵奇葩像太阳6. 强盛集团7. 极限X傻8. 帅哥情报局9. 海王之家10. 相侵相碍一家人11. 不醒人事12. 酒精沙场的战士们13. 永瘦宫14. 世界隐形富豪群15. 发际线保护协会16. 单身狗自然保护区
xiuno修罗论坛二开模板仿网盘资源社优化网站源码搭建送全套插件

xiuno修罗论坛二开模板仿网盘资源社优化网站源码搭建送全套插件

xiuno修罗论坛二开模板仿网盘资源社优化网站源码搭建送全套插件PHP版本:5.0到7.3之间,推荐7.1,高和低都会出错!https://www.123865.com/s/UUEuVv-uvKgA以服务器为例搭建教程①先安装PHP7.1版本 再安装数据库Mysql②解压文件:xiunobbs_4.0.4(解压到根目录).zip③解压②完成后找到【plugin】文件夹再解压:plugin(解压到plugin文件夹).zip设置伪静态代码在上面,运行安装:域名/install/以酷酷资源社为例(访问你的域名/install/)运行该目录进行数据库安装、连接、设置后台账户和密码搭建就完成了,首次搭建先在后台把所有的插件卸载,再重新安装,安装完再清缓存伪静态:`location ~* .(htm)$ {rewrite “^(.)/(.+?).htm(.?)$” $1/index.php?$2.htm$3 last;}`
2025款高仿新版假飞机假TG源码/以及搭建教程

2025款高仿新版假飞机假TG源码/以及搭建教程

2025款高仿新版假飞机假TG源码/以及搭建教程,修复了手机号以及86手机号无法登录的问题 修复了BTC地址不能篡改的BUG,源码仅供学习交流使用,具体未测。感兴趣自行下载研究。https://www.123865.com/s/UUEuVv-UvKgA
wordpress星空广告插件

wordpress星空广告插件

WordPress浮动广告插件后台可上传本地图片、设置大小、链接和初始位置,广告可在网页上浮动,鼠标悬停暂停,可从媒体库选择图片,能无限添加广告。使用方法:1.点击插件,添加插件,选择插件,等待上传成功2.插件页面启动插件3.侧边栏会出现星空广告4.设置广告https://www.123865.com/s/UUEuVv-SvKgA
上一页
第 13 页,共 20 页
下一页

平台说明

欢迎来到六爱资源网论坛社区!这里是用户交流讨论、分享经验的互动平台。

平台特色:

  • 多个专业板块,满足不同讨论需求
  • 实时互动交流,建立良好社区氛围
  • 精华内容推荐,汇聚优质讨论
  • 版主认证机制,确保内容质量
6+
讨论板块
231+
帖子数量
34778+
总阅读量