javascript - programacin - ¿Cómo subir archivos usando nodejs y HAPI?
node js tutorial pdf (3)
Finalmente obtuve la solución para cargar los archivos grandes utilizando HAPI y Gracias a Roman.
Aquí está la solución:
código server.js
server.route({
method: ''POST'',
path: ''/api/uploadfiles'',
config: {
payload:{
maxBytes:209715200,
output:''stream'',
parse: false
},
handler: currentposition.uploadFiles,
}
});
Código del manejador:
var currentpositionApi = {
fs : require(''fs''),
multiparty: require(''multiparty''),
uploadFiles:function(req,reply){
var form = new currentpositionApi.multiparty.Form();
form.parse(req.payload, function(err, fields, files) {
currentpositionApi.fs.readFile(files.upload[0].path,function(err,data){
var newpath = __dirname + "/"+files.upload[0].originalFilename;
currentpositionApi.fs.writeFile(newpath,data,function(err){
if(err) console.log(err);
else console.log(files)
})
})
console.log(files)
});
}
}
¿Alguien puede decirme cómo cargar archivos usando nodejs y HAPI?
Estoy obteniendo datos binarios dentro del controlador.
Aquí está mi código html:
function sendFormFromHTML(form) {
//form = $(".uploadForm").form;
var formData = new FormData(form);
formData.append(''id'', ''123456''); // alternative to hidden fields
var xhr = new XMLHttpRequest();
xhr.open(''POST'', form.action, true);
xhr.onload = function(e) { alert(this.responseText) };
xhr.send(formData);
return false;
}
<form method="post" id="uploadForm" action="http://localhost:3000/api/uploadfiles" enctype="multipart/form-data">
<label for="upload">File (Binary):</label>
<input type="file" name="upload" class="fileupload" /><br/>
<input type="button" class="submit" value="Submit" onclick="sendFormFromHTML(this.form);"/>
</form>
Aquí está el código de My Nodejs:
server.route({
method: ''POST'',
path: ''/api/uploadfiles'',
config: {
handler: currentposition.uploadFiles,
}
});
uploadFiles:function(req,reply){
console.log(req.payload);
}
Para los nuevos lectores, hapi ya utiliza multiparty usa pez para manejar solicitudes de publicación multiparte. De la documentación de hapi;
Si la carga útil es ''multipart / form-data'' y el análisis es verdadero, los valores de los campos se presentan como texto mientras que los archivos se proporcionan como flujos. Las secuencias de archivos de una carga ''multipart / form-data'' también tendrán una propiedad que contiene propiedades de nombre de archivo y encabezados.
Ejemplo;
server.route({
method: ''POST'',
path: ''/create'',
config: {
payload:{
maxBytes: 209715200,
output:''stream'',
parse: true
},
handler: function (request, reply) {
request.payload["htmlInputName"].pipe(fs.createWriteStream("test"));
}
});
Puede visitar el código de trabajo en https://github.com/pandeysoni/Hapi-file-upload-download
/*
* upload file
*/
exports.uploadFile = {
payload: {
maxBytes: 209715200,
output: ''stream'',
parse: false
},
handler: function(requset, reply) {
var form = new multiparty.Form();
form.parse(requset.payload, function(err, fields, files) {
if (err) return reply(err);
else upload(files, reply);
});
}
};
/*
* upload file function
*/
var upload = function(files, reply) {
fs.readFile(files.file[0].path, function(err, data) {
checkFileExist();
fs.writeFile(Config.MixInsideFolder + files.file[0].originalFilename, data, function(err) {
if (err) return reply(err);
else return reply(''File uploaded to: '' + Config.MixInsideFolder + files.file[0].originalFilename);
});
});
};