七牛云 图片存储

这篇具有很好参考价值的文章主要介绍了七牛云 图片存储。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件存储方案

  • 在项目中,如用户头像、文章图片等数据往往需要使用单独的文件存储系统来保存
  • 企业中常见的存储方案有两种:
    a.搭建分布式存储系统, 如FastDFS
    数据量非常大, 具备相应的运维管理人员
    b.第三方存储
    运维成本低, 安全可靠

七牛云

七牛云作为老牌云存储服务商, 提供了优质的第三方存储服务
官方网站 七牛云

使用步骤

  • 注册用户, 需要实名认证
  • 新建存储空间
  • 默认生成测试域名, 有效期为一个月(要长期使用则需要绑定自己的域名)

七牛云 bucket 输入什么?,Django,运维,云计算,java

七牛云 bucket 输入什么?,Django,运维,云计算,java

七牛云 bucket 输入什么?,Django,运维,云计算,java

七牛云 bucket 输入什么?,Django,运维,云计算,java

七牛云 bucket 输入什么?,Django,运维,云计算,java
以图形化的方式上传文件
七牛云 bucket 输入什么?,Django,运维,云计算,java
直接在使用的地方引用外连接就可以访问了
七牛云 bucket 输入什么?,Django,运维,云计算,java

交互过程
七牛云提供了多种语言的工具包以供开发者使用, 所以上传文件可以有以下两种形式:

  1. 由前端直接上传文件到七牛
  2. 由前端先将文件上传到后端web应用, 再由web应用上传七牛云

实际开发中应该 优先考虑客户端直接发送数据给七牛云, 交互过程如下:

七牛云 bucket 输入什么?,Django,运维,云计算,java
此处为了学习七牛云工具的使用, 为以后python作为客户端进行第三方存储进行知识储备, 先将头像数据上传到web应用再发给七牛云进行存储, 交互过程如下:

七牛云 bucket 输入什么?,Django,运维,云计算,java

七牛云 bucket 输入什么?,Django,运维,云计算,java

安装
直接安装:

pip install qiniu
或
easy_install qiniu

上传代码:

# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth, put_file, etag
import qiniu.config
#需要填写你的 Access Key 和 Secret Key
access_key = 'Access_Key'
secret_key = 'Secret_Key'
#构建鉴权对象
q = Auth(access_key, secret_key)
#要上传的空间
bucket_name = 'Bucket_Name'
#上传后保存的文件名
key = 'my-python-logo.png'
#生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)
#要上传文件的本地路径
localfile = './sync/bbb.jpg'
ret, info = put_file(token, key, localfile, version='v2') 
print(info)
assert ret['key'] == key
assert ret['hash'] == etag(localfile)

封装成函数,进行相应的配置
七牛云 bucket 输入什么?,Django,运维,云计算,java

七牛云 bucket 输入什么?,Django,运维,云计算,java

from qiniu import Auth, put_file, etag

def upload_file(data):

    '''
    上传文件到七牛云
    :param data 要上传的二进制数据
    :return: 头像url
    '''
    #需要填写你的 Access Key 和 Secret Key
    access_key = 'gSMqHNP7ugq3S53n48vdcKQkGdsylzT5o4Bkrr5a'
    secret_key = '****************************************'
    #构建鉴权对象
    q = Auth(access_key, secret_key)
    #要上传的空间
    bucket_name = 'jibu123'
    #上传后保存的文件名(如果设置为None,七牛云会自动生成文件名,可以保证文件名的唯一性,本质就是使用文件的哈希值作为文件名)
    # 哈希函数:将任意内容转为定长的字符串,而且具有唯一性,一般称哈希值也叫做文件的指纹
    #比如第一次上传a文件第二次再上传a图片就会特别快,就是因为两次哈希值一样,所以就不用再上传了
    key = None
    #生成上传 Token,可以指定过期时间等
    token = q.upload_token(bucket_name, key, 3600)
    ret, info = put_file(token, key, data)
    if info.statis_code==200: # 上传成功
    #       域名是固定的                               可以获取到上传后的文件名
        return 'http://r8fj0mnul.hn-bkt.clouddn.com/' + ret.get('key')
    else:
        raise BaseException(info.error)
if __name__ == '__main__':
    with open('kobe.png','rb') as f:
        file_bytes = f.read()
        file_url = upload_file(file_bytes)

项目集成

  • 在 app/settings/config.py文件中设置 七牛云 的相关配置
