2016-07-23 31 views
0

Ich möchte heruntergeladene Bilder in einen Pfad speichern, der so aussieht: media/images/[user.pk]/direkt von urlretrieve aus der urllib-Bibliothek ist das möglich und was ist der eleganteste Weg?Wie man ein Verzeichnis in der Django-Mediendatei erstellt (am besten)?

Dies sind der verwendete Code-Schnipsel:

  • ich hier urlretrieve mit Pfad verwenden wie .../media/images/[user.pk]/[filename.jpg]

    file_path, header = urlretrieve(image_url, os.path.join(
            MEDIA_ROOT, get_image_path(
             self, 'profile_image_'+str(
             datetime.utcnow().strftime("%Y%m%d_%H%M"))+'.jpg 
    
  • Hier ist die definierte Funktion, die gewünschten Pfad mit dem Dateinamen zurückgibt

    def get_image_path(instance, filename): 
        return os.path.join('images', str(instance.pk), filename) 
    

, wenn ich laufe ich eine Fehlermeldung erhalten, da die Datei nicht existiert:

FileNotFoundError an/rest/oauth2/google [Errno 2] Datei oder Verzeichnis: ‚C: \ xampp \ htdocs \ BookProjectFresh \ media \ images \ 21 \ profile_image_20160723_0801.jpg '

Ich weiß, dass ich das erreichen kann, indem ich zuerst die Datei in den temporären Ordner lade und dann von dort in das django-Modell lege und automatisch den Dateipfad erstelle, wenn er nicht existiert. aber dann habe ich 2 Dateien auf meinem PC mit gleichem Inhalt. Oder wäre der beste Weg, es mit os.path.makedirs zu tun? Bitte, wenn Sie einen anderen Weg kennen, teilen Sie es.

Antwort

0

löste ich ein Problem wie folgt:

def save_image_from_url(self, image_url): 
     if self.profile_image_url != image_url or not os.path.isfile(self.profile_image.path): 
      if not os.path.exists(get_image_path(self, os.path.join(MEDIA_ROOT, get_image_path(
       self, '')))): 
       os.makedirs(get_image_path(self, os.path.join(MEDIA_ROOT, get_image_path(
       self, '')))) 

      self.profile_image_url = image_url 

      file_path, header = urlretrieve(image_url, os.path.join(MEDIA_ROOT, get_image_path(
       self, 'profile_image_'+str(datetime.utcnow().strftime("%Y%m%d_%H%M"))+'.jpg'))) 

      self.profile_image = file_path 
      self.save()