2013-08-28 25 views
4

編輯:===爲了清晰起見,我正在尋找上傳文件到服務器,無論是一張圖片或一點點.txt ===nodejs和上傳文件時出現錯誤,「無法讀取屬性undefined」

我環顧了類似的其他常見問題,但一直無法緩解我的問題。

其目的是創建文件上傳功能。前端看起來像這樣:

<div class="holdingDiv"> 
    <form action="/file-upload" name="upload" class="dropzone dz-clickable" id="dropzoneArea" enctype="multipart/form-data"> 
     <input style="display:none" type="file" name="thumbnail[thumbs]" />      
     <button id="uploadSubmitter" class="btn btn-primary btn-large" type="submit">Finished</button> 
    </form> 
</div> 

我有表單類型和所有爵士樂設置。

處理該POST請求server.js看起來是這樣的:

app.post('/file-upload', imports.upload); 

請注意,我也有以下要求:

//needed for forms 
app.use(express.bodyParser()); 

藏漢在必要時調用imports.upload出口的funcionality功能。

的exports.upload功能看起來是這樣的:

exports.upload = function (req, res) { 
    console.log('FIRST TEST: ' + JSON.stringify(req.files)); 

    console.log('second TEST: ' +req.files.thumbnail.thumbs.name); 
    //get the file extenstion: 
    //console.log('size' + req.files.thumbnail.size); 
    // console.log('test this: ' + req.files.thumbnail.name); 
    // var fileExtension = JSON.stringify(req.files); 

    //console.log('Im getting this file type: '+ fileExtension.name); 
    // console.log('this: '+req.files.upload); 

    //fs.readFile(req.files.uploadFiles.path, function (err, data) { 
    // // ... 
    // var newPath = __dirname + "/uploads/"+uploadFiles.name; 
    // fs.writeFile(newPath, data, function (err) { 
    //  res.redirect("back"); 
    // }); 
    //}); 
} 

很多東西被註釋掉了,因爲我是在嘗試不同的方法來得到它的工作。我可以用JSON Stringify作爲一個整體對象來調用它,但是我希望它可以作爲一個對象,我可以深入並從中獲取信息,例如,我想通過將其名稱拆分爲'。'來知道文件的類型:

req.files.thumbnail.thumbs.name 

但是當我試試這個(甚至JSON Stringyfied)它說它是未定義的。

東西我曾嘗試:

移動整個功能app.js(還有就是作品使用req.body小的登錄功能,我以爲這可能修復它

使用JSON Stringyfy來。獲得在對象的特定部分。(返回undefined)

砸我的頭靠在鍵盤。(返回未定義)

改變表單的enctype到幾個不同的東西,但大多數對這裏的答案聲明形式-data是文件上傳的最佳環境類型。

任何幫助和指針,爲什麼發生這將是非常感謝!

+1

要上傳文件到srever。這是正確的? – Konza

+0

是的,想上傳到服務器 – Jay

+0

我只能在添加method =「post」後才能發佈表單。它是爲你發佈嗎? – user568109

回答

2

我不明白你爲什麼保持輸入名稱爲「thumbnails [thumb]」。 您必須將method =「POST」添加到您的表單中。

我改名字屬性爲「theFile」這裏是HTML

<div class="holdingDiv"> 
    <form action="/file-upload" name="upload" class="dropzone dz-clickable" id="dropzoneArea" enctype="multipart/form-data" method = "post"> 
    <input type="file" name="theFile" />      
    <button id="uploadSubmitter" class="btn btn-primary btn-large" type="submit">Finished</button> 
    </form> 
</div> 

現在您的節點JS服務器做到這一點。

app.post('/file-upload',function(req,res){ 
    console.log('FIRST TEST: ' + JSON.stringify(req.files)); 
    console.log('second TEST: ' +req.files.theFile.name); 
    fs.readFile(req.files.theFile.path, function (err, data) { 
     var newPath = "/home/path/to/your/directory/"+req.files.theFile.name; 
     fs.writeFile(newPath, data, function (err) { 
      res.send("hi"); 
     }); 
    }); 
}); 

req.files是一個json,它提供了上傳請求的詳細信息。

希望這會有所幫助。

+1

這並不工作,我得到了以下錯誤: (控制檯登錄第一次測試都通過與有關文件的所有信息) 第二個錯誤說「類型錯誤:無法讀取屬性‘的未定義 我評論的名字’出fs.readfile,我只想抓住現在的文件信息 – Jay

+1

老兄,它在我的系統中完美工作..你的錯誤是什麼。 – Konza

+1

不要忘記更改/ home/path/to/your/directory /到任何有效的目錄。 :) – Konza

相關問題