最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node保存Canvas圖片并刪除過期圖片的操作步驟

 更新時(shí)間:2025年05月07日 09:43:07   作者:Jimmy  
本文,我們將探討,如何使用 Canvas 生成圖片,并通過 Node 將其保存在我們電腦的指定的位置,并在圖片文件過期之后,刪除該文件內(nèi)容,以免占用我們的電腦存儲(chǔ)空間,下面小編給大家詳細(xì)演示一下操作步驟,需要的朋友可以參考下

引言

本文,我們將探討,如何使用 Canvas 生成圖片,并通過 Node 將其保存在我們電腦的指定的位置。并在圖片文件過期之后,刪除該文件內(nèi)容,以免占用我們的電腦存儲(chǔ)空間。

我們將使用的演示環(huán)境如下:

  • NodeJs
  • Ejs 模版
  • macOS Sequoia 15.0

canvas 合成

我們通過 toDataURL 生成一張圖。

<canvas id="canvas" width="400" height="400"></canvas>
// 獲取花布
const canvas = document.getElementById("canvas");
// 獲取畫筆
const context = canvas.getContext("2d");

// 簡(jiǎn)單繪制點(diǎn)什么
context.fillStyle = "#FFFF00";
context.fillRect(0, 0, 400, 400);

// other content ...
const dataUrl = canvas.toDataURL("image/png");

這里我們生成了 base64 的圖片數(shù)據(jù)。

按照網(wǎng)頁(yè)的下載方法,我們接下來的下載文件可以通過下面的方法來操作:

// 創(chuàng)建下載鏈接
const link = document.createElement("a");
link.href = dataUrl;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

網(wǎng)頁(yè)下載的位置因?yàn)榘踩呗?,我們只能默認(rèn)下載在瀏覽器指定的位置。我們可以通過手動(dòng)更改 - 參考 How to specify shere files are downloaded。

使用 node 下載圖片

這里我們使用 node 來將圖片文件下載在指定的位置。

下面是個(gè)簡(jiǎn)單的開啟 node 服務(wù)的代碼:

// 使用 express Web 應(yīng)用程序框架
const express = require("express");
const fs = require("fs");
const path = require("path");
const bodyParser = require("body-parser");
const app = express();
const port = 3000;

// 設(shè)置視圖引擎
app.set("view engine", "ejs");

// 設(shè)置視圖的文件位置
app.set("views", __dirname + "/views");

// 中間件解析 JSON 請(qǐng)求體
app.use(bodyParser.json({ limit: "50mb" }));

app.get("/", (req, res) => {
  // 渲染 index.ejs 模版
  res.render("index", {});
});

// 監(jiān)聽?wèi)?yīng)用程序的開啟
app.listen(port, () => {
  console.log(`App listening at http://localhost:${port}`);
});

我們?cè)?nbsp;index.ejs 模版中發(fā)起請(qǐng)求:

// 發(fā)送 dataUrl 數(shù)據(jù)到服務(wù)器
fetch("/saveImage", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ imageData: dataUrl })
})
.then((response => response.json()))
.then(data => {
  console.log(`Image saved in ${data.message}`);
})
.catch(error => {
  console.error("Error: ", error);
});

我們用 node 監(jiān)聽接口發(fā)送過來的數(shù)據(jù):

app.post("/saveImage", (req, res) => {
  // 圖片數(shù)據(jù)
  const { imageData } = req.body;
  
  // 移除數(shù)據(jù)的 URL 的前綴,根據(jù)生成的圖片的格式去操作,如果是 jpg 等更改相應(yīng)內(nèi)容
  const base64Data = imageData.replace(/^data:image\/png;base64,/, '');
  
  // 生成時(shí)間戳
  const timestamp = Date.now();
  const fileName = `${timestamp}.png`;
  
  // 指定保存的位置路勁
  const savePath = path.join(__dirname, "output", "${timestamp}", fileName);
});

  // 確保保存的路勁的目錄存在
  fs.mkdirSync(path.dirname(savePath), { recursive: true });
  
  // 寫入文件
  fs.writeFileSync(savePath, base64Data, "base64");
  
  // 返回?cái)?shù)據(jù)給到請(qǐng)求接口
  res.json({ message: `Image saved to ${savePath}` });

然后我們?cè)诼酚?nbsp;/ 頁(yè)面觸發(fā)下載之后,可以看到下載的文件內(nèi)容

使用 node 刪除圖片

在圖片保存一定的時(shí)間之后,我們就需要?jiǎng)h除,以節(jié)省空間大小。我們實(shí)現(xiàn)如下:

我們?cè)诼酚?/cleanCache 路由上操作,我們不需要在 ejs 上操作什么,一進(jìn)入路由就執(zhí)行刪除操作,所以不需要對(duì)應(yīng)的 ejs 文件。

對(duì)應(yīng)的 node 代碼如下:

