阿里云oss上传图片

在项目开发过程中,文件存储无非就是第一,存放到我们自己的服务器,但是这种方式有一个很大的弊端就是随着用户的增加,存放到服务器的数据或者图片越来越多,那么就会很占服务器的带宽,这样后期会很影响服务器的性能,导致卡顿,第二就是使用阿里云的oss数据存储,但是注意,阿里云的域名需要配置一下,不然我们后端返回给前端的url,前端拿到url后拉取图片,会报跨域错误,配置下就可以了,阿里云存储文件有两种方式:

  1. 当用户上传图片时,前端向我们后端去请求一个接口,后端向阿里云要一个token,然后后端把拿到的token返回给前端,前端拿到token后直接向oss请求保存图片
  2. 前端直接把图片以流的方式发送给后端,后端自己去向oss发送请求保存图片,这里代码演示的就是这一种情况
import oss2
from api_share.aliyun_oss import ossconf

class OssFileUploading(object):
    """oss文件上传工具类"""
    
    def bytesfile(self, filename, content):
        """
        上传bytes类型数据:这里只上传头像
        objectsname: 请求图片的url
        content: 二进制的数据
        """
        auth = oss2.Auth(ossconf.OSS_ACCESSKEYID, ossconf.OSS_ACCESSKEYSECRET)
       
        bucket = oss2.Bucket(auth, ossconf.OSS_ENDPOINT, ossconf.OSS_BUCKETNAME)
        # 这里只上传到头像那个文件夹内
        objectsname = 'uploads/user_avatar/' + filename
        
        bucket.put_object(objectsname, content)
        
        return ossconf.OSS_REQUEST_URL + objectsname

    def assignurlfile(self, objectsname, content):
        """
        指定url
        objectsname: 不写死
        """
        auth = oss2.Auth(ossconf.OSS_ACCESSKEYID, ossconf.OSS_ACCESSKEYSECRET)

        bucket = oss2.Bucket(auth, ossconf.OSS_ENDPOINT, ossconf.OSS_BUCKETNAME)
    
        bucket.put_object(objectsname, content)

        return ossconf.OSS_REQUEST_URL + objectsname
# 阿里云oss配置

OSS_ACCESSKEYID = 'LTAI4G2Q1xxxxxxxcDtF'

OSS_ACCESSKEYSECRET = 'vjUHOKsIT8xxxxxxrxSq6eG'

OSS_BUCKETNAME = 'qxxxxxe5'

OSS_ENDPOINT = 'http://oss-cn-hangzhou.aliyuncs.com'

# https://oss-cn-hangzhou.aliyuncs.com + OSS_BUCKETNAME
OSS_REQUEST_URL = 'https://img.qxxxxxx.com/'


class TaskImageView(ListAPIView,DestroyAPIView,CreateAPIView,UpdateAPIView):
    """任务图片管理"""
    @transaction.atomic
    def create(self, request, *args, **kwargs):
        name = request.data.get('name','')
        is_show = request.data.get('is_show',False)
        image = request.FILES.get('image', None)
        if is_show == 'false':
            is_show = False
        else:
            is_show = True
        if not image:
            return APIResponse.fail(message='图片不能为空')
        if name and len(name)>=64:
            return APIResponse.fail(message='名称长度不能超出63位')
        last = image.name.split('.')[-1]
        if last not in ['jpeg', 'jpg', 'png', 'pdf', 'tga', 'tif', 'svg', 'gif', 'bmp']:
            return APIResponse.fail(message='不支持的图片格式')
        file_name = str(uuid.uuid4()) + '.' + last
        # image.name = file_name
        content = image.read()
        objectsname = 'uploads/taskimage/' + file_name
        avatar = OssFileUploading().assignurlfile(objectsname, content)

        TaskImage.objects.create(
            name=name,
            is_show=is_show,
            image=avatar
        )
        return APIResponse.success(message='OK')
  1. 阿里云oss官网:地址
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值