最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flask實現(xiàn)圖片的上傳、下載及展示示例代碼

 更新時間:2018年08月03日 13:49:45   作者:阿木俠  
這篇文章主要介紹了Flask實現(xiàn)圖片的上傳、下載及展示示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

用Flask處理圖片非常容易,這一篇學(xué)習(xí)一下圖片的上傳、下載及展示。還是以實例代碼演示為主。

首先,實現(xiàn)一個簡單的上傳(過程中未做任何處理,只是為了演示)

點擊選擇圖片,輸入李四:

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,傳遞到后臺對應(yīng)的路由處理,查看控制臺:

后臺接收的路由代碼:

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時,已經(jīng)可以看到我們點擊上傳的圖片了。

以上是最簡單的一個文件上傳示例,我們實際使用中基本不可能這樣去寫,通常會做一些處理。例如:上傳后做圖片名稱唯一性的處理、限制上傳文件的類型、無論上傳成功或者失敗,都去做一些返回提示等等。

限制上傳文件類型,例如,我們希望用戶上傳的文件為圖片類型

ALLOWED_EXTENSIONS = set(['png', 'jpg', 'JPG', 'PNG', 'gif', 'GIF'])
 
def allowed_file(filename):
  return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

上面的代碼片段通過截取上傳文件的后綴名,判斷是否是屬于我們期望用戶上傳的類型。

更改上傳圖片名稱,防止重名

這里我們使用日期加隨機數(shù)生成圖片名,做一個生成字符串的工具類

#-*-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"); # 生成當(dāng)前時間
    randomNum = random.randint(0, 100); # 生成的隨機整數(shù)n,其中0<=n<=100
    if randomNum <= 10:
      randomNum = str(0) + str(randomNum);
    uniqueNum = str(nowTime) + str(randomNum);
    return uniqueNum;

當(dāng)我們點擊圖片上傳,選擇圖片點擊提交后,頁面返回提示信息如下圖:

此時看我們工程下的upload文件夾,唯一名稱的圖片已經(jīng)上傳成功

圖片的下載

@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)

基本示例就以上這些了!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python的重要技能輸入與輸出字符串格式化使用詳解

    python的重要技能輸入與輸出字符串格式化使用詳解

    這篇文章主要為大家介紹了python的重要技能輸入與輸出格式化使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Python語言實現(xiàn)機器學(xué)習(xí)的K-近鄰算法

    Python語言實現(xiàn)機器學(xué)習(xí)的K-近鄰算法

    今天學(xué)習(xí)的算法是KNN近鄰算法。KNN算法是一個監(jiān)督學(xué)習(xí)分類器類別的算法。下面我們來詳細(xì)的探討下
    2015-06-06
  • Python對FTP交互封裝的實現(xiàn)

    Python對FTP交互封裝的實現(xiàn)

    本文主要介紹了Python對FTP交互封裝的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 解決Keras TensorFlow 混編中 trainable=False設(shè)置無效問題

    解決Keras TensorFlow 混編中 trainable=False設(shè)置無效問題

    這篇文章主要介紹了解決Keras TensorFlow 混編中 trainable=False設(shè)置無效問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 通過python-turtle庫實現(xiàn)繪制圖畫

    通過python-turtle庫實現(xiàn)繪制圖畫

    turtle庫是python的基礎(chǔ)繪圖庫,經(jīng)常被用來給孩子們介紹編程知識的方法庫,是標(biāo)準(zhǔn)庫之一,利用turtle可以制作很多復(fù)雜的繪圖。本文將為大家介紹通過turtle庫繪制的一些有趣的圖畫,感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • pytorch實現(xiàn)特殊的Module--Sqeuential三種寫法

    pytorch實現(xiàn)特殊的Module--Sqeuential三種寫法

    今天小編就為大家分享一篇pytorch實現(xiàn)特殊的Module--Sqeuential三種寫法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 利用PyQt5+Matplotlib 繪制靜態(tài)/動態(tài)圖的實現(xiàn)代碼

    利用PyQt5+Matplotlib 繪制靜態(tài)/動態(tài)圖的實現(xiàn)代碼

    這篇文章主要介紹了利用PyQt5+Matplotlib 繪制靜態(tài)/動態(tài)圖的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Python中的 dir() 函數(shù)示例詳解

    Python中的 dir() 函數(shù)示例詳解

    dir()函數(shù)是Python 中一個非常有用的工具,可以用于查找對象的所有屬性和方法,如獲取當(dāng)前作用域的變量和方法、查找模塊中的導(dǎo)出內(nèi)容、動態(tài)查找對象屬性等,通過本文的介紹和示例代碼,大家可以更全面地了解 dir() 函數(shù)的用法和注意事項,需要的朋友參考下吧
    2022-03-03
  • django Layui界面點擊彈出對話框并請求邏輯生成分頁的動態(tài)表格實例

    django Layui界面點擊彈出對話框并請求邏輯生成分頁的動態(tài)表格實例

    這篇文章主要介紹了django Layui界面點擊彈出對話框并請求邏輯生成分頁的動態(tài)表格實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python Numpy學(xué)習(xí)之索引及切片的使用方法

    Python Numpy學(xué)習(xí)之索引及切片的使用方法

    數(shù)組中的元素可以通過索引以及切片的手段進行訪問或者修改,和列表的切片操作一樣。本文將詳細(xì)為大家介紹一下Python中的科學(xué)計算庫-Numpy的索引及切片的使用方法
    2022-01-01

最新評論

合山市| 瑞金市| 连平县| 东源县| 桃江县| 安康市| 铜川市| 吉首市| 夏河县| 遂溪县| 芦山县| 许昌市| 广宁县| 基隆市| 中江县| 长沙县| 日土县| 五河县| 茶陵县| 遂宁市| 永城市| 平和县| 邓州市| 涞源县| 富宁县| 江城| 郓城县| 腾冲县| 上饶市| 深泽县| 河东区| 肇东市| 新泰市| 桃园县| 凤冈县| 黑龙江省| 维西| 微山县| 吉隆县| 丹凤县| 临城县|