官网参考:https://docs.djangoproject.com/zh-hans/3.2/howto/custom-file-storage/

当前业务需要使用django的admin后台进行数据的管理,需要实现文件的上传云端-腾讯云

具体实现:

安装依赖包:
pip install cos-python-sdk-v5==1.9.10

自定义一个存储类:

1)继承Django.core.files.storage.Storage

2)重写save方法

3)添加装饰器,方便进行数据库文件的迁移django.utils.deconstruct.deconstructible

demo:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from django.conf import settings
from django.core.files.storage import Storage
from django.utils.deconstruct import deconstructible
from qcloud_cos import CosConfig, CosS3Client from .common import generate_img_url secret_id = settings.OSS_QCLOUD_SECRET_ID
secret_key = settings.OSS_QCLOUD_SECRET_KEY
region = settings.OSS_QCLOUD_REGION
bucket = settings.OSS_QCLOUD_BUCKET
token = settings.OSS_QCLOUD_TOKEN
scheme = settings.OSS_QCLOUD_SCEHME
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)
client = CosS3Client(config)
host = settings.OSS_PREFIX @deconstructible
class CosStorage(Storage): def save(self, name, content, max_length=None):
"""
重写save方法
"""
# suffix = name.split('.')[-1]
# key = self.generate_key(suffix)
key = generate_img_url(name)
try:
response = client.put_object(
Bucket=bucket,
Body=content.read(),
Key=key,
StorageClass='STANDARD',
EnableMD5=True
)
except Exception as e:
raise
return host + key def url(self, name):
return name

配置文件中需要添加配置项:

OSS_QCLOUD_SECRET_ID = 'sercret-id'
OSS_QCLOUD_SECRET_KEY = 'secret-key'
OSS_QCLOUD_REGION = '所选区域'
OSS_QCLOUD_BUCKET = '创建的bucket'
OSS_QCLOUD_TOKEN = None
OSS_QCLOUD_SCEHME = 'https'
OSS_NAMESPACE = '可以区分场景'
OSS_PREFIX = 'https://xxx.cos.所选区域.myqcloud.com'

公共方法:

# 生成图片路径
def generate_img_url(file_name, scene='default'):
file_ext = file_name.rsplit('.', 1)[-1]
new_file_name = scene + '_' + str(datetime.datetime.today()).replace('-', '').replace(' ', '_').replace(':', '') + '.' + file_ext
namespace = settings.OSS_NAMESPACE
return f'/{namespace}/' + new_file_name

最后添加到model中定义的字段中

file = models.FileField(verbose_name='文件', storage=CosStorage())

# 注意:这里使用的FileField   如果是图片的话可以使用ImageField

参考:https://www.jianshu.com/p/cb7a7f31e962

