1

アップロードされた画像を nodejs アプリケーションに特定の命名スキームでシリアルに保存したいと考えています。

最初の画像をアップロードするときに、名前を 1.png に変更して保存する必要があるとします。後続のものについては、アップロード時の名前に関係なく、2.png、3.png、... として保存されます。

私はこれを簡単に行うことができます。ただし、画像のアップロードが完了する前に、名前を変更するための非同期コードが実行されています。

これに関するいくつかの提案と助けが必要です。

app.post('/projects/:uid/:qid', function (req, res) {
    try{

        var _uid = req.param("uid");
        var _q = req.param("qid");  
        var _path = __dirname + '/public/projects/' + _uid + '/'+_q;

        //console.log("projects/images uid - %s path - %s",_uid,_path);

        mkdirp(_path, function (err) {
            if (err){ 
                console.error(err);
                res.json({status:"NOT OK - Failed"});
            }
            else {  
                var form = new formidable.IncomingForm();

                form.uploadDir = _path;
                form.keepExtensions = true;
                form.type = 'multipart';
                form.multiples = true;

                var img_number = 0;

                form.on('fileBegin', function(name, file) {
                    //console.log("file uploading begin -", name,file);
                    file.path = form.uploadDir +'/'+ file.name;
                    //console.log(file.path);
                    img_number++;
                });

                form.on('error', function(err) {
                    console.log("file Upload Error - ", err);
                    res.json({status:"ERROR"});
                });

                form.on('end', function() {
                    res.json({status:"OK" , number_of_images: img_number});
                });

                form.parse(req, function(err, fields, files) {

                });
            }
        });
    }
    catch(e){console.log("IMAGE UPLOAD FAILURE- ",e);}
});
4

1 に答える 1

0

答えを見つけました。

ドットで名前を変更するform.parse()のがコツです。

form.parse(req, function(err, fields, files) {
                    var img_name = randomInt(0,100000).toString();
                    fs.rename(files.upload.path, _path +'/'+ img_name + '.png', function (error) {
                        if (error) {
                            fs.unlink(_path +'/'+img_name+'.png');
                            fs.rename(files.upload.path, _path +'/'+img_name+'.png');
                        }
                    });
                });
于 2015-03-19T06:16:06.810 に答える