class DefaultConfig:
    """默认配置"""
    ...

    # 七牛云
    QINIU_ACCESS_KEY = 'kJ8wVO7lmFGsdvtI5M7eQDEJ1eT3Vrygb4SmR00E'
    QINIU_SECRET_KEY = 'rGwHyAvnlLK7rU4htRpNYzpuz0OHJKzX2O1LWTNl'
    QINIU_BUCKET_NAME = 'sh32'
    QINIU_DOMAIN = 'http://q7f6ieukf.bkt.clouddn.com/'
  • 在 /common/utils包中, 创建 img_storage.py文件, 在其中定义文件上传函数
from qiniu import Auth, put_data, etag
from flask import current_app


def upload_file(data):
    """
    上传文件到七牛云
    :param data: 要上传的二进制数据
    :return: 文件的名称
    """

    # 需要填写你的 Access Key 和 Secret Key
    access_key = current_app.config['QINIU_ACCESS_KEY']
    secret_key = current_app.config['QINIU_SECRET_KEY']

    # 构建鉴权对象
    q = Auth(access_key, secret_key)

    # 要上传的空间
    bucket_name = current_app.config['QINIU_BUCKET_NAME']

    # 上传后保存的文件名
    key = None  # 如果设置key=None, 则七牛云会自动生成名称(该名称会通过文件的哈希值生成, 不同文件的哈希值不同, 文件名不会出现冲突)
    # 哈希函数: 可以将任意长度的内容转为定长内容, 而且相同内容的哈希值一样, 不同内容的哈希值不同

    # 生成上传 Token,可以指定过期时间等
    token = q.upload_token(bucket_name, key, 3600)

    ret, info = put_data(token, key, data)
    if info.status_code == 200:  # 上传成功
        return current_app.config['QINIU_DOMAIN'] + ret.get('key')  # 获取并返回文件URL
    else:
        raise Exception(info.error)


if __name__ == '__main__':
    with open('123.jpg', 'rb') as f:
        data = f.read()  # 模拟前端上传的二进制数据
        file_url = upload_file(data)
        print(file_url)

PUT(全部更新)
PATCH(部分更新)

接口设计

# 上传头像
/user/photo
# 请求方式  
PATCH   form-data
# 请求参数  
photo   上传的头像文件

# 响应数据  json
{
  "photo_url": "www.xx.com/123.jpg"
}

上传文件视图

# /app/resources/user/profile.py 

...

from flask_restful.reqparse import RequestParser
from utils.parser import image_file
from utils.img_storage import upload_file
from app import db
from flask import current_app

...


class UserPhotoResource(Resource):
    method_decorators = [login_required]

    def patch(self):
        """修改头像"""
        # 获取参数
        userid = g.userid
        parser = RequestParser()
        # 如果没有指定type会账指转换为字符串类型
        parser.add_argument('photo', required=True, type=FileStorage, location='files')
        args = parser.parse_args()
        img_file = args.photo

        # f = request.files.get('photo')
        # f.save()
        # f.read()

        # 读取二进制数据
        img_bytes = img_file.read()

        # 上传到七牛云
        try:
            file_url = upload_file(img_bytes)
        except BaseException as e:
            return {'message': 'Thired Error: %s' % e, 'data': None}, 500

        # 将数据库中头像URL进行更新
        User.query.filter(User.id == userid).update({'profile_photo': file_url})
        db.session.commit()

        # 返回URL
        return {'photo_url': file_url}

3. 检查图片文件
python的内置模块imghdr中封装了检查文件是否为图片类型的函数what(), 可以利用该函数检查前端上传的数据是否为图片类型

import imghdr

# with open('222.png', 'rb') as f:
#     # 判断文件类型 一般是通过文件的头部字节进行匹配
#     content = f.read()
#     print(content)


if __name__ == '__main__':
    with open('666.jpg', 'rb') as f:
        # 判断文件是否为图片类型

        # 方式1: 传递 文件路径/文件对象
        # type = imghdr.what('666.jpg')
        # type = imghdr.what(f)
        # print(type)

        # 方式2: 传递 二进制数据
        data_bytes = f.read()
        type = imghdr.what(None, data_bytes)
        print(type)

检查图片封装文章来源地址https://www.toymoban.com/news/detail-604215.html


