Flask 이미지 업로드,다운로드 및 예시 코드 구현
우선,간단 한 업 로드 를 실현 합 니 다.
클릭 하여 그림 선택,이사 입력:
HTML 코드:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<form method="post" action="http://localhost:5000/up_photo" enctype="multipart/form-data">
<input type="file" size="30" name="photo"/>
<br>
<input type="text" class="txt_input" name="name" style="margin-top:15px;"/>
<input type="submit" value=" " class="button-new" style="margin-top:15px;"/>
</form>
</div>
</body>
</html>
클릭 하여 정보 제출 후 통과http://localhost:5000/up_photo,배경 에 전달 되 는 경로 처리,콘 솔 보기:배경 에서 받 은 경로 코드:
basedir = os.path.abspath(os.path.dirname(__file__))
@app.route('/up_photo', methods=['post'])
def up_photo():
img = request.files.get('txt_photo')
username = request.form.get("name")
path = basedir+"/static/photo/"
file_path = path+img.filename
img.save(file_path)
print ' , :'+username
return render_template('index.html')
이때,우 리 는 static/photo 를 볼 때,이미 우리 가 클릭 하여 올 린 그림 을 볼 수 있다.이상 은 가장 간단 한 파일 업로드 예제 입 니 다.우 리 는 실제 사용 에서 이렇게 쓸 수 없고 보통 처 리 를 합 니 다.예 를 들 어 업로드 후 이미지 이름 의 유일한 처리,업로드 파일 의 유형 제한,업로드 성공 이나 실패 에 관 계 없 이 반환 알림 을 하 는 등 이다.
업로드 파일 형식 을 제한 합 니 다.예 를 들 어 사용자 가 업로드 하 기 를 원 하 는 파일 은 그림 형식 입 니 다.
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'JPG', 'PNG', 'gif', 'GIF'])
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
위의 코드 세 션 은 업로드 파일 의 접미사 이름 을 캡 처 하여 사용자 가 업로드 하 기 를 원 하 는 형식 인지 판단 합 니 다.업로드 그림 이름 변경,이름 변경 방지
여기 서 우 리 는 날짜 에 무 작위 로 그림 이름 을 만 들 고 문자열 을 만 드 는 도구 클래스 를 만 듭 니 다.
#-*-coding:utf-8-*-
import datetime
import random
class Pic_str:
def create_uuid(self): # ,
nowTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S"); #
randomNum = random.randint(0, 100); # n, 0<=n<=100
if randomNum <= 10:
randomNum = str(0) + str(randomNum);
uniqueNum = str(nowTime) + str(randomNum);
return uniqueNum;
우리 가 사진 업 로드 를 클릭 하고 사진 을 선택 하여 제출 을 클릭 하면 페이지 는 다음 그림 과 같은 알림 정 보 를 되 돌려 줍 니 다.이 때 우리 프로젝트 의 upload 폴 더 를 보면 유일한 이름 의 그림 이 업로드 되 었 습 니 다.
사진 다운로드
@app.route('/download/<string:filename>', methods=['GET'])
def download(filename):
if request.method == "GET":
if os.path.isfile(os.path.join('upload', filename)):
return send_from_directory('upload', filename, as_attachment=True)
pass
그림 의 전시
# show photo
@app.route('/show/<string:filename>', methods=['GET'])
def show_photo(filename):
file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])
if request.method == 'GET':
if filename is None:
pass
else:
image_data = open(os.path.join(file_dir, '%s' % filename), "rb").read()
response = make_response(image_data)
response.headers['Content-Type'] = 'image/png'
return response
else:
pass
전체 예제 코드
#encoding:utf-8
#!/usr/bin/env python
from werkzeug.utils import secure_filename
from flask import Flask, render_template, jsonify, request, make_response, send_from_directory, abort
import time
import os
from strUtil import Pic_str
import base64
app = Flask(__name__)
UPLOAD_FOLDER = 'upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
basedir = os.path.abspath(os.path.dirname(__file__))
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'JPG', 'PNG', 'gif', 'GIF'])
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
@app.route('/upload')
def upload_test():
return render_template('up.html')
#
@app.route('/up_photo', methods=['POST'], strict_slashes=False)
def api_upload():
file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])
if not os.path.exists(file_dir):
os.makedirs(file_dir)
f = request.files['photo']
if f and allowed_file(f.filename):
fname = secure_filename(f.filename)
print fname
ext = fname.rsplit('.', 1)[1]
new_filename = Pic_str().create_uuid() + '.' + ext
f.save(os.path.join(file_dir, new_filename))
return jsonify({"success": 0, "msg": " "})
else:
return jsonify({"error": 1001, "msg": " "})
@app.route('/download/<string:filename>', methods=['GET'])
def download(filename):
if request.method == "GET":
if os.path.isfile(os.path.join('upload', filename)):
return send_from_directory('upload', filename, as_attachment=True)
pass
# show photo
@app.route('/show/<string:filename>', methods=['GET'])
def show_photo(filename):
file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])
if request.method == 'GET':
if filename is None:
pass
else:
image_data = open(os.path.join(file_dir, '%s' % filename), "rb").read()
response = make_response(image_data)
response.headers['Content-Type'] = 'image/png'
return response
else:
pass
if __name__ == '__main__':
app.run(debug=True)
기본 예 는 이상 입 니 다!이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
GCE로 Flask를 이동!GCE에서 우선 Flask를 사용하여 웹 페이지를 게시하는 단계입니다. 우선이므로, 움직이면 좋다고 하는 느낌입니다. 우선 공개하므로 최소 사양으로 갑니다. 다음 구성으로 인스턴스를 만듭니다. 이름 gce-flask...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.