2016-06-05 3 views
1

나는 웹상에서 일하고있다. User은 파일을 업로드 할 수 있습니다. 이 파일의 형식은 docx입니다. 파일을 업로드하고 파일을 번역 할 언어를 선택한 후 다른 페이지로 리디렉션하여 번역 가격을 볼 수 있습니다. 가격은 docx 파일의 특정 언어 및 문자 수에 따라 다릅니다.Django에서 업로드 한 후 파일에 액세스하는 방법은 무엇입니까?

업로드 된 파일을 처리하는 방법을 알 수 없습니다. 나는 파일 경로를 가져 와서 여러 문자를 반환하는 함수를 가지고있다. 파일을 업로드하고 제출을 클릭하면이 함수를 호출하여 예상 가격으로 새 페이지를 렌더링 할 수 있습니다.

나는 request.FILES['file']temporary_file_path를 호출 할 수 있습니다 읽었습니다하지만

을 제기

'InMemoryUploadedFile'개체가 어떤 속성 'temporary_file_path'

내가 파일을 업로드 얼마나 많은 문자를 발견 할이 없습니다 요청을 받아 다른보기 (예 : /order-estimation)에 포함하여 보냅니다.

보기 :

def create_order(request): 
    LanguageLevelFormSet = formset_factory(LanguageLevelForm, extra=5, max_num=5) 
    language_level_formset = LanguageLevelFormSet(request.POST or None) 
    job_creation_form = JobCreationForm(request.POST or None, request.FILES or None) 

    context = {'job_creation_form': job_creation_form, 
       'formset': language_level_formset} 

    if request.method == 'POST': 
     if job_creation_form.is_valid() and language_level_formset.is_valid(): 
      cleaned_data_job_creation_form = job_creation_form.cleaned_data 
      cleaned_data_language_level_formset = language_level_formset.cleaned_data 
      for language_level_form in [d for d in cleaned_data_language_level_formset if d]: 
       language = language_level_form['language'] 
       level = language_level_form['level'] 

       Job.objects.create(
         customer=request.user, 
         text_to_translate=cleaned_data_job_creation_form['text_to_translate'], 
         file=cleaned_data_job_creation_form['file'], 
         short_description=cleaned_data_job_creation_form['short_description'], 
         notes=cleaned_data_job_creation_form['notes'], 
         language_from=cleaned_data_job_creation_form['language_from'], 
         language_to=language, 
         level=level, 
       ) 
       path = request.FILES['file'].temporary_file_path 
       utilities.docx_get_characters_number(path) # THIS NOT WORKS 

      return HttpResponseRedirect('/order-estimation') 
     else: 
      return render(request, 'auth/jobs/create-job.html', context=context) 

    return render(request, 'auth/jobs/create-job.html', context=context) 
+0

이 내용을 읽으셨습니까? https://docs.djangoproject.com/en/1.9/topics/http/file-uploads/? 여기에 더 많은 샘플 http://stackoverflow.com/questions/5871730/need-a-minimal-django-file-upload-example – trinchet

답변

3

InMemoryUploadedFiletemporary_file_path을 제공하지 않습니다. 클래스 이름이 암시 하듯이 내용은 '기억 속에 남습니다'.

기본적으로 Django는 최대 크기가 2.5MB 인 파일의 경우 InMemoryUploadedFile을 사용하고 큰 파일의 경우 TemporaryFileUploadHandler을 사용합니다. 여기서 나중에 temporary_file_path 메소드를 제공합니다.

FILE_UPLOAD_HANDLERS = [ 
    'django.core.files.uploadhandler.TemporaryFileUploadHandler', 
] 

그냥 당신이 많은 사이트가있을 때이 가장 효율적인 방법이 아니다 있음을 유의하십시오 : FILE_UPLOAD_HANDLERS 항상 TemporaryFileUploadHandler를 사용하는 Django Documentation

그래서 쉬운 방법은 설정을 변경하는 것 동시 작은 업로드 요청이 개 있습니다.

+1

동시에 많은 요청이있을 때 가장 효율적인 방법은 무엇입니까? –

관련 문제