美文网首页
Python上传图片到阿里云os

Python上传图片到阿里云os

作者: 像我这样_6c6d | 来源:发表于2020-07-15 14:50 被阅读0次

简单说一下项目中的需求:opencv生成图片,不保存到本地直接上传到阿里云os,返回url给客户端:

先是在网上找了一些,但是返回的url都是有时限的,并且会携带一些隐秘内容

import oss2
auth = oss2.Auth('xxx', 'xxx') #详见文档
endpoint = 'http://oss-cn-beijing.aliyuncs.com' #  地址
bucket = oss2.Bucket(auth, endpoint, 'xxxxFDnjet') # 项目名称
def uplaod():
  result = bucket.put_object_from_file('xxx.jpg','/xx/xxxx.jpg')# 括号内 左边是上传到服务器的文件名,右边是当前系统的文件路径
  print(result.status) # 如果状态码是200表示上传成功
  # 这个就是返回url的方法,它需要携带着你的 ACCESS_KEY_ID, ACCESS_KEY_SECRET去获取临时的权限,
  jpg_url = bucket.sign_url('GET','Zabbix_Graph.jpg',60) #阿里返回一个关于Zabbix_Graph.jpg的url地址 60是链接60秒有效
  print(jpg_url)

按照网上找的码完,运行了一遍总感觉会被打,然后出现了下面的代码:

import oss2, uuid

from config.config import ALIYUN_OSS_SETTING


class AliyunOss(object):

    def __init__(self):
        self.access_key_id = "你的ACCESS_KEY_ID"
        self.access_key_secret = "你的ACCESS_KEY_SECRET"
        self.auth = oss2.Auth(self.access_key_id, self.access_key_secret)
        self.bucket_name = "你的BUCKET_NAME"
        self.endpoint = "你的ENDPOINT"
        self.bucket = oss2.Bucket(self.auth, self.endpoint, self.bucket_name)

    def put_file(self, name, file):
        """
        :param name: 文件名
        :param file: 文件
        :return:
        """
        # Endpoint以杭州为例,其它Region请按实际情况填写。
        result = self.bucket.put_object(name, file)
        # HTTP返回码。
        print('http status: {0}'.format(result.status))
        # 请求ID。请求ID是请求的唯一标识,强烈建议在程序日志中添加此参数。
        print('request_id: {0}'.format(result.request_id))
        # ETag是put_object方法返回值特有的属性。
        print('ETag: {0}'.format(result.etag))
        # HTTP响应头部。
        print('date: {0}'.format(result.headers['date']))

    def put_object_from_file(self, name, file):
        """
        上传本地文件
        :param name: 需要上传的文件名
        :param file: 本地文件名
        :return: 阿里云文件地址
        """
        self.bucket.put_object_from_file(name, file)
        return "https://{}.{}/{}".format(self.bucket_name, self.endpoint, name)

    def put_object(self, name, file):
        # 上传二进制文件
        self.bucket.put_object(name, file)
        return "https://{}.{}/{}".format(self.bucket_name, self.endpoint, name)
aliyunoss = AliyunOss()
# img = aliyunoss.put_object("传到阿里云上的图片名", "二进制图片")
img = aliyunoss.put_object_from_file("传到阿里云上的图片名", "本地图片路径")

这样就解决了返回URL的问题
至于上传PIL对象图片上传,我是直接把图片转成二进制再上传的,代码如下:

img = "你的img"
imgByteArr = io.BytesIO() 
img.save(imgByteArr, format='PNG')
imgByte = imgByteArr.getvalue()

相关文章

  • Python上传图片到阿里云os

    简单说一下项目中的需求:opencv生成图片,不保存到本地直接上传到阿里云os,返回url给客户端: 先是在网上找...

  • 移动端实现图片压缩上传

    上传图片有很多框架,或者是阿里云直传,关于阿里云直传可以看我之前的博客上传图片到阿里云,这次是通过后台进行操作上传...

  • 图片上传

    图片上传 获取阿里云接口 图片上传到阿里云 图片预览接口post http://113.108.139.178:1...

  • Android OSS上传图片到阿里云

    Android OSS上传图片到阿里云 我所采取的上传方式为异步上传,如果需要多张图片的话,可以直接循环上传就可...

  • pyinstaller 出现OSError:Cannot loa

    使用阿里云储存对象OSS的SDK工具上传图片到阿里云bucket里面,用Pyinstaller打包后,运行出错,提...

  • node图片服务器

    今天写了个图片上传的小demo并部署到腾讯云【Ubuntu】 准备工作: 腾讯云 开放3000 端口 Mac OS...

  • 阿里云OSS图片上传实践

    目前公司里的项目用到的文件管理服务都是阿里云OSS,下面介绍下Android端上传图片到阿里云OSS的具体实践。 ...

  • 阿里云上传图片

    + (void)uploadImages:(NSArray *)images isAsync:(BOOL)isAs...

  • 阿里云上传图片

    引言 为了更好的掌握 OSS 存储,可以先去了解一下这些基本概念[https://help.aliyun.com/...

  • 封装直传阿里云存储文件上传控件

    本文目标 封装一个直传阿里云OSS云存储图片上传控件 控件效果图 上传之前 上传成功 预览图片 文件上传前后台及阿...

网友评论

      本文标题:Python上传图片到阿里云os

      本文链接:https://www.haomeiwen.com/subject/lmgdhktx.html