CSV 파일을 업로드하여 내용을 읽는 기능을 구현하려 합니다.
여기서는 $.ajax 를 이용하여 전송하는 방법을 사용했습니다.
업로드하려는 csv 샘플파일 내용이 다음과 같습니다.
책이름, ISBN번호
동물농장, 9788901082059
나미야 잡화점의 기적, 9788972756194
- Front 쪽의 설명입니다.
input type='file' 을 생성하고 이것이 바뀔때마다 file 객체가 특정 object에 담기도록 합니다.
file 객체를 console.log 로 찍어보면 다음과같은 정보가 저장되어 있음을 확인할 수 있습니다.
File
lastModified: 1538653427942
lastModifiedDate: Thu Oct 04 2018 20:43:47 GMT+0900 (한국 표준시) {}
name: "sample (1).csv"
size: 77
type: "text/csv"
webkitRelativePath: ""
__proto__: File
이제 이 객체를 FormData()를 생성하여 넣어주도록 합니다.
POST로 전송해야 하기 때문에 csrf_token을 같이 포함하여 전송해주어야 합니다.
안그러면 403 에러가 발생합니다.
$.post대신 $.ajax를 사용하는 이유는 좀더 상세한 옵션설정이 필요해서인데, 파일업로드 할때에는 ajax의 옵션중 processData 와 contentType 옵션을 둘다 false로 수정해야 합니다.
% processData 는 data 지정한 개체를 쿼리 문자열로 변환할지 여부를 설정하는 것입니다. 기본값은 true이며 자동으로 "application/x-www-form-urlencoded" 형식으로 변환합니다. file의 경우 form으로 전송시 multipartfile 으로 전송되기 때문에 자동변환하면 안됩니다.
% contentType 의 기본값은 "application/x-www-form-urlencoded" 입니다. 이것또한 false로 변경합니다.
let formData = new FormData();
formData.append('file', 파일객체);
formData.append('csrfmiddlewaretoken', '{{ csrf_token }}')
let url = "/upload";
$.ajax({
url: url,
data: formData,
processData: false,
contentType: false,
type: 'POST',
success: function(res){
displayLoading("N"); // 로딩 off
alert(res.message)
return false;
}
})
- Django(python) 쪽 설명입니다.
업로드 파일을 받기위해 urls.py에 다음과 같이 설정합니다.(파일명은 서버의 환경에 따라 다를 수 있습니다.)
# urls.py 파일
path('/upload', test.upload, name="test.upload"),
test.py 파일 내에 upload function을 추가합니다.
# test.py 파일
def like_upload(request):
# 파일객체가 하나도 없다면 작업을 멈추고 리턴합니다.
if request.FILES.__len__() == 0:
message = "업로드할 파일이 없습니다."
return JsonResponse({"message": message})
uploadFile = request.FILES['file'];
# csv파일이 아니라면 작업을 멈추고 리턴합니다.
if uploadFile.name.find('csv') < 0 :
message = "파일형식이 잘못되었습니다"
return JsonResponse({"message": message})
# 여기서 read()를 실행할 경우 타입이 byte로 읽힙니다.
# 이것을 utf8로 디코드해서 문자열을 볼 수 있도록 바꿔둡니다.
read = uploadFile.read().decode('utf8')
# 줄바꿈이 생기는 것을 기준으로 배열로 담아둡니다.
readLine = read.split('\n')
for line in readLine:
print(line)
그럼 다음과같이 Log 가 찍힙니다.
책이름, ISBN번호
동물농장, 9788901082059
나미야 잡화점의 기적, 9788972756194
'공부 > 프로그래밍' 카테고리의 다른 글
[linux-centos7] DokuWiki(도쿠위키) 설치 (0) | 2018.10.11 |
---|---|
[linux-centos7] gitlab 설치하기 (0) | 2018.10.10 |
[Linux-centos7] HTTPS 무료 인증서 설치 및 설정 방법(certbot 사용, apache) (0) | 2018.09.14 |
[네이버 클라우드 플랫폼] 이미지 저장 및 resize, crop 하여 썸네일로 보이기 (0) | 2018.09.06 |
[JPA] @OneToMany 와 @ManyToOne 로 연결된 엔터티, JSON으로 파싱할때 StackOverflowError(@JsonIdentityInfo 로 해결) (0) | 2018.09.04 |
댓글