GitHub地址: https://github.com/honmaple/maple-file前端
使用flask實現的一個簡單的圖片上傳服務python
對於圖片的存儲,有不少選擇,通常採用雲服務如(七牛,又拍等),可是國內的服務像七牛
自定義域名居然須要域名備案(Excuse me,當初就是由於備案麻煩才選擇國外的),並且浪費了我十塊錢,git
而我又想像七牛同樣能夠直接在本地就能夠上傳圖片,找來找去,沒有找到一個比較合適的,因此花兩天時間本身寫了一個github
因爲初衷是本地腳本就能夠發佈,因此沒有前端界面,等之後有時間了再加上sql
/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
使用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)