Django中上传图片---避免因图片重名导致被覆盖
上一篇文章中(https://www.cnblogs.com/lutt/p/10640412.html),我们以图片文件夹+图片名字的方式来储存图片,这样的做法会导致有重名的图片会导致之前的图片被覆盖,解决这一问题的方法:MD5时间戳,图片名称可能会重复,但是上传图片的时间生成的MD5字符串是唯一的,可以以此来作为图片保存的方式,就避免了图片重名导致覆盖的惨剧,下面来码一段详细的代码:
from django.utils import timezone # 获取当前时间
import hashlib # 给当前时间编码
def pic_upload(request):
if request.method == "GET":
return render(request,"helloapp/pic_upload.html",locals())
if request.method == "POST":
error = ""
fp = request.FILES.get("file")
# fp 获取到的上传文件对象
if fp:
time_now = timezone.now() # 获取当前日期时间
print(time_now) # 2019-04-03 00:51:21.225391+00:00 当前打印的时间格式是这样,不能直接使用,需要用MD5编码
m = hashlib.md5()
m.update(str(time_now).encode()) # 给当前时间编码
time_now = m.hexdigest()
print(time_now) # ec3b25c7e44ded02d092c57dded2d5eb 此时为编码后的时间
path = os.path.join(STATICFILES_DIRS[0],'image/' + time_now + fp.name) # 上传文件本地保存路径
# fp.name #文件名
#yield = fp.chunks() # 流式获取文件内容
# fp.read() # 直接读取文件内容
if fp.multiple_chunks(): # 判断上传文件大于2.5MB的大文件
# 为真
file_yield = fp.chunks() # 迭代写入文件
with open(path,'wb') as f:
for buf in file_yield: # for情况执行无误才执行 else
f.write(buf)
else:
print("大文件上传完毕")
else:
with open(path,'wb') as f:
f.write(fp.read())
print("小文件上传完毕")
models.ImgPath.objects.create(path=('image/' + time_now + fp.name))
else:
error = "文件上传为空"
return render(request,"helloapp/pic_upload.html",locals())
return redirect(reverse("picindex") )# 重定向到首页
Django中上传图片---避免因图片重名导致被覆盖的更多相关文章
- javascript js函数重名后面的覆盖前面的
js 函数重名后面的覆盖前面的 var x = 1; var y = 0; var z = 0; function add(n) { return n = n + 1; } ...
- django中上传图片的写法(转)
view参数 @csrf_exemptdef before_upload_avatar(request): before = True return render_to_response( ...
- django中上传图片的写法
view参数 @csrf_exemptdef before_upload_avatar(request): before = True return render_to_response( ...
- javaweb中上传图片并显示图片,用我要上传课程信息(里面包括照片)这个例子说明
原理: 从客户端上传到服务器 照片——文件夹——数据库 例如:桌面一张照片,在tomacat里创建upload文件夹,把桌面照片上传到upload文件夹里,并且把照片的 ...
- Python3基础 父,子类普通方法重名 子类方法覆盖父类方法
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Django中怎么做图片上传--图片展示
1.首先是html页面的form表单的三大属性,action是提交到哪,method是提交方式,enctype只要有图片上传就要加这个属性 Django框架自带csrf_token ,所以需要在前端页 ...
- c++中的重名问题
看C++视频教程-范磊主讲(2.91G)视频学习笔记整理. 1.c++为什么要引入名字空间(namespace)? c++引入名字空间这个概念,是为了避免重名问题,比如说避免重复的函数名或者变量名引起 ...
- django中tinymce添加图片上传功能
主要参考以下: https://pixabay.com/en/blog/posts/direct-image-uploads-in-tinymce-4-42/ http://blog.csdn.net ...
- 在IE中,JS方法名和input的name重名时,调用该方法无效
在IE中,JS方法名和input的name重名时,调用该方法无效.提示:网页错误详细信息 用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1 ...
随机推荐
- 转载:使用Tornado+Redis维护ADSL拨号服务器代理池
我们尝试维护过一个免费的代理池,但是代理池效果用过就知道了,毕竟里面有大量免费代理,虽然这些代理是可用的,但是既然我们能刷到这个免费代理,别人也能呀,所以就导致这个代理同时被很多人使用来抓取网站,所以 ...
- blur和click事件冲突
一.问题描述文本框的blur事件和div元素的click事件出现冲突.在input的blur事件中,我们隐藏div元素.在div的click事件中,我们清除input的内容,并隐藏自身.当我们在inp ...
- QVM 实操记 - 18.12.28
视频回放地址:https://i.iamlj.com/mp4/QVM-IMC-12.27-1080P.mp4 目录 目录 常规开发部署流程 准备工作 开发准备 网站部署 操作步骤 重装系统 LANP环 ...
- Java语言基础之数组
引出数组和数组的定义 为什么要使用数组: 问题一: 声明变量时,每一个单独的变量都要对应一个变量名,但现在要处理一组相同类型的数据时,如要表示班上100个人的年纪,绝不能定义100个变量来表示每一个人 ...
- 滑动viewpage
Adapter: package com.example.fashionyuan.Adatader; import android.support.v4.app.Fragment;import and ...
- C++接口与实现的抽象分离
IPerson.h #ifndef I_PERSON_H_ #define I_PERSON_H_ #include <string> #include <ostream> c ...
- Java+面向对象初学感想
在先导课之前我未曾接触C和Python之外的语言,在大一学年的课程中,用面向过程的思想方法足以完成绝大多数课程要求,故而我也对面向对象的编程思想知之甚少,虽然多有耳闻但是对它一直没有一个正式的学习了解 ...
- docker container 互联
创建一个 network docker network create test-network 创建rocketmq docker run -d -p 9876:9876 -p 10909:1090 ...
- Docker 试用
Docker还是从.net core 了解的 百度百科 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可 ...
- 长连接锁服务优化实践 C10K问题 nodejs的内部构造 limits.conf文件修改 sysctl.conf文件修改
小结: 1. 当文件句柄数目超过 10 之后,epoll 性能将优于 select 和 poll:当文件句柄数目达到 10K 的时候,epoll 已经超过 select 和 poll 两个数量级. 2 ...