资讯专栏INFORMATION COLUMN

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

yzd / 1405人阅读

摘要:地址使用实现的一个简单的图片上传服务设计初衷对于图片的存储有很多选择一般采用云服务如七牛又拍等但是国内的服务像七牛自定义域名竟然需要域名备案当初就是因为备案麻烦才选择国外的而且浪费了我十块钱而我又想像七牛一样可以直接在本地就可以上传图片找

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

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

设计初衷

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

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

使用

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

API

/api/login

POST

登录

/api/logout

GET

注销

/api/albums

GET
获取相册列表

POST
新建相册

name 相册名称

description 相册描述

/api/albums/

pk 相册ID

GET
获取相册信息

PUT
修改相册信息

name 相册名称

description 相册描述

DELETE
删除相册

/api/images

GET
获取图片列表

POST
上传图片

images 上传图片列表

album 相册ID(默认会新建一个default相册)

/api/images/

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)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38523.html

相关文章

  • 小程序开发:上传图片到腾讯云

    这是小程序开发第二篇,主要介绍如何上传图片到腾讯云,之所以选择腾讯云,是因为腾讯云免费空间大? 准备工作 上传图片主要是将图片上传到腾讯云对象存储(COS)。 要使用对象存储 API,需要先执行以下步骤: 购买腾讯云对象存储(COS)服务 在腾讯云 对象存储控制台 里创建一个 Bucket 在控制台 个人 API 密钥 页面里获取 AppID、SecretID、SecretKey 内容 编写一个...

    why_rookie 评论0 收藏0
  • 小程序开发:上传图片到腾讯云

    这是小程序开发第二篇,主要介绍如何上传图片到腾讯云,之所以选择腾讯云,是因为腾讯云免费空间大? 准备工作 上传图片主要是将图片上传到腾讯云对象存储(COS)。 要使用对象存储 API,需要先执行以下步骤: 购买腾讯云对象存储(COS)服务 在腾讯云 对象存储控制台 里创建一个 Bucket 在控制台 个人 API 密钥 页面里获取 AppID、SecretID、SecretKey 内容 编写一个...

    idisfkj 评论0 收藏0
  • 基于Minio和Thumbor搭建独立图片服务

    摘要:但是很多企业项目因为各种需求,还是会要求图片服务部署在内部。所以我们还是可能会需要一个可独立部署的图片服务。注意,这种启动模式仅限于测试环境下,一旦命令终止,数据将会消失。 多数应用系统都会用到图片存储,从系统架构角度来说,像图片存储这样的服务应该尽量从核心业务中剥离出来。很多人会选择在线云存储服务,比如七牛云存储之类的。但是很多企业项目因为各种需求,还是会要求图片服务部署在内部。所以...

    novo 评论0 收藏0
  • 基于Minio和Thumbor搭建独立图片服务

    摘要:但是很多企业项目因为各种需求,还是会要求图片服务部署在内部。所以我们还是可能会需要一个可独立部署的图片服务。注意,这种启动模式仅限于测试环境下,一旦命令终止,数据将会消失。 多数应用系统都会用到图片存储,从系统架构角度来说,像图片存储这样的服务应该尽量从核心业务中剥离出来。很多人会选择在线云存储服务,比如七牛云存储之类的。但是很多企业项目因为各种需求,还是会要求图片服务部署在内部。所以...

    jsyzchen 评论0 收藏0
  • FastDFS+Nginx搭建分布式图片存储

    摘要:可以将称为追踪服务器或调度服务器。实际保存文件分为多个组,每个组之间保存的文件是不同的。虚拟磁盘路径配置的虚拟路径,与磁盘选项对应。数据两级目录服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。1.什么是FastDFS FastDFS是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制, 充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等...

    CoderDock 评论0 收藏0

发表评论

0条评论

yzd

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<