[node.js] fs.renameSync()報錯

来源:https://www.cnblogs.com/readerman/archive/2019/01/18/10286971.html
-Advertisement-
Play Games

初學node.js,跟著node入門,操作了一遍。在最後一步,上傳圖片並顯示時遇到報錯 根據報錯信息,查找到相應的代碼, 首先想到的是代碼中是相對路徑,導致不能查找到文件所在的位置,於是將路徑補全 還是同樣的報錯 仔細觀察後發現在路徑名中可能存在的左右反斜杠的問題。即在windows中路徑名間隔符為 ...



  初學node.js,跟著node入門,操作了一遍。在最後一步,上傳圖片並顯示時遇到報錯

 fs.js:115
    throw err;
    ^
    Error: ENOENT: no such file or directory, rename 'C:\Users\catcher\AppData\Local\Temp\upload_16f7bede547980c767e1e031a3720f67' -> '/tmp/test.png'
    at Object.renameSync (fs.js:594:3)
    at C:\IdeaProjects\nodejs\requestHandlers.js:34:8
    at IncomingForm.<anonymous> (C:\IdeaProjects\nodejs\node_modules\formidable\lib\incoming_form.js:107:9)
    at IncomingForm.emit (events.js:182:13)
    at IncomingForm._maybeEnd (C:\IdeaProjects\nodejs\node_modules\formidable\lib\incoming_form.js:557:8)
    at C:\IdeaProjects\nodejs\node_modules\formidable\lib\incoming_form.js:238:12
    at WriteStream.<anonymous> (C:\IdeaProjects\nodejs\node_modules\formidable\lib\file.js:79:5)
    at Object.onceWrapper (events.js:273:13)
    at WriteStream.emit (events.js:182:13)
    at finishMaybe (_stream_writable.js:641:14)

    
根據報錯信息,查找到相應的代碼,

fs.renameSync(files.upload.path, "/tmp/test.png");


首先想到的是代碼中是相對路徑,導致不能查找到文件所在的位置,於是將路徑補全

fs.renameSync(files.upload.path,"C:/IdeaProjects/nodejs/tmp/test.png");


還是同樣的報錯

Error: ENOENT: no such file or directory, rename 'C:\Users\catcher\AppData\Local\Temp\upload_cb107f6decde929aff2b86f5bfb3a330' -> 'C:/IdeaProjects/nodejs/tmp/test.png'

    
仔細觀察後發現在路徑名中可能存在的左右反斜杠的問題。即在windows中路徑名間隔符為右反斜杠'\',而在Linux和mac os中都是左反斜杠'/'。於是修改代碼為

fs.renameSync(files.upload.path,"C:\IdeaProjects\nodejs\tmp\test.png");

依然報錯

Error: ENOENT: no such file or directory, rename 'C:\Users\catcher\AppData\Local\Temp\upload_5b3fdf35fbb17a8579b5c2245f070543' -> 'C:IdeaProjects  odejs   mp      est.png'

    
問題在於右反斜杠是轉義字元,所以路徑名稱應該為

fs.renameSync(files.upload.path,"C:\\IdeaProjects\\nodejs\\tmp\\test.png");

遺憾的是依然報錯,

Error: ENOENT: no such file or directory, rename 'C:\Users\catcher\AppData\Local\Temp\upload_d3cceb8f8c01ae2a796d1f356e91ae0f' -> 'C:\IdeaProjects\nodejs\tmp\test.png'

不過顯示的路徑算是對了。
再次閱讀報錯信息後 no such file or directory ,會不會是文件夾tmp需要手動創建?(沒錯,我以為該方法會自動創建不存在的文件夾,所以在一開始我還嘗試通過everything去查找tmp文件夾)自己創建文件夾tmp之後,成功上傳圖片並預覽。
而之前反覆改動的文件路徑,以下三種方式親測可用:

fs.renameSync(files.upload.path, "./tmp/test.png"); //註意點號

fs.renameSync(files.upload.path, "C:\\IdeaProjects\\nodejs\\tmp\\test.png");

fs.renameSync(files.upload.path, "C:/IdeaProjects/nodejs/tmp/test.png");

 


附:在網上查詢資料,提到fs.renameSync() 不允許跨分區移動文件。解決辦法如下:

https://stackoverflow.com/questions/4568689/how-do-i-move-file-a-to-a-different-partition-or-device-in-node-js
   

 1  var fs = require('fs');
 2  //var util = require('util');
 3  var is = fs.createReadStream('source_file');
 4  var os = fs.createWriteStream('destination_file');
 5  is.pipe(os);
 6  is.on('end',function() {
 7     fs.unlinkSync('source_file');
 8  });
 9  /* node.js 0.6 and earlier you can use util.pump:
10  util.pump(is, os, function() {
11      fs.unlinkSync('source_file');
12  });
13  */

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 此內容是個人學習筆記,以便日後翻閱。 非教程,如有錯誤還請指出 Webpack 打包文件 支持JS模塊化 模式: production(0配置預設), development(生產環境) 更詳細的請前往 webpack官網 安裝 npm i webpack webpack cli D 執行 w ...
  • 寫這篇文章之前,關於ubuntu14.04(Trusty)預設安裝的NodeJS版本是0.10.25百思不解(什麼鬼,哪一年的NodeJS) 寫這篇文章之時,NodeJS的LTS版本號都已經10.15.0,當然Ubuntu在2018年也都發行ubuntu18.04(我還沒打算用) 系統我可以用4年前... ...
  • 一個簡單的代碼段,用於跟蹤網站上的網頁瀏覽量,而無需添加外部庫。 也適用於使用react和vue.js等單頁應用程式。 Before Google Tag Manager + Analytics = 73kB After Snippet = 1.5kB ...
  • 101-110章總結 101. dom查詢的剩餘方法 我是第一個box1我是box1中的div 我是box1中的div 我是box1中的div 我是box1中的div 102. dom增刪改 你喜歡哪個城市? 北... ...
  • js獲取頁面完整地址: window.location.href; var s =" https://ejym.baidu.com"; var h = s.split(".")[0]; var a = h.split("//")[1]; alert(a); a的結果是:ejym ...
  • arguments 是一個類似數組的對象, 對應於傳遞給函數的參數。 語法 arguments 描述 arguments對象是所有函數中可用的局部變數。你可以使用arguments對象在函數中引用函數的參數。此對象包含傳遞給函數的每個參數的條目,第一個條目的索引從0開始。例如,如果一個函數傳遞了三個 ...
  • 1、在springboto項目中使用thymeleaf標簽,必須先添加依賴,如下。 2、在application.properties中配置一些常用的thymeleaf,如下。 可參考博客:https://blog.csdn.net/ice_lemon_g/article/details/73609 ...
  • 錯誤信息:Exception processing template “/view/df”: Error resolving template “/view/df”, template might not exist or might not be accessible by any of the ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...