django上传图片简单验证以及自动修改图片名称

django实现文件(图片)上传之后自动修改名称以及页面上传图片时的各种提醒:

1、先在你项目中添加一个文件夹如:system 在文件夹下添加__init__.py 和storage.py文件,并在storage.py中添加如下代码:

# -*- coding: UTF-8 -*-
from django.core.files.storage import FileSystemStorage
from django.http import HttpResponse
class ImageStorage(FileSystemStorage):
from django.conf import settings

def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL):
# 初始化
super(ImageStorage, self).__init__(location, base_url)

# 重写 _save方法
def _save(self, name, content):
import os, time, random
# 文件扩展名
ext = os.path.splitext(name)[1] #[0] 为文件名称
#上传的文件原名
source_name = os.path.splitext(name)[0]
# 文件目录
d = os.path.dirname(name)
# 定义文件名,年月日时分秒随机数,也可以使用MD5加密方式等等。。
fn = time.strftime('%Y%m%d%H%M%S')
fn = fn + '_%d' % random.randint(0,100)
#定义文件名,md5加密方式
import hashlib
hash = hashlib.md5()
hash.update(source_name.encode('utf-8'))
fn1 = hash.hexdigest()
# 重写合成文件名
name = os.path.join(d, fn + ext) #若文件名以md5方式换成fn1即可
# 调用父类方法
return super(ImageStorage, self)._save(name, content)

2、在models.py文件中添加如下代码:

from system.storage import ImageStorage

img=models.ImageField(upload_to='img/%Y/%m/%d',storage=ImageStorage())


存储结果为:img/2018/3/29/2018010356_15.png 或者img/2018/3/29/eafd7b7873f94e1a7dc9e568991a5645.jpg

3、views
def uploadImg(request):
if request.method == 'POST':
if request.FILES.get('img'): #img为upload.html中的input标签名称
new_img = models.Upload_img(
img = request.FILES.get('img'),
name = request.FILES.get('img').name
)
type_list = ['.jpg','.png','.gif','.webp']
#判断上传图片格式
if os.path.splitext(new_img.name)[1].lower() in type_list:
new_img.save()
return render(request,'blog1/upload.html')
4、upload.html
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input id="uploadimg" type="file" name="img" />
<button type="submit" onclick="submit_successful()">上传</button>
<p id="tip"></p>
<script>

function submit_successful()
{
var x = document.getElementById('uploadimg');
if (x.value == ''){
alert('上传失败,请选择要上传的图片!')


}
else
{
var AllowExt=['.jpg','.gif','.png','.webp'];
<!-- 获取图片格式:.jpg,.png -->
var FileExt=x.value.substr(x.value.lastIndexOf(".")).toLowerCase();
<!-- 判断一个字符串是否在数组中 -->
if (AllowExt.toString().indexOf(FileExt) > -1){

alert('上传成功!!!');

}
else
{
alert('上传失败,上传文件格式为:(.jpg,.png,.gif,.webp),当前格式为:'+FileExt+'请重新上传!');
}
}


}
</script>
</form>

posted @ 2018-03-29 01:39  菜鸟的日记  阅读(1903)  评论(0编辑  收藏  举报