zoukankan      html  css  js  c++  java
  • django MongoDB上传文件

    django上传文件,查询到的资料都是用的django自己的models.Model类,去定义一个FileField类型的存储文件,并且在里面加一句upload_to,如下所示:
     
    但是如果用mongodb,虽然Document有FileField类型,但是没有upload_to这个参数,所以写了一个方法去将POST里面的文件存储到本地
     
    存储文件的方法如下:
    def uploaded_file(f,filename):
    address ='C:/Users/XXXX/Desktop/'+filename
    destination = open(address, 'wb+')
    for chunk in f.chunks():
    destination.write(chunk)
    destination.close()
    注方法说明:参数f为POST的FILES文件,filename为要存储的文件名,之所以没有用一个固定的地址,是因为上传的文件类型是不定的,可能还txt,也可能是jpg等
    html模板里的上传代码:
    
    
    <form id="formid" method="POST" action="" enctype="multipart/form-data">
    <div class="file-box">
    <input type='text' name='protextfield' id='protextfield' class='txt' />
    <input type='button' class='btn' value='浏览...' />
    <input type="file" name="proupload" class="file" id="fileField" size="28" onchange="document.getElementById('protextfield').value=this.value" />
    <input type="submit" name="submit" class="btn" value="上传" />
    </div>
    </form>
    模板注意点:form必须加enctype="multipart/form-data",否则不能传送文件。
     
    在view.py里调用该方法执行的上传操作
    def newproject(request):
    if request.FILES:
    filename =request.FILES['proupload'].name
    uploaded_file(request.FILES['proupload'],filename)
    post.proadress = filename
    return render_to_response('XXX.html', locals())
    说明:上面的方法中的filename是获得了上传的文件名,包括文件后缀,例如test.txt。request.FILES['proupload']是获得了名字为proupload的文件。这么做的结果就是将上传的文件存储到了一个本地固定的位置,并存储了文件名到数据库里。
     
     
    其他说明:目前没有做下载,但是下一步思路是想将所有文件固定存储到一个文件夹里,或者按后缀去分开存储,然后下载的时候按照文件名在存储文件夹里遍历,取出要找的文件进行下载。
  • 相关阅读:
    Wordpress安装及4.6漏洞问题
    天朝挖煤的题已经不会做了。。
    Python str decode---error
    requests库的初级学习
    Python虚拟环境的搭建
    天朝挖煤CTF
    七、TCP粘包和拆包
    六、Netty的Handler
    五、GoogleProtobuf
    三、Netty高性能架构设计
  • 原文地址:https://www.cnblogs.com/meitian/p/4763167.html
Copyright © 2011-2022 走看看