web-dev-qa-db-fra.com

Node js Conversion du tampon pdf en pdf

J'ai créé un pdf avec le navigateur en Javascript et l'ai envoyé par courrier au serveur en utilisant ce code:

var blob = pdf.output('blob')
var xhr = new XMLHttpRequest();
xhr.open('post','/upload', true);
xhr.setRequestHeader("Content-Type", "application/pdf");                                
xhr.send(blob);

Je voudrais enregistrer en pdf sur le serveur exécutant Node avec express. J'ai trouvé le code suivant en utilisant le package express et body-parser:

const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ limit: '1gb', extended: false }));
app.use(bodyParser.raw({ limit: '1gb', type: 'application/pdf' }));

app.post('/upload', function(req, res){
   console.log(req.body);      
}

req.body est un tampon, Uint8Array [653120]:

J'ai besoin d'aide pour le reconvertir en pdf avant de l'enregistrer sur le serveur. Toute aide serait appréciée. Merci.

6
dram

Un tampon est une représentation binaire littérale. Il suffit de l'écrire directement dans un fichier sans .toString() et ce devrait être le fichier que vous voulez.

par exemple. pour essayer fs.writeFileSync('some.pdf', req.body)

Je ne recommande pas réellement d'utiliser writeFileSync - utilisez plutôt writeFile qui est asynchrone et a besoin d'un rappel, mais ne bloquera pas les autres requêtes http d'être acceptées.

Un tampon n'est qu'une séquence d'octets sans aucun codage. Si vous vous attendez à ce que le corps ressemble à xml lorsque vous vous déconnectez, essayez .toString('utf8') dessus. hex/utf8/base64 ne sont que des représentations de binaire. Ils sont comme une fonction pour décompresser ou emballer des données. Dans ce cas, vous voulez que la séquence d'octets dans votre tampon existe sur le disque telle qu'elle est; donc jouer avec l'encodage n'est pas souhaitable.

3
Catalyst