18

NodeでFormidableによって解析されたファイルに名前を付けるにはどうすればよいですか?現在、私のファイルは「7c9d182a9892bb7588b49ea9d364efd0.pdf」として保存されています。元のファイル名の方がはるかに望ましいです。

誰もがこれを行う方法を知っていますか?

4

4 に答える 4

27

これは私がそれをした方法です(.on(file'...)関数をチェックしてください):

// import required modules
    var express = require('express');
    var formidable = require("formidable"); // used for parsing form data
    var fs = require('fs');

// prevent bodyParser from handling multipart forms (ie only handle get and post requests)
    delete express.bodyParser.parse['multipart/form-data'];

// create server
    var app = express.createServer();

// connect middleware
    app.configure(function() {
        // creates body object on request object
            app.use(express.bodyParser());
            app.use(express.methodOverride());
        // used to display static files such as css
            app.use(express.static(__dirname + '/static'));
    });

// enable and define views
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade'); 

//******************************
//* create routes
//******************************

// file upload handling
    app.get('/photos/new', function(request, response) {
        response.render('photos/new');
    });
    app.post('/photos', function(request, response) {
        console.log('in /photos handler');
        var form = new formidable.IncomingForm();

        form.uploadDir = __dirname + '/static/upload/photos/';

        form.on('file', function(field, file) {
            //rename the incoming file to the file's name
                fs.rename(file.path, form.uploadDir + "/" + file.name);
        });

        form.on('error', function(err) {
            console.log("an error has occured with form upload");
            console.log(err);
            request.resume();
        });

        form.on('aborted', function(err) {
            console.log("user aborted upload");
        });

        form.on('end', function() {
            console.log('-> upload done');
        });

        form.parse(request, function() {
                response.render('photos/new');
        });
    });

// start our server
    app.listen(8888);
于 2012-01-08T01:10:44.893 に答える
20

これが私自身の答えです:

form.uploadDir = "temp/uploads";
form.keepExtensions = true;

form
    .on('error', function(err) {
        throw err;
    })

    .on('field', function(field, value) {
        //receive form fields here
    })

    /* this is where the renaming happens */
    .on ('fileBegin', function(name, file){
            //rename the incoming file to the file's name
            file.path = form.uploadDir + "/" + file.name;
    })

    .on('file', function(field, file) {
        //On file received
    })

    .on('progress', function(bytesReceived, bytesExpected) {
        //self.emit('progess', bytesReceived, bytesExpected)

        var percent = (bytesReceived / bytesExpected * 100) | 0;
        process.stdout.write('Uploading: %' + percent + '\r');
    })

    .on('end', function() {


    });

form.parse(req);   

答えはずっとモジュールのGitHubページにありました!

于 2011-12-09T16:24:46.997 に答える
1

あなたは手ごわいファイルオブジェクトから元の名前を得ることができます:

form.parse(req, function(err, fields, files) {
  var filename = files.upload.name;
});

お役に立てれば

于 2011-12-03T18:36:52.363 に答える
1

将来の参照のために追加したかったのですが、オプションを追加するコミットがあったようです。

var form = new formidable.IncomingForm();
form.keepFilenames = true;  

https://github.com/felixge/node-formidable/pull/488

これはまだnpmjs.orgでリリースに達しているようには見えませんが、コミットが承認されたので確実にリリースされます。

于 2018-11-26T15:11:47.963 に答える