2016-05-13 1 views
1

J'essaie actuellement d'extraire les images d'un document que l'utilisateur est en train de télécharger dans le référentiel multimédia de mon application Django. Le code qui travaille actuellement pour moi:Comment extraire des images d'un document en utilisant pypandoc dans un dossier différent du référentiel multimédia d'un projet dans Django?

html = pypandoc.convert(
     tmp_loc, 
     'html5', 
     extra_args=['--extract-media='] 
     ) 

Ceci extrait correctement les images dans le répertoire médias image01.jpg
En HTML le img src est:

<img src="/media/image01.jpg" /> 

Maintenant, le problème est que Lorsque l'utilisateur télécharge un autre docx qui a aussi une image, il remplace l'image précédente quand il est téléchargé car il est également enregistré sous le nom image01.jpg.

Pour résoudre ce problème, je pensais que nous pouvions simplement créer un nouveau dossier dans le référentiel de médias et le nom du nouveau dossier serait le nom de doc. Alors maintenant, le code ressemble à ceci:

html = pypandoc.convert(
     tmp_loc, 
     'html5', 
     extra_args=['--extract-media=/media/<some_doc_name>'] 
     ) 

Mais le moment je lance ce que j'obtiens l'erreur suivante:

Pandoc died with exitcode "1" during conversion: b'pandoc:  /media/docs: createDirectory: permission denied (Permission denied)\n' 

Quelqu'un pourrait-il me guider ce qui ne va pas? Comment régler ceci? Toute autre méthode de résolution de ce problème serait également appréciée !! J'utilise le module Pypandoc en python.

+0

Au lieu de cela, pourquoi ne pas simplement renommer le fichier image s'il existe. – RA123

+0

La chose est pypandoc génère automatiquement le code HTML et définit le imr src pour pointer vers image01.jpg. Comment modifier le HTML généré par pandoc pour pointer vers l'image renommée? –

+0

Vous devriez lire ce https://github.com/bebraw/pypandoc/blob/master/README.md vous pouvez spécifier le nom de fichier de sortie – RA123

Répondre

0

erreur que vous obtenez dit clairement que vous n'êtes pas autorisé à créer un répertoire sous/media/docs

il peut-être plusieurs raisons pour lesquelles une telle chose se passe-t

  • vous n'êtes pas autorisé à créer sous-répertoires sous "/ media/docs" - juste changer les autorisations
  • vous avez des autorisations, mais vous exécutez votre application sous un autre nom d'utilisateur qui ne dispose pas des autorisations - créer un groupe et modifier les autorisations pour ce groupe
  • que vous voulez extraire dans le répertoire "media" sous votre application, pas la racine du système "/ media" - votre chemin est mal spécifié - devrait avoir "plus" avant, par ex. "/ home/utilisateur/programme/media/docs" ou "media/docs" (sans "/")
  • vous essayez d'extraire des données dans le sous-répertoire inexistant et votre programme ne peut pas gérer une telle situation , parce que vous ne pouvez pas créer des répertoires "parents" - assurez-vous simplement que le répertoire est créé

dernière chose - si vous téléchargez des documents, ne supposez pas qu'ils ont des noms uniques, utilisez quelque chose d'unique (comme primaire clé de l'enregistrement créé), ou vérifier l'unicité en validant que ce répertoire n'existe pas et s'il existe, en créer un nouveau avec un nombre supplémentaire ou un texte aléatoire à la fin. Que se passe-t-il si le nom du document est également identique?