使用node.js 下载 ico文件出错?

我想通过node.js下载.ico文件,发现普通的图片地址可以正常的访问下载,但是.ico文件地址下载下来出错,求大神帮忙看看问题。

app.js

const express = require("express")
const app = express()
const request = require("request")
const fs = require("fs")
const Url = require("url")
const path = require("path")
const port = 3000

const faviconPath = path.join(__dirname, "favicon")

function downloadFile(uri, filename) {
  request(uri).pipe(fs.createWriteStream(filename))
}

app.get("/", (req, res) => {
  let url = req.query.url
  let urlObj = Url.parse(url)
  let fileName = (urlObj.hostname || "default") + ".ico"
  let filePath = path.join(faviconPath, fileName)
  let uomg = "https://api.uomg.com/api/get.favicon?url="
  downloadFile(uomg + url, filePath)
})

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

我把下载地址换成普通的地址可以正常的下载,但是ico图片地址下载了之后无法访问。
下载的ico文件无法访问
测试ico地址:https://api.uomg.com/api/get....

阅读 1.9k
2 个回答

瞅了一下,响应是没问题的,但是响应被 Gzip 压缩了,你需要改成:

request({uri, gzip: true}).pipe(fs.createWriteStream(filename))

这样输出的文件就正常了,其他一些问题自己再检查检查。

看这样子,应该是你的文件没下载完吧或者没有完全下载成功吧。试试加个catch,看下能不能catch到错误信息


request 换成 request-promise-native

const request = require("request-promise-native")

async function downloadFile(uri, filename) {

    try {
        let res = await request(uri);
        res.pipe(fs.createWriteStream(filename))
    } catch (error) {
        console.log("error------->" , error)
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题