2014-02-21 78 views
0

我環顧四周,看着如何使用node/express上傳文件的各種教程。我覺得我在HTML或JQuery方面做錯了什麼。 我使用以下鏈接作爲http://howtonode.org/really-simple-file-uploads如何使用節點js上傳文件?

但是我得到的錯誤:

TypeError: Cannot read property 'fileUpload' of undefined at module.exports.fileCreate 

這裏是我下面的代碼:

uploadcontroller.js

fs.readFile(req.files.fileUpload.path, function (err, data) { 
    var newPath = __dirname + "/uploads/" + imgString; 
    fs.writeFile(newPath, data, function (err) { 
    }); 
}); 

HTML片段

<div class="form-group"> 
    <label for="fileUpload">Upload File</label> 
    <input type="file" name="fileUpload" id="fileUpload"> 
</div> 

我使用帆船框架ORK(不知道如果讓差)

編輯:填寫表格

<form role="form" class="uploadFileForm"> 
    <div class="form-group"> 
     <label for="fileTitleInput">Title</label> 
     <input type="text" name="formTitleInput" id="formTitleInput"> 
    </div> 
    <div class="form-group"> 
     <label for="fileDescriptionInput">Description</label> 
     <textarea class="form-control" rows="4" id="fileDescriptionInput"></textarea> 
    </div> 
<div class="form-group"> 
     <label for="fileUpload">Upload File</label> 
     <input type="file" name="fileUpload" id="fileUpload"> 
    </div> 
    <button type="submit" class="btn btn-default" id="file-submit-btn">Publish to Web</button> 
</form> 

回答

1
app.post('/upload', function(req, res) { 

    fs.readFile(req.files.image.path, function (err, data) { 

     var imageName = req.files.image.name 

     /// If there's an error 
     if(!imageName){ 

      console.log("There was an error") 
      res.redirect("/"); 
      res.end(); 

     } else { 

      var newPath = __dirname + "/uploads/fullsize/" + imageName; 

      /// write file to uploads/fullsize folder 
      fs.writeFile(newPath, data, function (err) { 

      /// let's see it 
      res.redirect("/uploads/fullsize/" + imageName); 

      }); 
     } 
    }); 
}); 
+0

我已經在一個名爲fileCreate的module.exports中有「文件讀取」。當我做一個app.post在那裏我得到一個錯誤,說「應用程序沒有定義」 –

0
app.post('/', function(req, res) { 
    console.log(req.files); 
    fs.readFile(req.files.displayImage.path, function (err, data) { 

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

僅供參考, 「執行console.log(req.files)」 將包含的東西像這樣:

{ displayImage: 
    { domain: null, 
    _events: null, 
    _maxListeners: 10, 
    size: 84654, 
    path: 'E:\\Users\\xyz\\AppData\\Local\\Temp\\90020831e2b84acb2d4851e4d4 
2d77d5', 
    name: 'ccc - 1.jpg', 
    type: 'image/jpeg', 
    hash: false, 
    lastModifiedDate: Wed May 22 2013 07:47:39 GMT+0530 (India Standard Time), 
    _writeStream: 
     { domain: null, 
     _events: null, 
     _maxListeners: 10, 
     path: 'E:\\Users\\xyz\\AppData\\Local\\Temp\\90020831e2b84acb2d4851e 
4d42d77d5', 
     fd: 4, 
     writable: false, 
     flags: 'w', 
     encoding: 'binary', 
     mode: 438, 
     bytesWritten: 84654, 
     busy: false, 
     _queue: [], 
     _open: [Function], 
     drainable: true }, 
    length: [Getter], 
    filename: [Getter], 
    mime: [Getter] } 
} 
+0

當我做console.log(req.files),它返回undefined –

+0

@DavidMckee你可以通過你的完整的HTML FORM嗎?我認爲在定義FORM時你有一個錯誤。你在表單中設置了「enctype ='multipart/form-data'」嗎?當你可以使用fs.rename(origPath,newPath,function ....)時,爲什麼要使用fs.readFile/fs.writeFile? – ZioBudda

+0

好吧,我添加了我的表單作爲編輯。我沒有提交enctype。我會嘗試並讓你知道 –

0

我遇到了同樣的問題。 Sails無法識別req.files(未定義)。所以你的問題看起來與Sails很相關。以下解決了我的問題(特別是Skipper文檔)。

在0.9版本帆,你可以取消在config/express.js文件這一行: // bodyParser:需要( '表達')bodyParser,

在0.10版本中,使用REQ .file而不是req.files。 查看他們的文件上傳測試文檔:http://beta.sailsjs.org/#/documentation/reference/Upgrading

請務必查看Skipper文檔以及:https://github.com/balderdashy/skipper。很可能您的Sails版本將使用它來處理文件上傳。