使用fetch api获取图像,并通过fs模块保存



我可以使用这个函数下载任何包含文本的文件,但是我也想下载像.png.jpg这样的图像。

如何使用fetch实现呢?

async function fetchGithubFileContent(url) {
let res = await fetch(url).then((res) => res.text())
window.electronAPI.writeFile({ content: res, fileName: "res.js" })
}
async function writeFile({ content, fileName }) {
fs.writeFile(path.join(__dirname, fileName), content, () => console.log(`successfully saved ${fileName}`))
}
fetchGithubFileContent("https://raw.githubusercontent.com/Tetrax-10/Nord-Spotify/master/src/nord.js")

如果fetch不能,那么axios可以吗?

另一种方法是使用节点流(更好的方法)

import https from "https"
const { pipeline } = require("stream/promises")
import path from "path"
import fs from "fs"
async function download(url) {
return new Promise(async (onSuccess) => {
https.get(url, async (res) => {
let fileName = url.split("/").pop()
const fileWriteStream = fs.createWriteStream(path.join(__dirname, fileName), {
autoClose: true,
flags: "w",
})
await pipeline(res, fileWriteStream)
onSuccess("success")
})
})
}
await download("https://raw.githubusercontent.com/Tetrax-10/Spicetify-Themes/master/assets/artist-2.png")

我在回答我自己的问题,因为我花了一个小时才解决。

import { Buffer } from "buffer"
async function writeFile({ content, fileName }) {
fs.writeFile(path.join(__dirname, fileName), content, () => console.log(`successfully saved ${fileName}`))
}
async function writeImage({ binaryData, fileName }) {
let formatedBinaryData = binaryData.replace(/^data:image/w+;base64,/, "")
let buffer = Buffer.from(formatedBinaryData, "base64")
await writeFile({ content: buffer, fileName: fileName })
}
async function imageUrlToBase64(url) {
let response = await fetch(url)
let blob = await response.blob()
return new Promise((onSuccess, onError) => {
try {
const reader = new FileReader()
reader.onload = function () {
onSuccess(this.result)
}
reader.readAsDataURL(blob)
} catch (error) {
onError(error)
}
})
}
async function downloadGithubImage(url) {
let base64 = await imageUrlToBase64(url)
let fileName = url.split("/").pop()
window.electronAPI.writeImage({ binaryData: base64, fileName: fileName })
}
downloadGithubImage("https://raw.githubusercontent.com/Tetrax-10/Spicetify-Themes/master/assets/home.png")

最新更新