반응형
장고에서 간단한 방법으로 하나의 파일을 업로드 하는 방법을 설명한다.
# 비전공자가 이해한 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')
- "myfile"에 request 받은 file을 저장
def simple_upload(request): if request.method == 'POST' and requsest.FILES['myfile']: myfile = request.FILES['myfile']
- FileSystemStorage 설정
- location: 파일을 저장할 곳
- base_url: 파일을 불러올 때 불러오는 곳
fs = FileSystemStorage(location='media/screening_ab1', base_url='media/screening_ab1')
- 파일을 경로에 저장
FileSystemStorage.save(file_name, file_content)
filename = fs.save(myfile.name, myfile)
- 파일이 저장된 URL을 반환
uploaded_file_url = fs.url(filename)
- 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')
- 그 밖에 검색 가능한 내용
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))
본문 내용 중 오류가 있거나 실행이 잘 안되시는 분들은 밑에 댓글을 남겨주세요.
가능한 빠른 시일 내에 수정 및 답변 드리도록 하겠습니다.
반응형
'BackEnd > Django' 카테고리의 다른 글
Django 장고 - Secret key 파일 분리하는 방법 (0) | 2021.11.01 |
---|---|
Django 장고 Form_valid 함수 (0) | 2021.11.01 |
Django 장고 ORM으로 OR/AND 사용하기(Q 사용) (0) | 2021.07.13 |
Django 외래키(Foreign Key)를 이용해 정보를 불러오는 방법 (6) | 2021.06.29 |
Django AbstractUser를 이용한 Custom User Field 확장 방법 (0) | 2021.06.28 |