Django admin实现图片上传到腾讯云的更多相关文章

  1. 【POI】java服务生成List数据集合,后台服务生成xlsx临时文件,并将临时文件上传到腾讯云上

    场景: java服务生成List数据集合,后台服务生成xlsx临时文件,并将临时文件上传到腾讯云上 今日份代码: 1.先是一个变量,作为文件名 private static final String ...

  2. 5行代码实现微信小程序图片上传与腾讯免费5G存储空间的使用

    本文介绍了如何在微信小程序开发中使用腾讯官方提供的云开发功能快速实现图片的上传与存储,以及介绍云开发的 5G 存储空间的基本使用方法,这将大大提高微信小程序的开发效率,同时也是微信小程序系列教程的视频 ...

  3. 快速高效实现微信小程序图片上传与腾讯免费5G存储空间的使用

    本文介绍了如何在微信小程序开发中使用腾讯官方提供的云开发功能快速实现图片的上传与存储,以及介绍云开发的 5G 存储空间的基本使用方法,这将大大提高微信小程序的开发效率 对于一般的图片上传功能开发,我们 ...

  4. VS2019 开发Django(六)------Admin中图片上传

    导航:VS2019开发Django系列 该篇继续完善在Django的管理界面上传图片,因为LazyOrders小程序中菜单需要展示图片,而不是一个文本路径,所以我们还需要继续改造一下. 1)安装pil ...

  5. 如何把base64格式的图片上传到到阿里云oss c#版

    今天碰到需要把canvas上的的图片转存到阿里云oss,于是百度了半天,一个能打的答案都没有.怒了,自己搞起. 代码超级简单,需要先引入nuget 中啊里云的oss api 1 byte[] arr ...

  6. k8s使用helm打包chart并上传到腾讯云TencentHub

    本文只涉及Helm的Chart操作,不会对其他知识进行过多描述.至于安装这块,麻烦自行百度吧,一大堆呢. 在容器化的时代,我们很多应用都可以部署在docker,很方便,而再进一步,我们还有工具可以对d ...

  7. django admin后台接入tinymce并且支持图片上传

    首先:下载tinymce 地址是https://www.tinymce.com/ 点击download 下载社区版本即可 接着:把压缩包内tinymce目录内的所有文件和文件夹复制到Django项目中 ...

  8. Django配置图片上传

    本文首先实现django中上传图片的过程,然后解决富文本编辑器文件上传的问题. 一. 上传图片 1.在 settings.py 中配置MEDIA_URL  和 MEDIA_ROOT 在 D:\blog ...

  9. Django文件上传【单个/多个图片上传】

    准备工作 python:3.6.8 django:2.2.1 新建django项目 确定项目名称.使用的虚拟环境[当然这个也可以后期修改].app的名称 创建成功,选择在新的窗口中打开 图片上传 修改 ...

  10. Django(十九)文件上传:图片上传(后台上传、自定义上传)、

    一.基本设置 参考:https://docs.djangoproject.com/zh-hans/3.0/topics/http/file-uploads/ 1)配置project1/settings ...

随机推荐

  1. 【YashanDB知识库】YAS-00220, utf8 sequence is wrong

    [问题分类]功能使用 [关键字]YAS-00220,utf8 sequence is wrong [问题描述]在数据库执行select语句时,或者在exp导出数据库用户时报这个错误,表字段中同时存在n ...

  2. a web app for deep learning - deep-learning-training-gui

    安装该项目 ENV: Win11 Anaconda 主要参考 https://www.tensorflow.org/install/pip 1. 安装 python 3.9, 在Anaconda 新建 ...

  3. how to log iptables events

    warning level: iptables -A INPUT -j LOG --log-prefix "BAD_INPUT: " --log-level 4 iptables ...

  4. sicp每日一题[2.1]

    Exercise 2.1 Exercise 2.1: Define a better version of make-rat that handles both positive and negati ...

  5. GRLSTM: 基于图的残差LSTM轨迹相似性计算《GRLSTM: Trajectory Similarity Computation with Graph-Based Residual LSTM》(轨迹路网融合、知识图谱嵌入、图神经网络、残差网络、点融合图、多头图注意力网络GAT、残差LSTM、点感知损失函数(图的点损失函数、轨迹的点损失函数))

    2023年10月18日,14:14. 来不及了,这一篇还是看的翻译. 论文:GRLSTM: Trajectory Similarity Computation with Graph-Based Res ...

  6. CSS – ellipsis and line-clamp

    前言 CSS 很早就有 build-in 方案 for 省略号 ellipsis 了. 但是只能 one line, 遇到多行的时候只能用 JS. 后来出了 line-clamp 终于把 multip ...

  7. Azure 学习笔记

    选择 VM 配套 https://docs.azure.cn/zh-cn/virtual-machines/sizes  https://docs.azure.cn/zh-cn/virtual-mac ...

  8. POJ-3176 Cow Bowling(基础dp)

    The cows don't use actual bowling balls when they go bowling. They each take a number (in the range ...

  9. angularjs中控制视图的控制器的两种注入依赖项及服务的写法

    在AngularJS中,控制器是用于控制视图行为的重要组件.当定义控制器时,有两种主要的方式注入依赖项: 1. 显式依赖注入,聚聚使用字符串数组形式来注入依赖项: myapp.controller(' ...

  10. Java如何将Object转换成指定Class对象

    在Java中,将Object转换为指定类型的Class对象实际上是两个不同概念的操作: 将Object实例转换为特定类型的实例:这通常涉及到类型转换(如(MyType) myObject)或者通过反射 ...