2015-11-18 1 views
0

J'utilise une entrée HTML de type fichier pour télécharger des fichiers sur mon propre serveur. Dans le script Python sur le serveur, je peux recevoir le fichier et ses méta-données (comme le nom de fichier et le type) en tant qu'objet FieldStorage.Téléchargement de fichier http sur le disque

J'ai imprimé les champs de cet objet à la page HTML afin de voir ce qu'ils contiennent. Quand je laisse le nom de fichier d'impression, le type et le fichier (converti en une chaîne), je reçois ceci:

Filename: Lighthouse.jpg Type: image/jpeg File: <open file '<fdopen>', mode 'w+b' at 0x04403578>

Je suppose que 0x04403578 est l'adresse du fichier dans la mémoire du serveur. Mais que signifie mode 'w+b'? Et comment puis-je sauvegarder ce fichier sur disque via Python si je dois supporter des types de fichiers arbitraires?

Répondre

1

Le fichier est juste un objet fichier ouvert, comme vous obtiendriez de open. <fdopen> signifie qu'il a été converti à partir d'un descripteur de fichier. w+b signifie qu'il est ouvert pour la lecture et l'écriture en mode binaire.

Vous pouvez l'écrire comme un fichier normal à savoir

w = open('<filename>','w+b') 
w.write(f.read()) 
+0

Il fonctionne, je ne l'ai pas pensé qu'il était facile. Cependant, pourriez-vous expliquer ce que signifie «w + b»? Je comprends que 'w' signifie écrire et' b' signifie binaire, mais n'est-ce pas juste 'wb'? –

+0

'w +' signifie à la fois lire et écrire, tandis que 'w' n'autorise pas la lecture. Vous pouvez vous référer à [docs] (https://docs.python.org/2/library/functions.html#open) pour plus d'informations sur les chaînes de mode. – tauroid