node.js移动一堆文件

时间:2014-01-01 13:19:47

标签: node.js file-upload

我已经制作了一个文件上传表格,我已经设置了多个选项,所以我试图上传一堆文件,然后根据客户端设置的专辑名称移动它们, 这是iv做了什么:

if (req.body && req.body.album){
        var album_name = req.body.album;
    }
    else{
        //need to change to time instead of random album
        var album_name = 'unknown_album-' + (parseInt(Math.random() * 5) + 1);
    }
    //File name
    var file_name = null;

    switch(req.files.img_file.type){
        case 'image/png':
            file_name = new Date().getTime() + '.png';
            break;
        case 'image/jpeg':
            file_name = new Date().getTime() + '.jpeg';
            break;
        default:
            res.render('admin/panel', {
                title: 'אדמין',
                message: 'קובץ לא תקין'
            });
            break;
    }

    mkdirp('./public/img/albums/' + album_name, function (err) {
        if (err) 
            console.error(err);
        else
        {
            _.each(req.files.img_file,function(val,index){
            console.log(val.path + " " + index);
//gives the file path so i can read it
                fs.readFile(val.path, function (err, data) {
                    if (err){
                        console.log("fs " + err);
                    }
//so until here everything works fine, the files are uploaded to the "/uploads" directory, now im trying to move them to the correct album, the destiation is : public/img/albums/:album_name/:all_images here
                    mv(val.path, './public/img/albums/' + album_name + '/' + val.path, function(err) {
                        if (err){
                            console.log("mv " + err);
                        }
                        else{
                            res.render('admin/panel', {
                                title: 'אדמין',
                                message: 'קובץ עלה בהצלחה'
                            });
                            res.redirect('/admin');
                        }
                    });
                });
            });
        }
    });

mv模块抛出错误重命名“c:/work/xxx/xx/uploads/val.path.png

2 个答案:

答案 0 :(得分:0)

它是文件访问错误。您可以输出一些文件名,但请查看该NPM模块如何处理文件,并确保正确命名文件和路径。那么它应该没问题。

答案 1 :(得分:0)

我使用了读写流并删除了“mv”模块

if (req.body && req.body.album){
        var album_name = req.body.album;
    }
    else{
        //need to change to time instead of random album
        var album_name = 'unknown_album-' + (parseInt(Math.random() * 5) + 1);
    }

    //File name
   if (req.files.img_file.length > 1)
   {
    var Counter = 0;
        _.each(req.files.img_file,function(val,index){
            var file_name = null;
            switch(val.type){
                case 'image/png':
                    file_name = new Date().getTime() + '.png';
                    break;
                case 'image/jpeg':
                    file_name = new Date().getTime() + '.jpeg';
                    break;
            }

            mkdirp('./public/img/albums/' + album_name, function (err) {
                if (err) 
                    console.error(err);

                var source = fs.createReadStream(val.path);
                var dest = fs.createWriteStream('./public/img/albums/' + album_name + '/' + val.name);

                source.pipe(dest);
                source.on('end', function() {
                    console.log('end...');
                    Counter++;
                        console.log(Counter);
                        console.log(req.files.img_file.length);
                        if (Counter == req.files.img_file.length){
                            res.redirect('/admin');
                            res.render('admin/panel', {
                                title: 'אדמין',
                                message: 'קובץ עלה בהצלחה',
                                albums: albums
                            }); //eo res render     
                        }
                });
                source.on('error', function(err) { console.log('error'); });

            });// eo mkdir
        }); // eo _each
   }