上传图片为什么要加 MD5 ?

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

   MD5是什么?

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

   

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

    2.  setting.py   

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

    3. index.html

  1. <form action="" method="post" enctype="multipart/form-data">
  2.  
  3. {% csrf_token %}
  4.  
  5. 上传图片: <input type="file" name="image"> <br><br>
  6.  
  7. <button type="submit">提交</button>
  8.  
  9. </form>

    4. views.py

  1. # 导入刚刚在setting.py里面配置的文件
  2. from helloworld_project.settings import STATICFILES_DIRS
  3. import os,time,hashlib
  4.  
  5. # 返回MD5 (防止添加的相同照片名字,引起照片覆盖)
  6. def get_md5(str_):
  7. m=hashlib.md5()
  8. m.update(str_.encode())
  9. return m.hexdigest() # 返回的绝对唯一MD5值
  10.  
  11. def image(request):
  12. now=time.time()
  13. file_name=get_md5(str(now))
  14. if request.method=="GET":
  15. return render(request, "add_image.html")
  16. if request.method=="POST":
  17. # fp 获取到上传文件对象
  18. fp = request.FILES.get("image")
  19. if fp:
  20. path = os.path.join(STATICFILES_DIRS[0], "img/" + file_name+"."+ fp.name.split(".")[-1])
  21. # fp.name # 文件名
  22. # yield = fp.chunks # 流式获取文件内容
  23. # fp.read() 直接读取文件内容
  24. if fp.multiple_chunks(): # 判断是否是大文件传入
  25. file_yield = fp.chunks() #若果是大文件传入的话,就需要遍历,然后挨个写入
  26. with open(path,'wb') as f:
  27. for buf in file_yield:
  28. f.write(buf)
  29. else:
  30. print("大文件上传完毕")
  31. else:
  32. with open(path,'wb') as f:
  33. f.write(fp.read())
  34. print("小文件上传完毕")
  35.  
  36. # 将图片的连接添加到数据库,(数据库的字段类型为 CharField 长度:max_length=300 (长度不要过短))
  37. models.Image.objects.create(
  38. image=( "img/" + file_name+"."+ fp.name.split(".")[-1])
  39. )
  40. 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. docker基本部署

    一.基本概念docker 1.镜像(Image) Docker 镜像就是一个只读的模板. 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用 ...

  2. docker容器与大数据组件的冲突点

    1.容器里面安装spark,外面的程序(安装spark主机的容器)会连接不上集群.理由:这个组件用的akka,连接上集群,会提示: akka.ErrorMonitor: dropping messag ...

  3. Python3 批量替换文本内容

    Python3 批量替换文本内容 示例: # coding:utf8 import os; def reset(): i = 0 path = r"H:\asDemo\workdemo\aw ...

  4. Windows SubSystem for Linux

    Summary of Windows SubSystem for Linux Install Ubuntu Run PowerShell as administrator and input: Ena ...

  5. .NET Core 2.0 httpclient 请求卡顿解决方法

    var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip,UseProxy ...

  6. 点击倒计时60S获取验证码

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  7. C#关于多线程及线程同步 lock锁的应用

    Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...

  8. 友盟分享因为Bundle Id 校验不通过 无法分享到微信

    微信分享应用里面资料有个APP bundle id需要填的, 以前申请的时候不需要填也可以正常分享, 但是最近开始微信需要验证, 在那填上APP对应bundle ID 就可以了

  9. jquery 获取当前点击的是谁

    //今天早上有人问这个问题 想着没写过jquery的笔记 //那就随便写一下吧 下面两个方法 根据不同情况而定用哪种方法$(".class").click(function(){ ...

  10. .Net文件压缩

    NuGet中下载Ionic.Zip: public static class ZipHelper { /// <summary> /// 压缩文件 /// </summary> ...