上传图片为什么要加 MD5 ?

      答 :避免用户上传图片的时候图片名重复,而引起先上传的图片被后上传的图片所覆盖的失误!

   MD5是什么?

      答:一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

   

    1.  在project的同级目录下,手动创建文件夹 static  在static下创建img文件夹

    2.  setting.py   

STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'static')
]

    3. index.html

<form action="" method="post" enctype="multipart/form-data">

    {% csrf_token %}

   上传图片: <input type="file" name="image"> <br><br>

             <button type="submit">提交</button>

</form>    

    4. views.py

 # 导入刚刚在setting.py里面配置的文件
from helloworld_project.settings import  STATICFILES_DIRS
import os,time,hashlib

# 返回MD5   (防止添加的相同照片名字,引起照片覆盖)
def get_md5(str_):
    m=hashlib.md5()
    m.update(str_.encode())
    return m.hexdigest()   # 返回的绝对唯一MD5值

def image(request):
    now=time.time()
    file_name=get_md5(str(now))
    if request.method=="GET":
        return render(request, "add_image.html")
    if request.method=="POST":
        # fp 获取到上传文件对象
        fp = request.FILES.get("image")
        if fp:
            path = os.path.join(STATICFILES_DIRS[0], "img/" + file_name+"."+ fp.name.split(".")[-1])
            # fp.name # 文件名
            # yield = fp.chunks  # 流式获取文件内容
            # fp.read() 直接读取文件内容
            if fp.multiple_chunks(): # 判断是否是大文件传入
                file_yield = fp.chunks()   #若果是大文件传入的话,就需要遍历,然后挨个写入
                with open(path,'wb') as f:
                    for buf in file_yield:
                        f.write(buf)
                    else:
                        print("大文件上传完毕")
            else:
                with open(path,'wb') as f:
                    f.write(fp.read())
                print("小文件上传完毕")

# 将图片的连接添加到数据库,(数据库的字段类型为 CharField   长度:max_length=300   (长度不要过短))
        models.Image.objects.create(
            image=( "img/" + file_name+"."+ fp.name.split(".")[-1])
        )
    return redirect("/")   

Django-----加入MD5格式上传图片的更多相关文章

  1. EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  2. Python+js进行逆向编程加密MD5格式

    一.安装nodejs 二.安装:pip install PyExecJs 三.js源文件Md5格式存放本地,如下 var n = {}function l(t, e) {var n = (65535 ...

  3. django使用admin站点上传图片

      Django有提供文件系统支持,在Admin站点中可以轻松上传图片.使用Admin站点保存图片,需要安装Python的图片操作包 pip install Pillow 1 配置 默认情况下,Dja ...

  4. django 高级扩展-中间件-上传图片-分页-富文本-celery

    """ django 高级扩展 一.静态文件 1.css,js,json,图片,字体等 2.配置setting,在最底下设置静态文件目录,写入下面代码 #配置静态文件目录 ...

  5. django rest framework批量上传图片及导入字段

    一.项目需求 批量上传图片,然后批量导入(使用excel)每个图片对应的属性(属性共十个,即对应十个字段,其中外键三个). 二.问题 一次可能上传成百上千张图片和对应字段,原来数据库的设计我将图片和对 ...

  6. django 的 ajax 方式上传图片

    页面代码: <html>     <!-- 引入相关的js文件,相对路径  -->     <script type="text/javascript" ...

  7. django基础知识之上传图片:

    上传图片 当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为<input type="file" name="& ...

  8. c# API接受图片文件以Base64格式上传图片

    /// base64上传图片 /// </summary> /// <returns>成功上传返回上传后的文件名</returns> [HttpPost] publ ...

  9. django —— KindEditor - 跨域上传图片

    #跨域上传方法 def frontupload(request): if request.method == 'POST': item = {} file = request.FILES.get('i ...

随机推荐

  1. 2019最新WEB前端开发小白必看的学习路线(附学习视频教程)

    2019最新WEB前端开发小白必看的学习路线(附学习视频教程).web前端自学之路:史上最全web学习路线,HTML5是万维网的核心语言,标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次 ...

  2. 【数据使用】3k水稻数据库现成SNP的使用

    ---恢复内容开始--- 我们经常说幻想着使用已有数据发表高分文章,的确,这样的童话故事每天都在发生,但如何走出第一步我们很多小伙伴不清楚,那么我们就从水稻SNP数据库的使用来讲起. http://s ...

  3. K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群

    0x00 概述 本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansi ...

  4. C++读写图片数据转成Base64格式的一种方法

    最近在一个项目中要实现在客户端和服务端之间传送图片文件的功能,采用了C++语言读写图片转化成Base64格式进行传输.具体代码如下: //++Base64.h #pragma once class C ...

  5. eclipse软件仿真操作

    1.编写程序代码(以SDRAM为例) 1.1 编写head.s汇编文件 .equ SDRAM_BASE, 0x30000000 .equ MEM_CTL_BASE, 0x48000000 .text ...

  6. git分散式版本管理系统,从安装到基本使用

    首先,当然是安装git了,不用寻思,官网下载即可 https://git-scm.com/downloads 第二是设置账户,鼠标右键,选择git bush,在命令窗口中进行设置 git config ...

  7. gitlab或github下fork后如何同步源的新更新内容?

    两种方式: 项目 fetch 到本地,通过命令行的方式 merge 懒人方法,只用 Github ,不用命令行 1.项目 fetch 到本地,通过命令行的方式 merge 提示:跟上游仓库同步代码之前 ...

  8. Vue提供操作DOM的方法

    <div ref="wrapper"> Vue.js 提供了我们一个获取 DOM 对象的接口—— vm.$refs.在这里,我们通过了 this.$refs.wrapp ...

  9. 剑指offer 02:替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 解题代码 public cla ...

  10. ubuntu解压命令(转)

    -c: 建立压缩档案 -x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的参数是 ...