with uploaded multiple files example create django django-models django-file-upload

uploaded - Validación del archivo Django(audio)



get file uploaded django (1)

Estoy experimentando con un sitio que permitirá a los usuarios cargar archivos de audio. He leído todos los documentos a los que puedo acceder, pero no encuentro mucho sobre la validación de archivos .

Total de newb aquí (nunca he hecho ninguna validación de archivos de ningún tipo antes) y tratando de resolver esto. ¿Puede alguien tomar mi mano y decirme lo que necesito saber?

Como siempre, gracias de antemano.


Desea validar el archivo antes de que se escriba en el disco. Cuando carga un archivo, el formulario se valida y el archivo cargado se pasa a un controlador / método que se ocupa de la escritura real en el disco de su servidor. Entonces, entre estas dos operaciones, desea realizar una validación personalizada para asegurarse de que sea un archivo de audio válido

Tú podrías:

  • compruebe si el archivo es menor que un tamaño determinado (buena práctica)
  • luego verifique si el archivo enviado tiene un cierto tipo de contenido (es decir, un archivo de audio)
    • Esto es bastante inútil ya que alguien podría fácilmente falsificarlo.
  • luego verifique que el archivo termine en una cierta extensión (o extensiones)
    • esto también es bastante inútil
  • intenta leer el archivo y ver si es realmente audio

(No he probado este código)

modelos.py

class UserSong(models.Model): title = models.CharField(max_length=100) audio_file = models.FileField()

forms.py

class UserSongForm(forms.ModelForm): # Add some custom validation to our file field def clean_audio_file(self): file = self.cleaned_data.get(''audio_file'',False): if file: if file._size > 4*1024*1024: raise ValidationError("Audio file too large ( > 4mb )") if not file.content-type in ["audio/mpeg","audio/..."]: raise ValidationError("Content-Type is not mpeg") if not os.path.splitext(file.name)[1] in [".mp3",".wav" ...]: raise ValidationError("Doesn''t have proper extension") # Here we need to now to read the file and see if it''s actually # a valid audio file. I don''t know what the best library is to # to do this if not some_lib.is_audio(file.content): raise ValidationError("Not a valid audio file") return file else: raise ValidationError("Couldn''t read uploaded file")

views.py desde utils import handle_uploaded_file

def upload_file(request): if request.method == ''POST'': form = UserSongForm(request.POST, request.FILES) if form.is_valid(): # If we are here, the above file validation has completed # so we can now write the file to disk handle_uploaded_file(request.FILES[''file'']) return HttpResponseRedirect(''/success/url/'') else: form = UploadFileForm() return render_to_response(''upload.html'', {''form'': form})

utils.py

# from django''s docs def handle_uploaded_file(f): ext = os.path.splitext(f.name)[1] destination = open(''some/file/name%s''%(ext), ''wb+'') for chunk in f.chunks(): destination.write(chunk) destination.close()

https://docs.djangoproject.com/en/dev/topics/http/file-uploads/#file-uploads https://docs.djangoproject.com/en/dev/ref/forms/fields/#filefield https://docs.djangoproject.com/en/dev/ref/files/file/#django.core.files.File