-
-
Save alejandro/1488596 to your computer and use it in GitHub Desktop.
/** | |
* 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); |
Si aparecen todos en /tmp
, ya le asigno el directorio form.uploadDir = './uploads';
, pero los sigue colocando en tmp. Imprimo las opciones del formidable.IncomingForm() y si trae la cadena que le indico. Pero al imprimir el objeto upload
del request
efectivamente me indica que el archivo lo subio al directorio tmp
, quiero suponer que primero lo coloca en tmp
y despues lo mueve al directorio que se le indica.
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.
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.
Según miro, este es todo el objeto
req
orequest
o como sea que lo estés haciendo. SI lo esta subiendo, nada más que al directorio queformidable
tiene por default osea ::/tmp/:FILENAME
como te decía no estas pasando apropiadamente el parámetro del directorio donde se va a subir el archivo. Hace esto en la consola y dime que ves:cd /tmp | ls
ahí deben de aparecer los archivos, nada más que con un nombre distinto al original algo como120ba36bbeb5e3a285c158a00a193bda
.