정리

9 TIL 정리(파일 업로드)

모_아이 2022. 4. 28. 22:40
extension = file.filename.split('.')[-1]

파일업로드 기능

-프론트엔드

부트스트랩을 이용해보자! 또는 찾아보니 form 태그를 이용하기도 한다.

<input type="file" name="file" id="imageFileOpenInput" accept="image/*">

모든 이미지 파일을 허용

 

파일 업로드 라이브러리

<script src="https://cdn.jsdelivr.net/npm/bs-custom-file-input/dist/bs-custom-file-input.js"></script>
bsCustomFileInput.init()

스크립트 부분은 헤드에 넣고 아래 init은 스크립트에 넣자

예시)

 $(document).ready(function () { /*창이 로딩되는 순간 아래의 기능을 작동시켜주세요*/
            bsCustomFileInput.init()
        })

-DB를 통해 서버와 클라이언트 파일 주고받기

서버쪽

file = request.files["file_give"] /*file_give로 정보를 받아온다*/

save_to = 'static/mypicture.jpg'/*mypicture이란 이름으로 저장하는데 나중에 계속 덮어씌워지니 후에 변경할 것*/
file.save(save_to)/*파일 저장*/

클라이언트 쪽

function posting() { 
    let title = $('#title').val()
    let content = $("#content").val()

    let file = $('#file')[0].files[0] /*파일값을 불러오는 코드를 콘솔창에 찍어보자.*/
    let form_data = new FormData() /*새로운 객체 생성*/

    form_data.append("file_give", file) /*새로운 객체에 데이터 추가*/
    form_data.append("title_give", title)
    form_data.append("content_give", content)

    $.ajax({
        type: "POST",
        url: "/diary",
        data: form_data,/*폼 데이터로 보내기*/
        cache: false, /*추가적인 부분은 false처리*/
        contentType: false, /*''*/
        processData: false,/*''*/
        success: function (response) {
            alert(response["msg"])
            window.location.reload()
        }
    });
}

f-string

myname = '홍길동'
text = f'내 이름은 {myname}입니다.'
print(text) #내 이름은 홍길동입니다

datetime

python 기본 라이브러리로 미니 프로젝트 때 사용한 적이 있다.

( https://dojang.io/mod/page/view.php?id=2463 )

날짜와 시간을 다루는 함수

임포트 먼저!

from datetime import datetime

 

-현재 날짜와 시간

now = datetime.now()
print(now)
date_time = now.strftime("%Y년 %m월 %d일 %H시 %M분 %S초")
print(date_time)
# ㅇㅇㅇㅇ년 ㅇㅇ월 ㅇㅇ일 ㅇㅇ시 ㅇㅇ분 ㅇㅇ초

 

파일 이름 중복되지 않게 저장해보기

파일 이름 중 확장자가 들어갈 수 있으니 확장자 명을 빼보자

extension = file.filename.split('.')[-1] #파일이름에서 .로 나눈뒤 마지막 문자열

새로운 이름 붙이기(현재 시간을 붙인)

today = datetime.now() #현재시간 부르기
mytime = today.strftime('%Y-%m-%d-%H-%M-%S') #시간을 ()로 표현해 주세요

filename = f'file-{mytime}' #file뒤에 시간 붙는 문자열

저장 후 DB저장

save_to = f'static/{filename}.{extension}'
file.save(save_to)
doc = {  #딕셔너리화
    'title':title_receive,
    'content':content_receive,
    'file':f'{filename}.{extension}',#file 시간과 확장자명
}
db.diary.insert_one(doc)

클라이언트에 추가할 때

<img src="../static/${file}"> <!--static폴더 안에 있는 file(이름)을 불러와-->

 

반응형

'정리' 카테고리의 다른 글

11TIL 정리(selenium)  (0) 2022.05.06
10TIL 정리 (Jinja2,나만의 단어장)  (0) 2022.04.28
8-2 TIL 정리(AWS)  (0) 2022.04.28
8-1 TIL 정리(AWS 3번째 )  (0) 2022.04.27
7-3TIL 정리(마지막 EB)  (0) 2022.04.27