django上傳圖片簡單驗證以及自動修改圖片名稱

django實現文件(圖片)上傳以後自動修更名稱以及頁面上傳圖片時的各類提醒:html

一、先在你項目中添加一個文件夾如:system 在文件夾下添加__init__.py 和storage.py文件,並在storage.py中添加以下代碼:web

# -*- 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)django

# 重寫 _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)數組

二、在models.py文件中添加以下代碼:dom

from system.storage import ImageStorage加密

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


存儲結果爲:img/2018/3/29/2018010356_15.png 或者img/2018/3/29/eafd7b7873f94e1a7dc9e568991a5645.jpgcode

三、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')
四、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>orm

function submit_successful()
{
var x = document.getElementById('uploadimg');
if (x.value == ''){
alert('上傳失敗,請選擇要上傳的圖片!')csrf


}
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>

相關文章
相關標籤/搜索