app.get("/cleanCache", (req, res) => {
  // 保存下載文件的文件夾
  const outputDir = path.join(__dirname, "output");
  
  // 讀取該目錄下的所有文件和子目錄
  fs.readdir(outputDir, (err, files) => {
    if (err) {
      return res.status(500).send("Unable to scan directory: ", err);
    }
    
    files.forEach(file => {
      const filePath = path.join(outputDir, file);
      
      // 獲取文件和目錄的狀態(tài)信息
      fs.stat(filePath, (err, stats) => {
        if (err) {
          console.error("Unable to get file stats: " + err);
          return;
        }
        
        // 獲取文件或目錄的修改時(shí)間
        
        const fileMtime = stats.mtime.getTime();
        const oneMinuteAgo = Date.now() - 60 * 1000; // 這里我們假設(shè)刪除 1 分鐘前的數(shù)據(jù)
        if (fileMtime < oneMinuteAge) {
          // 如果是目錄,則遞歸刪除目錄以及文件
          if (stats.isDirectory()) {
            fs.rm(filePath, { recursive: true, force: true }, err => {
              if (err) {
                console.error("Unable to delete directory: " + err);
              } else {
                console.log("Deleted directory: " + filePath);
              }
            });
          } else {
            // 如果是文件,則直接刪除
            fs.unlink(filePath, err => {
              if (err) {
                console.error("Unable to delete file: " + err);
              } else {
                console.log("Deleted file: " + filePath);
              }
            });
          }
        }
      });
    });
    
    res.send("Clear Done!");
  });
});

我們刪除 output 文件夾下面的過期文件。我們觸發(fā) /cleanCache 路由后,此時(shí)的 output 文件夾下會(huì)為空

到此這篇關(guān)于Node保存Canvas圖片并刪除過期圖片的操作步驟的文章就介紹到這了,更多相關(guān)Node保存Canvas圖片并刪除過期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Node.js對(duì)文件進(jìn)行重命名

    利用Node.js對(duì)文件進(jìn)行重命名

    最近工作中遇到了對(duì)文件進(jìn)行重命名的需求,后通過node.js實(shí)現(xiàn)了,所以下面這篇文章主要給大家介紹了利用Node.js對(duì)文件進(jìn)行重命名的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • node.js+postman+mongodb搭建測(cè)試注冊(cè)接口的實(shí)現(xiàn)

    node.js+postman+mongodb搭建測(cè)試注冊(cè)接口的實(shí)現(xiàn)

    本文主要介紹了node.js+postman+mongodb搭建測(cè)試注冊(cè)接口的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • node.js利用mongoose獲取mongodb數(shù)據(jù)的格式化問題詳解

    node.js利用mongoose獲取mongodb數(shù)據(jù)的格式化問題詳解

    這篇文章主要給大家介紹了關(guān)于node.js利用mongoose獲取mongodb數(shù)據(jù)的格式化問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)把。
    2017-10-10
  • 使用pm2自動(dòng)化部署node項(xiàng)目的方法步驟

    使用pm2自動(dòng)化部署node項(xiàng)目的方法步驟

    這篇文章主要介紹了使用pm2自動(dòng)化部署node項(xiàng)目的方法步驟,pm2是一個(gè)進(jìn)程管理工具,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 基于Node.js的http模塊搭建HTTP服務(wù)器

    基于Node.js的http模塊搭建HTTP服務(wù)器

    這篇文章主要為大家介紹了基于Node.js的http模塊來搭建HTTP服務(wù)器的示例過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • npm報(bào)版本與node.js不匹配問題及解決

    npm報(bào)版本與node.js不匹配問題及解決

    這篇文章主要介紹了npm報(bào)版本與node.js不匹配問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Node.js實(shí)現(xiàn)發(fā)送郵件功能

    Node.js實(shí)現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了Node.js實(shí)現(xiàn)發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 更新npm項(xiàng)目依賴的實(shí)現(xiàn)方法

    更新npm項(xiàng)目依賴的實(shí)現(xiàn)方法

    依賴管理是其中一個(gè)至關(guān)重要的環(huán)節(jié),本文主要介紹了更新npm項(xiàng)目依賴的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • nodejs基礎(chǔ)應(yīng)用

    nodejs基礎(chǔ)應(yīng)用

    本文主要介紹了nodejs的基礎(chǔ)應(yīng)用。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析

    Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析

    這篇文章主要為大家介紹了Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評(píng)論

鄂托克前旗| 琼结县| 和林格尔县| 桐梓县| 珲春市| 新田县| 绍兴市| 永城市| 正定县| 彩票| 凤庆县| 秦安县| 涞水县| 历史| 永定县| 大悟县| 莲花县| 高雄市| 临泽县| 苏尼特左旗| 定边县| 宁德市| 湖州市| 晋中市| 沁阳市| 布尔津县| 五指山市| 宁城县| 牙克石市| 安国市| 灵石县| 镇赉县| 西城区| 淮滨县| 泰宁县| 西乌珠穆沁旗| 峨眉山市| 茶陵县| 兴化市| 滁州市| 临沂市|