使用flask实现一个简单的图片上传存储服务


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

maple-file

使用flask实现的一个简单的图片上传服务

设计初衷

对于图片的存储,有很多选择,一般采用云服务如(七牛,又拍等),但是国内的服务像七牛 自定义域名竟然需要域名备案(Excuse me,当初就是因为备案麻烦才选择国外的),而且浪费了我十块钱,

而我又想像七牛一样可以直接在本地就可以上传图片,找来找去,没有找到一个比较合适的,所以花两天时间自己写了一个

使用

由于初衷是本地脚本就可以发布,所以没有前端界面,等以后有时间了再加上

API

  • /api/login

    • POST 登录
  • /api/logout

    • GET 注销
  • /api/albums

    • 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 删除图片

配置

 1class Config(object):
 2    DEBUG = True # 生产环境设置为False
 3    SECRET_KEY = 'ccc' # import os;os.urandom(24)
 4    SECRET_KEY_SALT = 'ssss'
 5    JSON_AS_ASCII = False
 6
 7    PERMANENT_SESSION_LIFETIME = timedelta(days=3)
 8
 9    PER_PAGE = 10 # 分页
10    ADMIN_URL = '/admin/aaaaa' # 后台地址
11
12    LOGIN_TOKEN_HEADER = 'Api-Key' # 将会影响到后面headers设置
13    LOGIN_TOKEN = 'api_key' #url?api_key=21312313
14
15    MIDDLEWARE = ['storage.common.middleware.CommonMiddleware']
16
17    SQLALCHEMY_TRACK_MODIFICATIONS = False
18    SQLALCHEMY_DATABASE_URI = 'sqlite:///test.db'
19    # SQLALCHEMY_ECHO = DEBUG
20    UPLOAD_ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg']) # 允许上传的扩展名
21    UPLOAD_FOLDER_ROOT = os.path.dirname(os.path.abspath(__file__))
22    UPLOAD_FOLDER_PATH = 'images' # 相对于当前文件路径的地址
23    UPLOAD_FOLDER = os.path.join(UPLOAD_FOLDER_ROOT, UPLOAD_FOLDER_PATH)

创建账户

1python manager.py create_user

将同时创建一个default的相册

1python manager.py key

显示用户key

上传

上传后图片保存路径

  • 原图路径:

    UPLOAD_FOLDER + 'username' + 'photo' + %Y + %m + (时间戳+随机数).png

  • 缩略图路径:

    UPLOAD_FOLDER + 'username' + 'thumb' + %Y + %m + (时间戳+随机数).png

example

使用requests本地上传

 1import requests
 2
 3def images():
 4    url = 'http://127.0.0.1:8000/api/images'
 5    files = {'images': open('desktop.png', 'rb')}
 6    multiple_files = [
 7        ('images', ('11.png', open('11.png', 'rb'), 'image/png')),
 8        ('images', ('desktop.png', open('desktop.png', 'rb'), 'image/png'))
 9    ]
10    headers = {
11        'Api-Key':
12        'InhpeWFuZzA4MDdJBtx4AWlPpI_Oxx1Ki8',
13        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'
14    }
15    # r = requests.post(url, files=multiple_files, headers=headers)
16    r = requests.post(url, files=files, headers=headers)
17    print(r.text)
作者: honmaple
链接: https://honmaple.me/articles/2017/03/使用flask实现一个简单的图片上传存储服务.html
版权: CC BY-NC-SA 4.0 知识共享署名-非商业性使用-相同方式共享4.0国际许可协议
wechat
alipay

加载评论