這篇文章主要介紹了Node.js調(diào)用fs.renameSync報(bào)錯(cuò)怎么辦,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)公司 - 綿陽(yáng)電信機(jī)房機(jī)柜租用,四川服務(wù)器租用,成都服務(wù)器租用,四川網(wǎng)通托管,綿陽(yáng)服務(wù)器托管,德陽(yáng)服務(wù)器托管,遂寧服務(wù)器托管,綿陽(yáng)服務(wù)器托管,四川云主機(jī),成都云主機(jī),西南云主機(jī),綿陽(yáng)電信機(jī)房機(jī)柜租用,西南服務(wù)器托管,四川/成都大帶寬,服務(wù)器機(jī)柜,四川老牌IDC服務(wù)商
在寫(xiě)一個(gè)文件上傳的功能時(shí)候,調(diào)用fs.renameSync方法錯(cuò)誤
出錯(cuò) 代碼所在如下:
function upload(response,request){ console.log("upload called"); var form = new formidable.IncomingForm(); console.log("about to parse"); form.parse(request, function(error, fields, files) { console.log("parsing done"); fs.renameSync(files.upload.path, "./tmp/test.jpg"); response.writeHead(200, {"Content-Type": "text/html"}); response.write("received image:<br/>"); response.write("<img src='/show' />"); response.end(); }); }
大致分析后,預(yù)計(jì)是因?yàn)?跨磁盤分區(qū)移動(dòng) 或操作文件會(huì)有權(quán)限問(wèn)題。
下面提供兩種解決辦法:
方法一:
主要利用fs的createReadStream、createWriteSream和unlinkSync方法
具體代碼如下:
function upload(response,request){ console.log("upload called"); var form = new formidable.IncomingForm(); console.log("about to parse"); form.parse(request, function(error, fields, files) { console.log("parsing done"); // fs.renameSync(files.upload.path, "./tmp/test.jpg"); var readStream=fs.createReadStream(files.upload.path); var writeStream=fs.createWriteStream("./tmp/test.jpg"); readStream.pipe(writeStream); readStream.on('end',function(){ fs.unlinkSync(files.upload.path); }); response.writeHead(200, {"Content-Type": "text/html"}); response.write("received image:<br/>"); response.write("<img src='/show' />"); response.end(); }); }
PS:我用的node版本是0.10.69,如果使用的是0.6以下的版本,可以使用util.pump
相應(yīng)代碼只需將上面的代碼中readStream.on處改成:(注意引入util模塊)
util.pump(readStream,writeStream, function() { fs.unlinkSync('files.upload.path'); });
方法二:
這種就簡(jiǎn)潔很多了
添加一個(gè) form.uploadDir='tmp' 即可(寫(xiě)一個(gè)臨時(shí)路徑)
function upload(response,request){ console.log("upload called"); var form = new formidable.IncomingForm(); form.uploadDir='tmp'; console.log("about to parse"); form.parse(request, function(error, fields, files) { console.log("parsing done"); fs.renameSync(files.upload.path, "./tmp/test.jpg"); response.writeHead(, {"Content-Type": "text/html"}); response.write("received image:<br/>"); response.write("<img src='/show' />"); response.end(); }); }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Node.js調(diào)用fs.renameSync報(bào)錯(cuò)怎么辦”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
分享文章:Node.js調(diào)用fs.renameSync報(bào)錯(cuò)怎么辦
地址分享:http://vcdvsql.cn/article44/pehsee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站排名、服務(wù)器托管、虛擬主機(jī)、電子商務(wù)、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)