def image_file(value):
    """
    检查是否是图片文件
    :param value:
    :return:
    """
    try:
        file_type = imghdr.what(value)
    except Exception:
        raise ValueError('Invalid image.')
    else:
        if file_type:
            return value
        else:
            raise ValueError('Invalid image.')

到了这里,关于七牛云 图片存储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用七牛云、阿里云、腾讯云的对象存储上传文件

     说明:存在部分步骤省略的情况,请根据具体文档进行操作  下载相关sdk 表单提交到七牛云 表单提交到阿里云  表单提交到阿里云(sts) 说明:需要修改acl权限,不然无法上传文件 表单提交到腾讯云 表单提交到腾讯云(sts)  参考:  上传策略_使用指南_对象存储 - 七牛开发者

    2024年02月14日
    浏览(47)
  • 使用z-file和七牛云对象存储构建个人网盘

    最近想构建一个个人网盘玩玩,用来存储些资源。这里使用云服务器+zfile+七牛云对象存储进行搭建。 租用云服务器 首先需要在常用的云服务网站买一个云服务器,如阿里云、腾讯云等。这里不说该怎么租用和搭建了。 使用七牛云对象存储 这里使用七牛云对象存储服务。 创

    2024年02月11日
    浏览(39)
  • el-upload上传图片到七牛云或阿里云

    (1)绑定上传地址,上传数据对象 (2)定义数据 (3)定义方法         图片的路径就是图片头加上返回的key

    2024年02月10日
    浏览(54)
  • vue+element ui上传图片到七牛云服务器

    本来打算做一个全部都是前端完成的资源上传到七牛云的demo,但是需要获取token,经历了九九八十一难,最终还是选择放弃,token从后端获取(springboot)。如果你们有前端直接能解决的麻烦记得私我哦!!! 效果展示 先看看文档: element ui :https://element.eleme.cn/#/zh-CN/compone

    2024年04月13日
    浏览(43)
  • vue2+wangEditor5富文本编辑器(图片视频自定义上传七牛云/服务器)

    1、安装使用 安装 在main.js中引入样式 在使用编辑器的页面引入js 模板 js  到这一步编辑器就可以正常显示了 2、上传图片、视频 上传到后台接口的可直接按照文档这个配置就行接口返回格式也要可文档上一致    2)自定义上传(一般上传到别的服务器上,我这边是上传到七

    2024年02月11日
    浏览(65)
  • 【手把手教学】利用七牛云免费CDN服务为自己网站启用图片CDN加速 - 免费版10G/月

    A) 我的网站原图:       http://assets.xxx.com/ assets/img/banner.jpg B) 七牛CDN图片外链:http://cdn.xxx.com/ assets/img/banner.jpg ( 其中B指向七牛的个人存储空间的同路径文件C,如果C不存在或过期,七牛就会自动向A取图 ) 七牛的CDN与传统的CDN思路一样,例如免费的cloudflare、收费的Amazo

    2024年02月02日
    浏览(128)
  • 七牛云如何绑定自定义域名-小白操作说明——七牛云对象储存kodo

    七牛云如何绑定自定义域名 **温馨提示:使用加速cdn自定义域名是必须要https的,也就是必须ssl证书,否则类似视频mp4 之类会无法使用。 ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 点击首页————对象储存——进入点击空间管理——点击对应空间名称进入

    2024年02月13日
    浏览(37)
  • 七牛云部署文件管理服务器

    1.1 介绍 在实际开发中,我们会有很多处理不同功能的服务器。例如: 应用服务器:负责部署我们的应用 数据库服务器:运行我们的数据库 文件服务器:负责存储用户上传文件的服务器 分服务器处理的目的是让服务器各司其职,从而提高我们项目的运行效率。 常见的图片存

    2024年01月23日
    浏览(46)
  • SpringBoot集成七牛云OSS详细介绍

    本文主要SpringBoot集成七牛云OSS详细介绍的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句:努力一点,优秀一点 1、OSS? 一,什么是OSS? 「OSS」的英文全称是Object Storage Service,翻译成中

    2024年02月04日
    浏览(29)
  • 七牛云如何配置免费 https 阿里云SSL证书

    七牛云注册链接:https://s.qiniu.com/yaQ3am 我之前有个项目是走的 https,这个项目作了一些印刷品,二维码的内容就是 https 的,后来为了适配七牛云的图片服务,就改成了 http。导致再扫二维码的时候都会提示不安全。 以 https 地址进入网站,网站却服务在 http 的时候,证书不匹

    2024年02月07日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包