Dans l'un de mes projets django, j'essaie de télécharger des fichiers. Les fichiers peuvent être des fichiers vidéo et peuvent être gros comme 20 Mo. J'essaye de le télécharger avec la méthode de céleri et de upload_file_handler donnée dans des docs de django.Besoin d'un exemple de Django big Téléchargement de fichiers avec la méthode du gestionnaire de fichiers de téléchargement
Qu'est-ce que je l'ai fait.
class MyVideo(models.Model):
user = models.ForeignKey(User)
video = models.FileField(null=True, blank=True, upload_to="video")
def __unicode__(self):
return self.user.username
Dans forms.py
class VideoForm(forms.ModelForm):
video = forms.FileField(required=False)
class Meta:
model = MyVideo
exclude = ['user']
def clean_video(self):
video = self.cleaned_data['video']
if video and video._size > (10 * 1024 * 1024):
raise forms.ValidationError("only 10 MB video is allowed")
return self.cleaned_data['video']
Dans View.py
class CreateDigitalAssetsView(LoginRequiredMixin, CreateView):
template_name = "video_create.html"
form_class = VideoForm
def get_success_url(self):
return reverse("video_url")
def form_valid(self, form):
user = self.request.user
video = form.cleaned_data['video']
if video:
handle_uploaded_file(video)
# stick here what to do next.
def handle_uploaded_file(f):
filename, extension = os.path.splitext(video.name)
with open('media/video/'+filename, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
Je suis coincé ici quoi faire après avoir appelé handled_uploaded_file. S'il vous plaît guidez-moi comment puis-je utiliser ce fichier écrit en utilisant hanldle_uploaded_file pour enregistrer dans le modèle django.
essayé, fonctionne très bien sur les marchés locaux. Merci. Mais il donne une erreur d'E/S sur le serveur appelé Aucun répertoire de ce type "" media /% s "% relative_chemin" n'existe. – user2534069
Il semble que la racine du média sur votre serveur se trouve à un endroit différent. Est-ce que votre settings.py contient une entrée MEDIA_ROOT? Si oui, vous devriez utiliser cela comme base au lieu de "media /". Voir https://docs.djangoproject.com/en/dev/ref/settings/#media-root pour plus de détails. – georgeofallages
Oui, vous aviez raison. MEDIA_ROOT pointait vers BASE_DIR + media – user2534069