2016-01-18 2 views
3

J'implémente un serveur WOPI dans le but d'intégrer Office Online. Lorsque le client WOPI appelle la méthode PutFile (pour enregistrer un fichier), il envoie une requête vide (req.body.length === 0). Voici le code Node/Express:Office Online: WOPI PutFile reçoit une demande vide

app.post('/wopi/files/:fileId/contents', function (req, res) { 
    console.log(req.body.length); 
... 

Toutes les suggestions sont très appréciées.

+0

Si vous cochez la demande avec Fiddler ou un outil similaire, contient-il des en-têtes supplémentaires (tels que X-WOPI-Size), etc.? Malheureusement, ni le [ancien] (https://msdn.microsoft.com/en-us/library/hh657364 (v = office.12) .aspx) ni la [nouvelle documentation] (https: //wopi.readthedocs. org/projects/wopirest/fr/latest/files/PutFile.html) spécifiez si le corps peut ou ne peut pas être vide dans certaines circonstances particulières ... – rocky

+1

Bonjour @app_sciences avez-vous réussi à le faire fonctionner? Je rencontre le même problème. – essaji

+0

Je rencontre exactement le même problème, avez-vous trouvé une solution? – LazyCreep

Répondre

0

Si vous intégrez votre hôte WOPI avec l'Office Online, je suppose que vous ou votre entreprise aurait peut-être déjà enregistré avec le bureau de ce qu'on appelle Microsoft 365 Cloud Storage Partner Program

Si tel est le cas, alors vous pouvez approcher leur équipe de soutien active à Yammer. Là, vous pouvez poster vos questions auxquelles il sera répondu avec diligence.

1

Je trouve la réponse:

Mettre le middleware suivant avant middleware bodyParser. Il va collecter des données de corps brutes dans request.rawBody et n'interférera pas avec bodyParser.

app.use(function(req, res, next) { 
    var data = ''; 
    req.setEncoding('utf8'); 
    req.on('data', function(chunk) { 
     data += chunk; 
    }); 
    req.on('end', function() { 
     req.rawBody = data; 
     next(); 
    }); 
}); 
app.use(express.bodyParser()); 

pour plus d'informations voir ici: https://stackoverflow.com/a/13565786/5976568

Edit:

raw-body-parser, un paquet de noeuds est assez bon, je l'utilise dans ma solution.

var rawBodyParser = require('raw-body-parser'); 

app.use(rawBodyParser()); 

Obtenir les données brutes:

var rawBody = req.rawBody.toString('utf8');