node 上傳文件 路徑 重命名等問題


最近在學習node,想做一個簡單的網站。首先想到的是上傳文件的功能,查了下,發現有一個formidable模塊,操作方便,便拿來嘗試了一下,結果很糾結。

下載安裝的就不用說了,用npm即可。說一下,自己遇到的問題吧,mark一下,防止再犯。

當然,使用的例子也是最廣泛的,即官網上的那個,懶,就不在此貼上了。。。。還有,我用的是html是jade

首先是沒有給上傳文件的input標簽添加name屬性,導致它的files域為空,從正常的結果來看,files是以file的name為對象的集合。

還有需要注意的是res.writeHead(200,{'content-type':'text/plain;charset=utf-8'});,否則返回中文等顯示亂碼,切記中中間的是分號(綠色),html菜鳥飄過。。。

 

還有就是上傳路徑的指定。如果沒有指定路徑的話,文件會被上傳到電腦默認的臨時文件夾下面(我的在c:/user/admin/appdata/local/temp下)。起初,我設定的路徑入下:

  form.uploadDir = "/temp";

這個temp是需要先在項目中創建好的。

PS:名字起得太有爭議了,和系統文件夾名字重名了,不過也讓我了解多了些問題本質,\(^o^)/~

在上圖可以看到它的path顯示,在我的電腦上找,原來是被存放到系統盤C:\TEMP。本來認為的是文件會被存入到項目根目錄下的temp文件夾中,卻忽略了/temp是根目錄的表示。。。於是,添加一個"."來表示當前目錄,也就是項目的路徑。form.uploadDir = "./temp";果然,在項目的temp下,真的出現了上傳文件,可惜名字無法辨別。。。雖然path顯示的和以前的差不多,不過此temp非彼temp。。。我們可以看到,前者前面帶有“\\”表示根目錄即絕對路徑,后者以“temp”開始,表示相對路徑。

 

下面便是想改個名字,以方便以后對文件進行操作。

改名字的話就要用到fs模塊了,對文件進行操作嘛。

var fs = require('fs')

在相應的函數里面加上下面這句:

fs.renameSync(files.upload.path,"change.txt");

首先,我是不清楚它的原理,大概的意思是猜它將重命名上傳路徑上文件的名字,我想將文件名稱改為change.txt。結果呢,文件是被重命名了,不過它卻出現在項目的根目錄下面,不明白。。。

返回的信息也是顯示如上圖的信息,path還是temp加上一長串,這表示,我錯了。

再次嘗試,fs.renameSync(files.upload.path,"./temp/change.txt");其實,這我也該想到了,前一個參數是文件名稱的全稱包含它的路徑,所以我們改的話也是要加上它的目標路徑的(相對路徑,不然又要到系統里的temp找了),而不只是它的名字。本次的結果是正確的,在項目的temp下,出現change.txt文件,但是返回的信息還是temp加一個長串字符,這樣,我們也該知道,這是它原生態的名字,而不是我們改過后的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM