In einem meiner Django-Projekt versuche ich, Dateien hochzuladen. Dateien können Videodateien sein und 20 MB groß sein. Ich versuche, es mit Sellerie und Upload_file_handler Methode in Django docs hochladen.Benötigen Sie ein Beispiel für Django big Datei-Upload mit Upload-Datei-Handler-Methode
Was ich getan habe ist es.
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
In 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']
In 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)
Ich bin hier fest, was nach dem Aufruf handled_uploaded_file als nächstes zu tun. Bitte führen Sie mich, wie kann ich diese geschriebene Datei mit Hilfe von hanldle_uploaded_file im Django-Modell speichern.
schon versucht, diese auf lokalen Arbeits in Ordnung. Vielen Dank. Aber es gibt einen IO-Fehler auf dem Server mit dem Namen Kein solches Verzeichnis "media /% s"% relativer_pfad existiert. – user2534069
Klingt wie der Media-Root auf Ihrem Server an einem anderen Ort ist. Enthält Ihre settings.py einen MEDIA_ROOT-Eintrag? Wenn ja, sollten Sie dies als Grundlage anstelle von "media /" verwenden. Details finden Sie unter https://docs.djangoproject.com/de/dev/ref/settings/#media-root. – georgeofallages
Ja, Sie hatten Recht. MEDIA_ROOT zeigte auf BASE_DIR + Medien – user2534069