Skip to content

Instantly share code, notes, and snippets.

@alejandro
Forked from betobaz/app.js
Created December 16, 2011 23:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alejandro/1488596 to your computer and use it in GitHub Desktop.
Save alejandro/1488596 to your computer and use it in GitHub Desktop.
node.js Upload file formidable
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, stylus = require('stylus')
, util = require('util')
//, form = require('connect-form')
, formidable = require('formidable')
, sys = require('sys')
;
var app = module.exports = express.createServer(
);
// Configuration
function compile(str, path){
return stylus(str)
//.import(__dirname + '/public/stylesheets/cruz-azul')
.set('filename', path)
.set('warn', true)
.set('compress', true);
};
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(require('stylus').middleware({ src: __dirname + '/public', compile: compile }));
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
//console.log('hola, esto trae sucursalprovider:', SucursalProvider);
// Routes
app.get('/upload-file', function(req, res){
res.send(
'<form action="/upload-file" enctype="multipart/form-data" method="post">'+
'<input type="text" name="title"><br>'+
'<input type="file" name="upload" multiple="multiple"><br>'+
'<input type="submit" value="Upload">'+
'</form>'
);
res.end();
});
app.post('/upload-file', function(req, res, next){
var form = new formidable.IncomingForm(),
fields = [],files=[];
form.uploadDir = './uploads';
form
.on('error', function(err){
res.writeHead(200, {'content-type':'text/plain'});
res.end('error:\n\n'+util.inspect(err));
})
.on('field', function(field, value){
console.log(field, value);
fields.push([field, value]);
})
.on('file', function(field, file) {
console.log(field, file);
files.push([field, file]);
})
.on('end', function(){
console.log('-> post done');
res.writeHead('200', {'content-type':'text/plain'});
res.end('received fields:\n\n'+util.inspect(fields) +'\n\n received files: ' + util.inspect(files));
});
console.log(req);
form.parse(req);
});
app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
@alejandro
Copy link
Author

No no actua de esa forma, lo sube directamente a la carpeta especificada, lo único que se me viene a la mente es que no existe el directorio uploads o que no tienes permisos para escribir en la carpeta, trata de hacer sudo chown -R $USER ./uploads dentro del directorio del server (para asignarte propietario del directorio), luego imprimi la cadena form: console.log(form) justo luego de haber definido el form.uploadDir y debe de imprimir algo como esto:

{ error: null,
  ended: false,
  maxFieldsSize: 2097152,
  keepExtensions: false,
  uploadDir: './uploads',
  encoding: 'utf-8',
  headers: null,
  type: null,
  bytesReceived: null,
  bytesExpected: null,
  _parser: null,
  _flushing: 0,
  _fieldsSize: 0 }

Ahí podes ver si realmente te esta pasando el parámetro.

@betobaz
Copy link

betobaz commented Dec 19, 2011

Ya encontre por que, en la linea 31, se configura app.use(express.bodyParser());, si comento esta linea ya funciona, ahora a buscar el por que!, Gracias por tu ayuda.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment