美文网首页
使用node下载图片

使用node下载图片

作者: jia林 | 来源:发表于2020-03-10 10:38 被阅读0次

    需求:把json中的图片地址下载到本地

    1、先来个简短版

    ```

    /**

     * @param {string} filepath  文件路径

     * @param {string} imgUrl    图片url地址

     * @param {string} imgName   图片名称

     * @param {string} dirName   文件夹名字

     * @param {number} index     下标,可用于做进度条或者判断是否下载完成

     */

    // 保存图片

    function downImage (filepath,imgUrl, imgName, dirName, index) {

      return new Promise((resolve, rej) => {

        https.get(imgUrl, (res) => {

          let imgData = "";

          res.setEncoding("binary");

          res.on("data", (chunk) => {

            imgData += chunk;

          });

          res.on("end", () => {

            fs.writeFile(`${filepath}\\${dirName}\\${imgName}.jpg`, imgData, "binary", (err) => {

              if (err) {

                rej({ code: 0, msg: "saveimg fail" });

              }

              resolve({

                code: 1,

                msg: "saveimg success",

                count: index + 1

              });

            });

          });

        });

      });

    ```

    2、以上下载少量图片还是行的通,遇到网络延迟或者图片下载失败,做了容错处理

    ```

     async downImage(imgUrl, imgName, dirName, index, filePath) {

        return new Promise(async (resolve, rej) => {

          await https.get(imgUrl, (res) => {

            let imgData = "";

            res.setEncoding("binary");

            res.on("data", (chunk) => {

              imgData += chunk;

            });

            res.on("end", () => {

              fs.writeFile(`${filePath}\\${dirName}\\${imgName}.jpg`, imgData, "binary", async (err) => {

                if (err) {

                  const errData = JSON.stringify(err);

                  rej({

                    code: 0, msg: "saveimg fail end", dataInfo: {

                      imgUrl, imgName, dirName, index, filePath

                    }

                  });

                }

                resolve({

                  code: 1,

                  msg: "saveimg success",

                  count: index + 1

                });

              });

            });

            res.on('error', () => {

              rej({

                code: 0, msg: "saveimg fail err", dataInfo: {

                  imgUrl, imgName, dirName, index, filePath

                }

              });

            });

          }).on('error', async (err) => {

            const errData = JSON.stringify(err);

            if ((errData as any).code === "ETIMEDOUT") {

              try {

                const result = await this.downImage(imgUrl, imgName, dirName, index, filePath);

                resolve({

                  code: 1,

                  msg: "saveimg success1",

                  count: index + 1

                });

              } catch (error) {

                console.log(error, 'error');

                rej({

                  code: 0, msg: "saveimg fail error", dataInfo: {

                    imgUrl, imgName, dirName, index, filePath

                  }

                });

                return;

              }

            }

            rej({

              code: 0, msg: "saveimg fail lasterror", dataInfo: {

                imgUrl, imgName, dirName, index, filePath

              }

            });

          });

        });

      }

    ```

    相关文章

      网友评论

          本文标题:使用node下载图片

          本文链接:https://www.haomeiwen.com/subject/xsiidhtx.html