파이썬

Flask Image upload

한장원1 2022. 1. 16. 11:03

서버 컴퓨터에 이미지 파일을 저장하고, 해당 이미지의 이름만 DB에 저장하는 방식이다.

이름을 통하여 이미지를 찾아낸다. 

 

write.html (이미지 업로드 페이지)

function posting() {
  let file = $('#chooseFile')[0].files[0]
  let form_data = new FormData()
  console.log(file);

  form_data.append("filename_give", file)

  if (!file) {
    alert('이미지를 업로드해 주세요.');
    return;
  }

  $.ajax({
      type: "POST",
      url: "/upload_page",
      data: form_data,
      cache: false,
      enctype: "multipart/form-data",
      contentType: false,
      processData: false,
      success: function (response) {
          alert(response["msg"])
      }
  });


}


<div class="header">
            <img class="back-img" src="../static/images/back@3x.png">
            <p id="posting_text"><b>POSTing</b></p>
            <img class='upload_image' onclick="posting()" src="../static/images/plus.png">
        </div>
        <div class="screen">
            <div class="img-container">
                <div id="drop-file" class="drag-file">
                    <label class="file-label" for="chooseFile">
                    <img src="../static/images/upload.png" alt="파일 아이콘" class="image"></label>
                    <input class="file" id="chooseFile" type="file" onchange="dropFile.handleFiles(this.files)"
                        accept="image/png, image/jpeg, image/gif">

                    <img src="" alt="미리보기 이미지" class="preview">
                </div>
            </div>

           
        </div>

 

 

 

app.py

@app.route('/write')
def write():
    return render_template('write.html')

@app.route('/upload_page', methods=['POST'])
def file_upload():
    uploaded_files = request.files['filename_give']
    
    # 해당 파일에서 확장자명만 추출한다.
    extension = uploaded_files.filename.split('.')[-1]
    
     # 현재 시간을 파일 이름으로 만들어서 중복을 피한다.
    today = datetime.now()
    mytime = today.strftime('%Y-%m-%d-%H-%M-%S')
    filename = f'{file_user_receive} - {mytime}'
    
    파일 저장 경로 설정
    save_to = f'static/{filename}.{extension}'
    uploaded_files.save(save_to)
    date = datetime.today().strftime("%m{} %d{}")
    date = date.format('월', '일')

   	
    # DB에 추가한다.
    doc = {'img': f'{filename}.{extension}'}

    db.img.insert_one(doc)
 
    return jsonify({'msg': '저장 완료'})