node.js流文件上传为文件夹构建

时间:2013-12-30 19:42:55

标签: node.js file-upload express stream

我正在使用node和express为我的网站做一点CMS。 我想使用一个表格定位多个文件,并将这些文件存储到public / image /:foldername。

所以我创建了一个表单,它有两个输入: 1.event - 这是事件名称 2.file - obvisuly输入的文件

现在当管理员登录并看到此表单时,他正在输入他的事件名称,例如“ “生日” 以及与之关联的图像文件。

最后我希望strcure是这样的: 上市/  /图片   /生日    此搜索    图像2    图像3    图像4

这是HTML:

<div class="panel panel-primary spacer3">
    <div class="row">
        {{#if error}}
        <div data-alert class="alert-box">
           {{error}}
            <a href="#" class="close">&times;</a>
        </div>
        {{/if}}
        <div class="small-4 medium-4 large-4 columns text-center">
            <h1>פאנל ניהול</h1>
        </div>
        <form method="POST" action="/login">
            <div class="row">
                <div class="large-12 columns rtl">
                  <label>שם משתמש</label>
                  <input type="text" name="username" placeholder="שם משתמש" />
                </div>
            </div>
            <div class="row">
                <div class="large-12 columns rtl">
                  <label>סיסמא</label>
                  <input type="password" name="password" placeholder="סיסמא" />
                </div>
            </div>
            <div class="row">
                <div class="large-12 columns">
                  <input class="button [radius round]" type="submit" value="התחבר" />
                </div>
            </div>
        </form>
    </div>
</div>

这是路线:

app.post('/upload',routes.photos)

exports.photos = function(req, res){
    console.log("body " + req.body);
    console.log("event " + req.body.event);
    console.log("files " + req.body.files);
    if (req.body && req.body.files && req.body.event){
        //event i th the name of the event
        //files is the files that needs to be uploaded
        var file = fs.createReadStream(req.body.files);
        var newfile = fs.createWriteStream('./public/img/images');
        file.pipe(newfile);
    }
    else{
        console.log("none")
    }
};

读取流和写入流不起作用,我不知道如何制作这个结构。

2 个答案:

答案 0 :(得分:2)

应该是

<form method="POST" action="/login" enctype="multipart/form-data">

var file = fs.createReadStream(req.body.files);

应该是

var file = fs.createReadStream(req.files.formName.path);

formName是

<input type='file' name='formName' />

答案 1 :(得分:0)

这是iv做了什么: 从npm安装了mkdirp mkdirp = require('mkdirp'); 这将创建一个新文件夹。

和readFile将读取这些图像。

exports.photos = function(req, res){
    console.log(req.body);
    console.log(req.files)
    console.log(req.files.img_file);

    console.log("Uploading File");

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

      var newPath = __dirname + "./public/img/albums";
      fs.writeFile(newPath, data, function (err) {
        res.redirect("back");
      });
    });

};

//Post request to create new album
exports.createAlbum = function(req, res){
    if (req.body && req.body.album)
        var album_name = req.body.album;
    else
        var album_name = 'unknown_album-' + (parseInt(Math.random() * 5) + 1);

    console.log(__dirname);
    mkdirp('./public/img/albums/' + album_name, function (err) {
        if (err) 
            console.error(err);
        else 
        {
            console.log('Folder created.');
            res.render('admin/panel', {
                title: 'אדמין',
                message: 'תיקייה נפתחה בהצלחה',
                album: album_name
            });
        }
    });
};