J'ai un code client qui exporte un fichier .docx de Google Drive et envoie les données à mon serveur. C'est assez simple, il exporte juste le fichier, le transforme en blob et envoie le blob à un point de terminaison POST.Pourquoi ne puis-je pas extraire un fichier zip d'une demande POST?
gapi.client.drive.files.export({
fileId: file_id,
mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
}).then(function (response) {
// the zip file data is now in response.body
var blob = new Blob([response.body], {type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"});
// send the blob to the server to extract
var request = new XMLHttpRequest();
request.open('POST', 'return-xml.php', true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.onload = function() {
// the extracted data is in the request.responseText
// do something with it
};
request.send(blob);
});
Voici mon code côté serveur pour enregistrer ce fichier sur mon serveur afin que je puisse faire des choses avec elle:
<?php
file_put_contents('tmp/document.docx', fopen('php://input', 'r'));
Quand je lance cela, le fichier est créé sur mon serveur. Cependant, je crois qu'il est corrompu, parce que quand je tente de le décompresser (comme vous pouvez le faire avec .docx), cela se produit:
$ mv tmp/document.docx tmp/document.zip
$ unzip tmp/document.zip
Archive: document.zip
error [document.zip]: missing 192760059 bytes in zipfile
(attempting to process anyway)
error [document.zip]: start of central directory not found;
zipfile corrupt.
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
Pourquoi est-ce pas le reconnaître comme un fichier .zip approprié?
Note pour le futur lecteur: Je ne sais pas encore comment faire.Je pense que j'essayais juste trop fort d'insérer une cheville en forme de fichier zip dans un trou en forme de jeton. Ainsi, j'ai restructuré l'application pour faire les appels d'exportation de gapi sur le backend et faire des choses avec les données extraites là. –