Сохранить файл загруженный в Django без базы данных - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь сохранить файл и что-то сделать с ним из файла html, я не использую формы django, но использую django для бэкэнда, и мне не нужна база данных, так как Я не хочу хранить какие-либо файлы. Я пробовал то, что указано в документации django.

html файл

 <input type="file" id="face_files" name="face_files" multiple >

view.py

def index(request):
    if request.method == "GET":
        return render(request, 'index.html')
    if request.method == "POST":
        form = InputForm(request)
        call_form_function(form)
        return render(request, 'index.html')

Inputform.py

class InputForm():

    def __init__(self, request):
        self.face_files = request.FILES.getlist('face_files')
        # print('face_files= ', self.face_files)
        self.face_name = request.POST.get('face_name')
        # print('face_name= ', self.face_name)

    def save_files(self):
        import os
        self.delete_temp()
        folder = os.path.dirname(__file__) + '/static/temp/'+self.face_name
        try:
            os.mkdir(folder)
            counter=1
            for file in self.face_files:
                # print(file)
                destination=open(folder +"/face"+str(counter)+".jpg", 'wb+')
                for chunk in file.chunks():
                    destination.write(chunk)
                destination.close()
                counter+=1
        except:
            with open(console_html_path, "w+") as f:
                f.write(traceback.format_exc())
                traceback.print_exc()
        return folder


    def do_function(self):
        folder_path = self.save_files()
        function(args, folder_path)

def call_form_function(form):
    import threading
    t1 = threading.Thread(target=form.do_function)
    t1.start()

Но появляется ошибка

lib/python3.7/site-packages/django/core/files/uploadedfile.py", line 91, in chunks
    self.file.seek(0)
ValueError: I/O operation on closed file.

что я делаю не так?

...