2014-02-21 5 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> 

Я использую паруса Орк (не уверен, если это делает различие)

Edit: Полная форма

<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

У меня есть «чтение файла» уже в файле module.exports, называемом fileCreate. Когда я делаю 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. Вы устанавливаете «enctype = 'multipart/form-data» в своей форме? И почему вы используете fs.readFile/fs.writeFile, когда можете использовать fs.rename (origPath, newPath, function ....)? – ZioBudda

+0

ok Я добавил свою форму в качестве редактирования. Я не представил enctype. я попробую это и дам вам знать –

0

Я столкнулся с той же проблемой. Паруса не распознали req.files (undefined). Таким образом, ваша проблема кажется очень связанной с парусами. Ниже была решена моя проблема (особенно документация Skipper).

В 0.9 версии парусов, вы можете раскомментировать эту строку в конфигурационном файле/express.js: // bodyParser:. Требуют ('экспресс') bodyParser,

В версии 0.10, использование REQ .file вместо req.files. См. Их бета-документацию по загрузке файлов: http://beta.sailsjs.org/#/documentation/reference/Upgrading

Обязательно ознакомьтесь с документацией Skipper: https://github.com/balderdashy/skipper. Скорее всего, ваша версия Sails будет использовать это для обработки файлов.

Смежные вопросы