Загруженный файл формы удаляется после возврата HttpResponse - PullRequest
1 голос
/ 22 мая 2019

Я сохраняю CSV-файл в текстовый файл, используя handle_uploaded_file, асинхронно, используя многопоточность, но аргумент файла, передаваемый в функцию, закрывается, когда домашняя функция возвращает HTTP-ответ.Я не хочу сохранять файл и использовать его из этого места, но хочу использовать его, пока он доступен в памяти.

ValueError: Ищу закрытый файл

def handle_uploaded_file(f):
    destination =  open('name.txt', 'ab+')
    for chunk in f.chunks():
        destination.write(chunk)
    destination.close()

def home(request):
    if request.method=="POST":
        file = UploadForm(request.POST, request.FILES)
        if file.is_valid():
            g = request.FILES.dict()
            File = g['file']
            print(File)
            uploader_thread = Thread(target=handle_uploaded_file, args=[File])
            uploader_thread.start()
            file.save()
            return HttpResponseRedirect(reverse('imageupload'))
    else:
        file=UploadForm()
    files=Upload.objects.all().order_by('-upload_date')
    return render(request,'home.html',{'form':file}) #,'files':files})

1 Ответ

0 голосов
/ 22 мая 2019

Попробуй вот так.

import copy
def upload_handler(inmemory_file):
    with open(inmemory_file.name, 'wb+') as destination:
        for chunk in inmemory_file.chunks():
            destination.write(chunk)

def home(request):
    if request.method=="POST":
        file = UploadForm(data=request.POST, files=request.FILES)
        if file.is_valid():
            memory_file = copy.deepcopy(request.FILES['file'])
            upload_thread = Thread(target=upload_handler, args=(memory_file,))
            upload_thread.start()
            file.save()
            return HttpResponseRedirect(reverse('imageupload'))
    else:
        file=UploadForm()
    files=Upload.objects.all().order_by('-upload_date')
    return render(request,'home.html',{'form':file}) #,'files':files})
...