Fonctionnement du FileField
Bonjour, j'ai un réel problème pour mettre à jour un fichier dans un models.FileField.
J'expose le cas :
J'ai une classe ObjectVideo, avec un champ
video = models.FileField(upload_to='videos/videos/', null=True)
La grande question est que une fois uploadée, je la re-encode avec un cron. Or dans le script python qui va re-encoder (avec ffmpeg), me produit un fichier, mais impossible de le mettre à jour pour mon champ vidéo!
Les opérations que je font sont :
(version dpaste : http://dpaste.com/332768/ )
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
#on créé une nouvelle vidéo et on récupère l'absolute path sur la machine
path_new_video = video_compression(objectvideo.video)
#on récupère l'ancien absolute path
path, ext = os.path.splitext(objectvideo.video._get_path())
#on recupère name = data/video/video/foo, soit l'equivalent de l'url
name, ext2 = os.path.splitext(objectvideo.video._get_url())
#on delete l'ancienne
os.remove(objectvideo.video._get_path())
#on calcule le new_path
new_path = path + '_480p.flv'
new_name = name + '_480p.flv'
#on le met où il devrait être pour la machine
os.rename(path_new_video, new_path)
#et c'est là où je bloque : ca fait tout peter
objectvideo.video = new_path
objectvideo.treated = True
objectvideo.save()
#en gros ici le objectvideo.video.path est bon, mais le .name ne l'est plus, et si je met le .name à jour, le .path s'adapte sur le .name! |
bref, quelqu'un à une idée de la manière dont ca doit se passer?
Je sais qu'il faudrait limite créer un objet FileField, mais il demande des filename et des content qui ne lui plaise jamais. Bref je demande de l'aide sur la procédure à adapter!
Merci à vous