zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    js中call,apply,bind方法的用法
    使用react脚手架初始化一个项目
    常用的CSS居中方式
    react组件之间的通信
    React脚手架less的安装
    js操作DOM的方法
    常用的ement语法
    本机系统通过SSH访问虚拟机中的Linux系统
    Java_amr格式转mp3
    linux/ubantu 安装 mysql 并且使其支持远程连接
  • 原文地址:https://www.cnblogs.com/misswangxing/p/8667480.html
Copyright © 2011-2022 走看看