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 ...
随机推荐
- c#一步一步实现ORM(二)
c#一步一步实现ORM(二) 上一篇描述了简单的思路,这一片我们来稍微细化一下 1插入的时候忽略某些字段 public int Insert<T>(T o, params string[] ...
- Kali Linux常用服务配置教程获取IP地址
Kali Linux常用服务配置教程获取IP地址 下面以Kali Linux为例,演示获取IP地址的方法 (1)设置网络接口为自动获取IP地址.在Kali Linux的收藏夹中单击图标,将显示所有的程 ...
- python一个命令开启http服务器
1.例如想共享文件在 E:python文件 打开cmd cd E: cd python文件 #进入要分享的文件夹 2.执行py脚本文件 python -m http.server 3.访问 本机i ...
- python3 request模块初使用
import requests class Interface_Request: def __init__(self,url,mobilephone,pwd): '''login参数初始化''' se ...
- python文本读写数据
# 写方法1 f = open('tmp.txt','w') f.write('hello world') f.close() # 写方法2 with open('tmp.txt','w') as f ...
- jmeter 使用问题
问题1:导入脚本失败,提示 解决:没有安装JMemter plugins manager插件,具体安装参考http://www.cnblogs.com/cxx1/p/7883820.html,第二步.
- Jmeter初步
Jmeter 3. 去掉没有必要的结果记录 对于一些不必要的日志信息可以暂时不要记录. 例如:结果树. 当然可以勾选记录那些失败的日志. 聚合报告中,点击 configure,根据需求设置自己想要保 ...
- __x__(22)0907第四天__ 垂直外边距重叠
外边距重叠, 也叫“外边距合并”,指的是,当两个外边距相遇时,它们将形成一个外边距. 合并后的外边距的高度,等于两个发生合并的外边距的高度中的较大者...在布局时,易造成混淆. 1. 上下元素 垂直外 ...
- eclipse部分常用快捷键
-------------eclipse常用快捷键------------- 1.alt+?或alt+/:自动补全代码或者提示代码 2.ctrl+o:快速outline视图 3.ctrl+shift+ ...
- php正则表达式 剔除字符串中 ,除了汉字的字符(只保留汉字) php 正则 只保留汉字,剔除所有符号
<?php //提取字符串中的汉字其余信息剔除 $str='f龙,真 .,.,.?!::·…~&@#,.?!:;.……-&@#“”‘’〝 "〞'´'>< ...