2012-12-24 42 views
4

其實我來跨兩個問題,使用強大的與快遞時,如何改變上傳路徑在node.js中

首先,如何改變上傳路徑

我的文件夾結構是這樣的:

|__app.js 
|__upload 

我的節點代碼是在app.js然後從其引導, 所以我要上傳圖片上傳到上傳文件夾,我改變路徑:

var form = new formidable.IncomingForm; 
form.uploadDir = "./upload"; 

它似乎上傳成功,但我不知道文件去哪裏, 它不在上傳文件夾中。

那麼什麼是正確的路徑名?

第二個問題是

如果我不改變它,它可以正確上傳到C:/Users/ADMINI~1/AppData/Local/Temp 但它會沒有foramt改名,

所以我怎樣才能上傳格式和我自己改名?

第三個問題是

我也綁定處理程序的process事件, 像

form.on('progress', function(bytesReceived, bytesExpected) { 
    console.log(bytesReceived + ' ' + bytesExpected); 
}); 

但似乎不起作用,當上傳日誌什麼。爲什麼?我錯過了什麼?

這裏是我的所有代碼:

你要告訴您的應用程序,你不想讓 bodyParser來處理文件上傳的
app.post('/upload', function (req, res) { 
    var form = new formidable.IncomingForm; 
    // form.uploadDir = "./upload"; 
    console.log(form.uploadDir); 

    form.parse(req, function(err, fields, files){ 
     if (err) return res.end('You found error'); 
     console.log(files.image); 
    }); 

    form.on('progress', function(bytesReceived, bytesExpected) { 
     console.log(bytesReceived + ' ' + bytesExpected); 
    }); 

    form.on('error', function(err) { 
     res.writeHead(200, {'content-type': 'text/plain'}); 
     res.end('error:\n\n'+util.inspect(err)); 
    }); 

    // res.end('Done'); 
    res.send("well done"); 

    return; 
}) 

回答

7

第一。

app.use(express.bodyParser()); 

equivalent

app.use(express.json()); 
app.use(express.urlencoded()); 
app.use(express.multipart()); 

取出最後一行來處理文件上傳自己。在初始化表單時添加一些自定義選項

var form = new formidable.IncomingForm({ 
    uploadDir: __dirname + '/tmp', // don't forget the __dirname here 
    keepExtensions: true 
}); 

現在,您的代碼應該可以工作。