본문 바로가기

BackEnd/Django

Django 파일 업로드(File Upload)

반응형

장고에서 간단한 방법으로 하나의 파일을 업로드 하는 방법을 설명한다.

# 비전공자가 이해한 Django

 

 

1. templates.py

<h1>Save File</h1>

<form method="post" entype="multipart/form-data">
	{% csrf_token %}
    <input type="file" name="myfile" accept=".ab1">
    <button type="submit">Upload</button>
</form>
  • entype="multipart/form-data" :
    form에서 받는 모든 정보를 모두 인코딩하지는 않는다는 뜻으로 이 부분을 설정하지 않으면 form에서 filename 정도만 받아오게 된다.
    이 방식은 파일이나 이미지를 서버로 전송할 때 주로 사용한다.
  • accept="" :
    ""안에 파일 확장자가 들어간다. 이 부분을 설정하면 해당 확장자만 볼 수 있게 된다.
  • name="myfile" :
    입력받은 파일을 myfile이란 이름으로 view에 넘겨준다.

 

 

2. views.py

from django.shortcuts import render
from django.conf import settings
from django.core.files.storage import FileSystemStorage


def simple_upload(request):
    if request.method == 'POST' and request.FILES['myfile']:
        myfile = request.FILES['myfile']
        fs = FileSystemStorage(location='media/screening_ab1', base_url='media/screening_ab1')
        # FileSystemStorage.save(file_name, file_content)
        filename = fs.save(myfile.name, myfile)
        uploaded_file_url = fs.url(filename)
        return render(request, 'screening_analysis/analysis_ab1_reader.html', {
            'uploaded_file_url': uploaded_file_url
        })
    return render(request, 'screening_analysis/analysis_ab1_reader.html')
  1. "myfile"에 request 받은 file을 저장
    def simple_upload(request):
      if request.method == 'POST' and requsest.FILES['myfile']:
          myfile = request.FILES['myfile']​
  2. FileSystemStorage 설정
    - location: 파일을 저장할 곳
    - base_url: 파일을 불러올 때 불러오는 곳
     fs = FileSystemStorage(location='media/screening_ab1', base_url='media/screening_ab1')
  3. 파일을 경로에 저장
    FileSystemStorage.save(file_name, file_content)
    filename = fs.save(myfile.name, myfile)​
  4. 파일이 저장된 URL을 반환
    uploaded_file_url = fs.url(filename)​
  5. return render
    uploaded_file_url로 업로드된 파일의 local 주소를 알 수 있다.
        return render(request, 'screenging_analysis/analysis_ab1_reader.html',{
            `uploaded_file_url': uploaded_file_url'
    
        })
      return render(request, 'screenging_analysis/analysis_ab1_reader.html')​
  6. 그 밖에 검색 가능한 내용
        print('myfile read:', myfile.read()) # file 읽기
        print('myfile size:', myfile.size) # file 읽기
        print('myfile content_type:', myfile.content_type)
        print('myfile open:', myfile.open())
        myfile_read = myfile.read()
        print('myfile read type:', type(myfile_read))

 

본문 내용 중 오류가 있거나 실행이 잘 안되시는 분들은 밑에 댓글을 남겨주세요.
가능한 빠른 시일 내에 수정 및 답변 드리도록 하겠습니다.
반응형