本文实例讲述了Django框架文件上传与自定义图片上传路径、上传文件名操作。分享给大家供大家参考,具体如下:
文件上传
1、创建上传文件夹
在static文件夹下创建uploads用于存储接收上传的文件
在settings中配置,
MEDIA_ROOT=os.path.join(BASE_DIR,r'static/uploads')
2、定义上传表单
<form action="{% url 'app:do_upload' %}" method="post" enctype="multipart/form-data">
文件数据存储在request.FILES
属性中
文件上传必须使用POST请求方式
<form method='post' action='x' enctype='multipart/form-data'> {% csrf_token %} <input type='file' name='icon'> <input type='submit' value='上传'> <form>
3、手动存储文件
存储到关联用户的表字段中
def savefIcon(request): if request.method == 'POST' f = request.FILES['icon'] filePath = os.path.join(settings.MEDIA_ROOT,f.name) with open(filePath,'wb') as fp: for part in f.chunks(): fp.write(part)
4、django内置存储
- ImageField
- 要导入pillow模块
- FileField
- 从request.FILES将文件获取出来,直接赋值给字段
- 存储的时候,数据库存储的是路径
- 存储在MEDIA_ROOT
自定义图片上传路径和上传文件名
图片上传中,如果不对上传的文件名做处理,很容易引起文件名重复,这会覆盖之前上传的图片,django提供了自定义上传文件名的方法。
def generate_filename(self, instance, filename): """ Apply (if callable) or prepend (if a string) upload_to to the filename, then delegate further processing of the name to the storage backend. Until the storage layer, all file paths are expected to be Unix style (with forward slashes). """ if callable(self.upload_to): filename = self.upload_to(instance, filename) else: dirname = datetime.datetime.now().strftime(self.upload_to) filename = posixpath.join(dirname, filename) return self.storage.generate_filename(filename)
上面的代码是django中对ImageField上传时,生成文件名的处理方式。如果 upload_to 的参数是可调用的,则直接调用来生成文件名(包括静态文件夹后的文件路径)。要自定义上传文件名就从这里着手。
import uuid from django.db import models def image_upload_to(instance, filename): return 'original_image/{uuid}/{filename}'.format(uuid=uuid.uuid4().hex, filename=filename) class TestImageUpload(models.Model): image = models.ImageField(upload_to=image_upload_to)
按照上面的方式,就可以按照自己的意愿随意的处理文件名了(函数的参数个数是固定的)。
希望本文所述对大家基于Django框架的Python程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
金钱帮资源网 Copyright www.kbjia.com
暂无“Django框架文件上传与自定义图片上传路径、上传文件名操作分析”评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年10月12日
2024年10月12日
- 张小英专辑《岁月留声》2CD精装版Disc1(皇星全音)[WAV+CUE]
- 群星.1995-福星高照2将爱实现【福茂】【WAV+CUE】
- 陈奕迅.2009-H3M(加强版)【新艺宝】【WAV+CUE】
- 杜德伟.1993-准我再一次【华纳】【WAV+CUE】
- 赖冰霞.1994-妈妈好【南方】【WAV+CUE】
- 黄思婷2011-等待有情天[豪记唱片][WAV+CUE]
- 徐玮1984-跟过客远走·远离的钟声[新加坡限量复刻版][WAV+CUE]
- 群星《说唱梦工厂 先导片》[FLAC/分轨][109.67MB]
- 群星《说唱梦工厂 第1期》[320K/MP3][68.3MB]
- 群星《说唱梦工厂 第1期》[FLAC/分轨][274.94MB]
- 群星.2024-舍不得星星影视原声带【TME】【FLAC分轨】
- 许志豪.2024-袂记的青春【发现梦想】【FLAC分轨】
- 黄义达.2011-微光(EP)【橙天娱乐】【WAV+CUE】
- 小虎队.1989-逍遥游【飞碟】【WAV+CUE】
- 范丽丝.1977-爱慕(2016复刻版)【丰荣】【WAV+CUE】