我是靠谱客的博主 野性万宝路,最近开发中收集的这篇文章主要介绍node 下载图片到本地,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

图片下载

一.需求

1.json文件刷选出imageUrl
2.下载的图片必须保存载与json文件同名的文件夹中
3.将json文件中原网络地址改为json文件本地路径

二.分析

1. 采用node
2.获取存储数据data文件夹中的文件目录
3.遍历目录,获取json文件中,图片imgUrl
4.下载imgUrl,保存到本地目录中
5.将json文件中的imgUrl改为本地路径

三.代码实现分解

1.引入模块

	let fs = require('fs');       //引入文件读取模块
	let request = require('request')

2.获取data的文件目录
在这里插入图片描述

	let list = fs.readdirSync('./Data')
	console.log(list)       // [ 'diet.json', 'healthplan.json', 'materials.json' ]

3.遍历list,读取每个json文件,获取imgUrl路径

 list.forEach(file=>{
	// 可以通过 递归的方式获取imageUrl,
	// 也可以通过正则匹配,我这里主要介绍正则匹配
	  let contentText = fs.readFileSync(`./Data/${file}`,'utf-8');
      let arr =  contentText.match(/http[s]?://.+.(jpg|gif|png)/g)
})

只截取某一个json文件中的部分:
在这里插入图片描述
4.通过获取到的imageUrl将图片下载到本地

   arr.forEach((url,idx)=>{
   		let filename =  url.split('/').pop()  // 已原网络图片的名称命名本地图片
                request({url}).pipe(
                        fs.createWriteStream(`./images/${filename}`).on('close',err=>{  console.log('写入失败',err) })
                )   
    })

图片都被保存在images文件夹下,且文件名都使用原名称保存
在这里插入图片描述
5.我想将本地json文件中的imageUrl网络地址改为 本地地址

可以直接使用正则匹配出图片地址,将原地址替换,可以使用replace,但是之前使用过match匹配过,为了节省一次匹配,我打算将方法3中的正则修改为

let arr = []
contentText = contentText.replace(/http[s]?://.+.(jpg|gif|png)/g,res=>{
      let filename =  res.split('/').pop()
	arr.push(res)  // 匹配到的地址存于 arr中
	 return  `./images/${filename}`  // 同时将contentText 中的内容修改
})

// 将json 文件重新写入
fs.writeFile(`./Data/${file}`, contentText,res=>{
     console.log(res)
 })

四.代码实现

let fs = require('fs');//引入文件读取模块
let request = require('request')
let list = fs.readdirSync('./Data')

list.forEach(file => {
      let contentText = fs.readFileSync(`./Data/${file}`,'utf-8');

        let arr = []
       contentText =  contentText.replace(/http[s]?://.+.(jpg|gif|png)/g,res=>{
                let filename =  res.split('/').pop()
                arr.push(res)
                return  `.images/${filename}`
       })
       
       arr.forEach((url,idx)=>{
                let filename =  url.split('/').pop()
                request({url}).pipe(
                        fs.createWriteStream(`./images/${filename}`).on('close',err=>{  
                                console.log('sdfsd',err) })
                )     
       })
      
       fs.writeFile(`./Data/${file}`, contentText,res=>{
                console.log(res)
        })
})

以上是我个人总结,如果您还有更好的方法,欢迎指正,谢谢!

最后

以上就是野性万宝路为你收集整理的node 下载图片到本地的全部内容,希望文章能够帮你解决node 下载图片到本地所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部