簡體   English   中英

Express.js文件上傳

[英]Express.js File Uploads

我是新來表達的人,在使用express.bodyParser上傳文件時遇到問題。 bodyParser可與req.body一起正常工作,因此似乎已正確設置。 我正在運行節點0.6.17並表示2.5.8。 每當我嘗試訪問req.files時,它都是未定義的。 有誰知道這個問題的原因是什么?

來自app.js:

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.cookieParser());
  app.use(express.session({secret: "string" }));
  app.use(flash());
  app.use( express.bodyParser() );
  app.use(expressValidator);
  app.use(express.methodOverride());
  app.use(express.static(__dirname + '/public'));
  app.use(app.router);
});

來自index.js

app.get('/product/add', function(req, res) {
    res.render("add_products", {
      title: "Add Products",
            email: req.session.email || 'Sign In/Up',
      error: req.flash('error') || []
    });
});

app.post('/product/add', function(req, res) {
console.log(req.files) // prints undefined
var errors = generate_error_messages(req, 'product/add') || [];
if (errors.length > 0) {
  var errors_string_array = messages(errors);
  req.flash('error', errors_string_array);
  res.redirect('/product/add');
} else {
  ProductDatabase.save(req, function(err, docs) {
    res.redirect('/');
  });
}
});

add_products.jade

  form(class='form-horizontal', method='post', action='/product/add')
    fieldset
      .control-group
        label(class='control-label', for="title") Product Title
        .controls
          input(type="text", class="input-xlarge", name="title")
      .control-group
        label(class='control-label', for="description") Description
        .controls
          textarea(class="input-xlarge", name="description", rows="5")
      .control-group
        label(class='control-label', for='auction_length') Auction Length
        .controls
          select(name='auction_length')
            option 1 day
            option 2 days
            option 5 days
      .control-group
        label(class='control-label', for="fileInput") Upload Image
        .controls
          input(class='input-file', name='fileInput', type='file')
      .form-actions
        input(type="submit", class="btn btn-primary") Sell Product
        a.btn(href='/') Cancel

連接形式怎么樣? 根據我的經驗,這種方法效果更好。

您在add_products.jade文件中有問題。

第一行表單標簽應具有enctype屬性。

形式(類='水平形式',方法='張貼',動作='/產品/添加',enctype ='多部分/形式數據')

發布文件,您應該具有該屬性。

對於簡單的上傳,您只需要以下配置:

app.use(express.static(__dirname + '/upload'));
app.use(express.bodyParser({uploadDir:__dirname + '/upload'}));

在玉模板中:

form(method='post', action='/upload', enctype='multipart/form-data')
    input(name='file', type='file')
    input(type='submit')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM