Проверка типа загружаемого файла в django
Я хочу разработать форму в django, которая принимает текстовый файл в качестве ввода и выполняет некоторую обработку с его помощью.
Я написал следующий HTML файл.
<!DOCTYPE html>
<html>
<body>
<h1>Transcript To Voiceover Convertor</h1><br/>
<form action="" enctype="multipart/form-data" method="POST">
{% csrf_token %}
<label for="document"> <b> Select a text file: </b> </label> <br/>
<input type="file" name="document"> <br/><br/><br/>
<!--<input type="file" accept="text/*" name="document"> <br/><br/><br/>-->
<b> Select a gender for the voiceover </b>
<br/>
{{ form }}
<br/><br/><br/><br/>
<input type="submit" value="Submit" />
</form>
</body>
</html>
Как вы можете видеть, одна из строк ввода некомментирована, а другая закомментирована. Итак, в закомментированной строке я попытался использовать атрибут accept с text MIME, но проблема в том, что в этом случае браузер обнаруживает только файлы с расширением .txt, но в операционных системах типа Ubuntu/Linux нет необходимости, чтобы текстовые файлы имели расширение .txt. Поэтому, когда я использую закомментированную строку для ввода, он не может обнаружить эти файлы. Итак, может кто-нибудь подскажет, что мне делать?
Моя вторая проблема связана с первой. Итак, как вы, должно быть, знаете, наличие проверки на стороне клиента не имеет особого смысла, так как ее можно легко обойти, поэтому не мог бы кто-нибудь подсказать мне, какие изменения я должен внести в файл views.py, который в основном является моим бэкендом.
Вот мой файл views.py.
from django.shortcuts import render
from django.http import HttpResponse
from subprocess import run
from django.core.files.storage import FileSystemStorage
from .models import Transcript
from tutorial.forms import TranscriptForm
# Create your views here.
def audio(request):
if request.method == 'POST':
form = TranscriptForm(request.POST)
uploaded_file = request.FILES["document"]
file_name = uploaded_file.name
fs = FileSystemStorage()
name = fs.save(file_name, uploaded_file)
if form.is_valid():
run(["gnome-terminal", "--", "sh", "-c", f"espeak -ven+{request.POST['gender']}1 -f {name} -w {name}_audio"], cwd="media/")
audio_name = name+"_audio"
context = {'generated_audio': audio_name, 'original_name': file_name}
return render(request, 'DownloadAudio.html', context)
else:
return HttpResponse("Something went wrong. Please try again later.")
context = {'form': TranscriptForm()}
return render(request, 'upload.html', context)
Я читал, что могу использовать тип MIME, но не уверен, как это сделать.
Я новичок в django и буду признателен за помощь.