포도가게의 개발일지
Flask-mongoDB image upload & GridFS 본문
반응형
1. html에서 form형식으로 -> Flask로 image data(file 형식)을 보내줍니다.
form 형식을 이용한 router통신
1.action = 라우터 주소
2.input type = file
3.name = 보내줄 키 값
<form action="/upload" method="post" id="uploadForm" enctype="multipart/form-data">
<label>이미지 첨부</label>
<input type="file" name="image" class="form-control" placeholder="">
<input type="submit" class="btn btn-primary btn_location" value="Submit">
</form>
@app.route("/upload", methods=['POST'])
def upload():
img = request.files['image']
print(img)
return jsonify({'msg':'저장에 성공했습니다.'})
파일이 정상적으로 넘어온것을 확인 할 수 있다. 이제 이 data를 static 폴더에 저장하거나 mongoDB에 upload 해주어야 한다.
2. Flask -> mongo DB 로 파일 upload
from flask import Flask, request, render_template, jsonify
import gridfs
app = Flask(__name__)
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
## mongodb 저장 경로 ##
db = client.cityclone
@app.route("/")
def main():
return render_template('index.html')
@app.route("/upload", methods=['POST'])
def upload():
## file upload ##
img = request.files['image']
## GridFs를 통해 파일을 분할하여 DB에 저장하게 된다
fs = gridfs.GridFS(db)
fs.put(img, filename = 'name')
## file find ##
data = client.grid_file.fs.files.find_one({'filename':'name'})
## file download ##
my_id = data['_id']
outputdata = fs.get(my_id).read()
output = open('./images/'+'back.jpeg', 'wb')
output.write(outputdata)
return jsonify({'msg':'저장에 성공했습니다.'})
if __name__ == '__main__':
app.run(debug=True)
3. GridFs란? 공부를 하면서 내용을 계속 추가할 예정
- 16mb를 넘는 사이즈의 데이터를 저장하고 조회하는 방식
- 또한, 한개의 파일로 저장하는 대신 부분이나 청크로 나누어 분리된 document를 청크로 저장한다. 청크사이즈는 기본 256kb로 제한됨
- 때문에, 파일 청크와 메타데이터를 저장하는 두개의 컬렉션을 사용한다.
- 파일 크기가 16MB보다 작 으면 GridFS를 사용하는 대신 단일 문서에 파일을 수동으로 저장하는 것이 좋다.
추가내용 : 현재 가장 많이 사용되는 방식으로 이미지는 db에는 url만 저장하며 img 서버를 따로 만들어 두어 db에서 받아온 url을 통해 접속하는 방식을 가장 많이 선호한다.
'DB' 카테고리의 다른 글
Mysql query 작성 (0) | 2021.11.07 |
---|---|
NestJS: TypeOrm 메소드 (0) | 2021.11.06 |
MongoDB pagination 기능 구현 (0) | 2021.07.27 |
TypeError:Object of type, JSON serializable, Mongo DB로 받아온 object_id값 json으로 못보낼때 (0) | 2021.07.12 |
Mongo DB 기본(1) (0) | 2021.07.03 |
Comments