解决:Dropzone.js的图片拖拽上传保存本地文件夹

2017-04-17  本文已影响526人  mrlevo520

拖拽上传JS包:Dropzone.js
图片展示JS包:PhotoSwipe.js
Mac OS:Sierra 10.12.2
python 2.7
Django 1.6


前言

在学习前端的时候需要用到图片拖拽上传展示,这里记录一下踩过的坑以及解决办法


目的

图片拖拽或点击上传,在另一个页面根据数据库id索引调出图片


图片拖拽上传部分

html

<!-- 图片拖拽 -->
<script src="/media/js/dropZone/lib/dropzone.js"></script>
<link rel="stylesheet" href="/media/js/dropZone/downloads/css/dropzone.css">

<div class="site-text site-block" style="border-radius: 8px;float:left;width:525px;height:500px; margin-right:25px;border:3px;margin-left: 3%;margin-top: 3%">

<!-- 取消按钮但是目前只能删除图却无法进行从数据库方面的删除 -->
<form id="dropz" width="100px" height="150px" class="dropzone" enctype="multipart/form-data" style="height:400px;width: 520px">{% csrf_token %} 
<div style="margin-left: 20%;">
  <input type="" name="order_id" style="width:280px;border:1px solid #FF8C00 ;" placeholder="请先输入对应订单号(必填),再拖拽图片">
</div>
</form>
</div>

<!-- 图片拖拽 -->

js部分

<script>  
    $("#dropz").dropzone({  
        url: "/enter/upload",  
        addRemoveLinks: true,  
        dictRemoveLinks: "Remove File",  
        dictCancelUpload: "Cancel Upload",  
        maxFiles: 5,  
        maxFilesize: 10, 
        autoProcessQueue: true,  
        acceptedFiles: ".jpg,.png,.jpeg",

        init: function() {  
            this.on("success", function(file) {  
                console.log("File " + file.name + "uploaded");  
            });  
            this.on("removedfile", function(file) {  
                console.log("File " + file.name + "removed");  
            });  
        }  
    });  
</script> 

models.py

# 建立用于存放图片编号和路径的数据库
class img(models.Model):
    order_id=  models.CharField(max_length=128,null=True)
    img = models.ImageField(upload_to='upload')

view.py

def case_enter(request):
  order_id=request.POST.get('order_id')
  img2 = request.FILES.get('file')
  if request.method == 'POST' and (len(str(order_id)) > 0):
    #print "is POST"
    imgpath = 'upload/'+str(time.time())+str(img2) # 名字独特性使用时间戳添加名字
    #print imgpath
    fp = open("ams/media/upload/%s"%(imgpath.split("/")[-1]),'wb')
    s = img2.read()
    fp.write(s)
    fp.close()
   
    time.sleep(1)
    conn= MySQLdb.connect(
        host='你的数据库host',
        port = 8000,
        user='root',
        passwd='数据库密码',
        db ='数据库名字',
    )
    cur = conn.cursor()
    conn.set_character_set('utf8')
    cur.execute('SET NAMES utf8;')
    cur.execute('SET CHARACTER SET utf8;')
    cur.execute('SET character_set_connection=utf8;')
    try:  
      sqlregisters = "insert into enter_img(order_id,img) value(%s,%s)"
      cur.execute(sqlregisters,(order_id,imgpath)) 
    except:
      print "order_id is none or '' "
      
    finally:
      conn.commit()
      conn.close()

  return render(request, 'case_enter.html')

值得注意的是图片的保存,这里保存在数据库中的形式是保存路径!!!而实际上的图片是以二进制的形式写入到文件夹中的,之后的图片展示是根据数据库索引,然后调出对应图片路径,然后再展示在前端

urls.py

urlpatterns = patterns('enter.views',
    url(r'^upload', 'case_enter'),
)

数据库

+-----+----------+-------------------------------------+
| id  | order_id | img                                 |
+-----+----------+-------------------------------------+
| 460 | 1234     | upload/1491036872.27WechatIMG2.png  |
+-----+----------+-------------------------------------+

这里是上传的样式

这里写图片描述

总结

完成图片拖拽上传并展示是一个比较完整的前后台交互的过程,在自己摸索的过程中,了解一些前后台交互规则,包括文件存储调用,这些在纯前端是涉及不到的,毕竟纯前端的技能树我不想点,我要点全栈的技能树,虽然道路漫长,但终究耗不过时间,诸位加油。

上一篇 下一篇

猜你喜欢

热点阅读