使用Python實現一個簡單的圖片上傳存儲服務

GitHub地址: https://github.com/honmaple/maple-file前端

使用flask實現的一個簡單的圖片上傳服務python

設計初衷

對於圖片的存儲,有不少選擇,通常採用雲服務如(七牛,又拍等),可是國內的服務像七牛
自定義域名居然須要域名備案(Excuse me,當初就是由於備案麻煩才選擇國外的),並且浪費了我十塊錢,git

而我又想像七牛同樣能夠直接在本地就能夠上傳圖片,找來找去,沒有找到一個比較合適的,因此花兩天時間本身寫了一個github

使用

因爲初衷是本地腳本就能夠發佈,因此沒有前端界面,等之後有時間了再加上sql

API

  • /api/loginflask

    • POSTapi

      登陸
  • /api/logoutdom

    • GETpost

      註銷
  • /api/albumsurl

    • GET
      獲取相冊列表

    • POST
      新建相冊

      • name 相冊名稱

      • description 相冊描述

  • /api/albums/<int:pk>

    pk 相冊ID

    • GET
      獲取相冊信息

    • PUT
      修改相冊信息

      • name 相冊名稱

      • description 相冊描述

    • DELETE
      刪除相冊

  • /api/images

    • GET
      獲取圖片列表

    • POST
      上傳圖片

      • images 上傳圖片列表

      • album 相冊ID(默認會新建一個default相冊)

  • /api/images/<int:pk>

    • GET
      獲取圖片信息

    • PUT
      修改圖片信息

      • name 圖片名稱

      • description 圖片描述

    • DELETE
      刪除圖片

配置

class Config(object):
    DEBUG = True # 生產環境設置爲False
    SECRET_KEY = 'ccc' # import os;os.urandom(24)
    SECRET_KEY_SALT = 'ssss'
    JSON_AS_ASCII = False

    PERMANENT_SESSION_LIFETIME = timedelta(days=3)

    PER_PAGE = 10 # 分頁
    ADMIN_URL = '/admin/aaaaa' # 後臺地址

    LOGIN_TOKEN_HEADER = 'Api-Key' # 將會影響到後面headers設置
    LOGIN_TOKEN = 'api_key' #url?api_key=21312313

    MIDDLEWARE = ['storage.common.middleware.CommonMiddleware']

    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_DATABASE_URI = 'sqlite:///test.db'
    # SQLALCHEMY_ECHO = DEBUG
    UPLOAD_ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg']) # 容許上傳的擴展名
    UPLOAD_FOLDER_ROOT = os.path.dirname(os.path.abspath(__file__))
    UPLOAD_FOLDER_PATH = 'images' # 相對於當前文件路徑的地址
    UPLOAD_FOLDER = os.path.join(UPLOAD_FOLDER_ROOT, UPLOAD_FOLDER_PATH)

建立帳戶

python manager.py create_user

將同時建立一個default的相冊

python manager.py key

顯示用戶key

上傳

上傳後圖片保存路徑

  • 原圖路徑:

    UPLOAD_FOLDER + 'username' + 'photo' + %Y + %m + (時間戳+隨機數).png
  • 縮略圖路徑:

    UPLOAD_FOLDER + 'username' + 'thumb' + %Y + %m + (時間戳+隨機數).png

example

使用requests本地上傳

import requests

def images():
    url = 'http://127.0.0.1:8000/api/images'
    files = {'images': open('desktop.png', 'rb')}
    multiple_files = [
        ('images', ('11.png', open('11.png', 'rb'), 'image/png')),
        ('images', ('desktop.png', open('desktop.png', 'rb'), 'image/png'))
    ]
    headers = {
        'Api-Key':
        'InhpeWFuZzA4MDdJBtx4AWlPpI_Oxx1Ki8',
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'
    }
    # r = requests.post(url, files=multiple_files, headers=headers)
    r = requests.post(url, files=files, headers=headers)
    print(r.text)
相關文章
相關標籤/搜索